aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rwxr-xr-xyoutube-dlbin41958 -> 41751 bytes
-rw-r--r--youtube_dl/InfoExtractors.py13
-rw-r--r--youtube_dl/trivialjson.py109
-rw-r--r--youtube_dl/utils.py6
5 files changed, 4 insertions, 126 deletions
diff --git a/README.md b/README.md
index 1f752b9a7..859ca663c 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ youtube-dl [options] url [url...]
## DESCRIPTION
**youtube-dl** is a small command-line program to download videos from
YouTube.com and a few more sites. It requires the Python interpreter, version
-2.x (x being at least 5), and it is not platform specific. It should work in
+2.x (x being at least 6), and it is not platform specific. It should work in
your Unix box, in Windows or in Mac OS X. It is released to the public domain,
which means you can modify it, redistribute it or use it however you like.
diff --git a/youtube-dl b/youtube-dl
index e4d7beb2d..56f5b289b 100755
--- a/youtube-dl
+++ b/youtube-dl
Binary files differ
diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py
index ae98e1264..256d106b1 100644
--- a/youtube_dl/InfoExtractors.py
+++ b/youtube_dl/InfoExtractors.py
@@ -12,23 +12,14 @@ import time
import urllib
import urllib2
import email.utils
+import xml.etree.ElementTree
+from urlparse import parse_qs
try:
import cStringIO as StringIO
except ImportError:
import StringIO
-# parse_qs was moved from the cgi module to the urlparse module recently.
-try:
- from urlparse import parse_qs
-except ImportError:
- from cgi import parse_qs
-
-try:
- import xml.etree.ElementTree
-except ImportError: # Python<2.5: Not officially supported, but let it slip
- warnings.warn('xml.etree.ElementTree support is missing. Consider upgrading to Python >= 2.5 if you get related errors.')
-
from utils import *
diff --git a/youtube_dl/trivialjson.py b/youtube_dl/trivialjson.py
deleted file mode 100644
index 7cce2a98f..000000000
--- a/youtube_dl/trivialjson.py
+++ /dev/null
@@ -1,109 +0,0 @@
-"""trivialjson (https://github.com/phihag/trivialjson)"""
-
-import re
-def loads(s):
- s = s.decode('UTF-8')
- def raiseError(msg, i):
- raise ValueError(msg + ' at position ' + str(i) + ' of ' + repr(s) + ': ' + repr(s[i:]))
- def skipSpace(i, expectMore=True):
- while i < len(s) and s[i] in ' \t\r\n':
- i += 1
- if expectMore:
- if i >= len(s):
- raiseError('Premature end', i)
- return i
- def decodeEscape(match):
- esc = match.group(1)
- _STATIC = {
- '"': '"',
- '\\': '\\',
- '/': '/',
- 'b': unichr(0x8),
- 'f': unichr(0xc),
- 'n': '\n',
- 'r': '\r',
- 't': '\t',
- }
- if esc in _STATIC:
- return _STATIC[esc]
- if esc[0] == 'u':
- if len(esc) == 1+4:
- return unichr(int(esc[1:5], 16))
- if len(esc) == 5+6 and esc[5:7] == '\\u':
- hi = int(esc[1:5], 16)
- low = int(esc[7:11], 16)
- return unichr((hi - 0xd800) * 0x400 + low - 0xdc00 + 0x10000)
- raise ValueError('Unknown escape ' + str(esc))
- def parseString(i):
- i += 1
- e = i
- while True:
- e = s.index('"', e)
- bslashes = 0
- while s[e-bslashes-1] == '\\':
- bslashes += 1
- if bslashes % 2 == 1:
- e += 1
- continue
- break
- rexp = re.compile(r'\\(u[dD][89aAbB][0-9a-fA-F]{2}\\u[0-9a-fA-F]{4}|u[0-9a-fA-F]{4}|.|$)')
- stri = rexp.sub(decodeEscape, s[i:e])
- return (e+1,stri)
- def parseObj(i):
- i += 1
- res = {}
- i = skipSpace(i)
- if s[i] == '}': # Empty dictionary
- return (i+1,res)
- while True:
- if s[i] != '"':
- raiseError('Expected a string object key', i)
- i,key = parseString(i)
- i = skipSpace(i)
- if i >= len(s) or s[i] != ':':
- raiseError('Expected a colon', i)
- i,val = parse(i+1)
- res[key] = val
- i = skipSpace(i)
- if s[i] == '}':
- return (i+1, res)
- if s[i] != ',':
- raiseError('Expected comma or closing curly brace', i)
- i = skipSpace(i+1)
- def parseArray(i):
- res = []
- i = skipSpace(i+1)
- if s[i] == ']': # Empty array
- return (i+1,res)
- while True:
- i,val = parse(i)
- res.append(val)
- i = skipSpace(i) # Raise exception if premature end
- if s[i] == ']':
- return (i+1, res)
- if s[i] != ',':
- raiseError('Expected a comma or closing bracket', i)
- i = skipSpace(i+1)
- def parseDiscrete(i):
- for k,v in {'true': True, 'false': False, 'null': None}.items():
- if s.startswith(k, i):
- return (i+len(k), v)
- raiseError('Not a boolean (or null)', i)
- def parseNumber(i):
- mobj = re.match('^(-?(0|[1-9][0-9]*)(\.[0-9]*)?([eE][+-]?[0-9]+)?)', s[i:])
- if mobj is None:
- raiseError('Not a number', i)
- nums = mobj.group(1)
- if '.' in nums or 'e' in nums or 'E' in nums:
- return (i+len(nums), float(nums))
- return (i+len(nums), int(nums))
- CHARMAP = {'{': parseObj, '[': parseArray, '"': parseString, 't': parseDiscrete, 'f': parseDiscrete, 'n': parseDiscrete}
- def parse(i):
- i = skipSpace(i)
- i,res = CHARMAP.get(s[i], parseNumber)(i)
- i = skipSpace(i, False)
- return (i,res)
- i,res = parse(0)
- if i < len(s):
- raise ValueError('Extra data at end of input (index ' + str(i) + ' of ' + repr(s) + ': ' + repr(s[i:]) + ')')
- return res
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 0f903c64a..6e982157c 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -11,16 +11,12 @@ import sys
import zlib
import urllib2
import email.utils
+import json
try:
import cStringIO as StringIO
except ImportError:
import StringIO
-
-try:
- import json
-except ImportError: # Python <2.6, use trivialjson (https://github.com/phihag/trivialjson):
- import trivialjson as json
std_headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1',