From 921a14559277cfb2ead84b613c02d0251aeeb9ab Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Tue, 1 May 2012 17:01:51 +0200 Subject: [PATCH] dropped the support for Python 2.5 let's elaborate the decision: Python 2.5 is a 6 years old release and "under the current release policy, no security issues in Python 2.5 will be fixed anymore" (!!); also, it doesn't support the new zipfile distribution format. --- README.md | 2 +- youtube-dl | Bin 41958 -> 41751 bytes youtube_dl/InfoExtractors.py | 13 +---- youtube_dl/trivialjson.py | 109 ----------------------------------- youtube_dl/utils.py | 6 +- 5 files changed, 4 insertions(+), 126 deletions(-) delete mode 100644 youtube_dl/trivialjson.py 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 e4d7beb2d646956663885df16cc73c8bd641de5e..56f5b289bdc021a725a94b4e5d0a26615915e42a 100755 GIT binary patch delta 23799 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

w+P#>$g!Qq} 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%0AA- z{PCo=nbUD~X}G#PT#GbaQjXd@=kJPE$&2* z-Vz(D4Ez&QZMV+M`W8HWjQ$uw*_WRquBEp^1Y{LRJ(OjL{>55ZW8HH*CxOALy+oxy zS(Rav0X_@{G=qi9xLeqSC8p!>4FcW+Wn(V1Ai-cz#&h^%zJX(7Rf5JPTJIF~5slKt zX)y8ldz2~)R1<2g4X39gScRuiS6s0%5LA0p>aA_Evl@BY;-{2FhnMAMYYbC_RVEoW z-+O_9#d*L+`nYWll0lKx*4bQ(jC>`}k0287n*G#oxB z$0N+0%7hw!9Gu}5?RrGDN9l+Ph;y(55{iLWV71bKy>Ivs4m@=aYQRHQvpUzC+R@b>iAeKagh`tCjD(}m&{uh`^NPa-)@-#$h5S| z-fWo{TU>+7cFHqFhiyFNsU~JDr?M(5l}s6b81e0u_G~w=uVhr#a#vN_4k>#xWr;(F z1(T;i$r@cn@#bRLtnnOz=WBTjC(%JYN4Lx6`0?}VCzZKK)8x<(g_30$^n>4`kr|Q{ z0Y!LLw=_u2U+Q#oWN3!q(H=Z&!hiQ_n^`51Du0oF2y1wY_8E(n5UR*UiXmO(+7eoS zp-b04R~?jX!fjT7Fiv=zBlonA>@+i8W&NzIqfx zSp9ecqdJ+MH%f7Tmu`0!)(^$W0n4m^T2*4ztR>%a_0t?$Sig0~Gn-)7W;H}3GDk!B zU878z>}o2lt$gN8WMBERU8YUQIS=!><~yhP`}=oq3o+j8E$LP{)7?6I>Aq0+qOU>TMlD-D5vQdCjH z5OA9PC!3&!gP@~NsD3pyi)ZQ?$MZ}*M@lR)a$2)t7NabYxW*Nmr%K6Qu<8BAb;qWG zjYd^=>LO63=dp3s<~c6f%x5N`VmacXMKS)$-_NBBlrHIt&1r~Yv>(2l4dZ3FTK;^^v&0Ab$@-= z^>py*E7N8Rt+Bo)rt=+sVyF}i!YZST@`q|2|p&Fn?Z-9%!t|?R~Qb!hZ|y2 z$Dj$M+<_RDc~Lq@kzfL~qJGd^1k-df1b2ygf-|$da2&*m#j-88B&J}SUy&Y(-S5?^ zdGvNe$H6=fy7z-`V*bP<+l|l*2ZDP_zE4#rFKP*mIDEBe1e6Ng0|e_6Vi?PN_W~s1 zAYr#DvUz2wa;$N&1a(lRP=*g+TK3%hRIVgv%)nU6By752j7%Fl1@oWvD_Ok|x#`GI zLO#?k0fQ7Lc=H@?KPvHb4w9_wWK@BRCc~GF*%CjYCSf{967|pMgH_E|SCK>nXJ_hP zv9$qx(=zC;9(Ats2ljPU$q#8=rq=qOwk`>!|{b#X5Vf$E?Emn4Sp@vI`Z{* znG9_B)mhotwH;A?^`t0m9N4Bh`pp{`g6(n|NBSdufn~C3GLTthcnkjNCl=6lN^axy zm+6*kn-Kp6Q@0Yz_nQsa~Y#lt5GHo@V2W+ol-`GJzn*w6-LkR=d38A0l`&RXc@L9$d zjjoaJiG9!J*8_jNM7{x{?GsCF5pqapBJ?L%acy6-8cxeZYXZvsaJRbC5p%hyeoI(=y+<4(F1iMibCcK#9zA-X_5ezH0-K8ep< zi90D=5_IPCtuJ%i$`sTan78eH5)ZqFXp0z8L_JI#2q+Hsr=~H@-gPXZYstG7H$DZL z=n_m8Xt->TkgpHd15(e|e&p&i!P6&~WV-u4QFVTja4_32A}JegY5??mH<+=h-nHo}FA4SiC>eSAN5kW3QHnJ8^D zl5m{aXfr5QBdzh6M69(p@oy42t+PK+$0=p&vILjWhL(Z@hBY7ml+w87aFh*QHCdiD zZS0{0)~yNApK7+Q-+j`Ix;~&W<^!P}7EB6~W$xgnOFL3QZjZGztkDY8uJ)ZD6gQHf zqiC*7m;xI8+pew*17p&LGI~Qz`UPf(jW~HYuU@|&Gr|+th`GAyH)V#fpIVD%;`q04 zVF_L{r6Oy_T+*CyVZNZk+zq*bO;Lm9;fX!IY=_b{8!(kYO zO&ql_a{&gBJF>zY&{S{xM|;NDN#67&3lZE0>pC-$qJ8}pwmS`;Rc)h+9#o3QqDCAj z`3TeZWEk;$VrxhrQhaAk7m}K5=!%?U1hX74cJ%RbxDdaH5loYCI@{+bu#=*8I@1)i zh~t1F-=F3vpDzC_m8#q>DWrN{V@d1c>KXFwj(QRjS+CPCcQ*pQh~kIdfSJ*r%^JE67?)HvPGZZg+J5H-~5YBLm+p&Mg^2JBHT@f|vSeGDMh;XTM#V%QcSSx*m zt(DGS9EGRzH|HdQ#Wj)}?ZX94-G%ga{c84Sw>M847R!RKW}na99Aliyc6im=<}Sb#o8vmZ0o#m!xAN^Nr^&#_uaN=2?B47Dqp?jY#I)4zApIu@v79mfzTt zOr_U#{we@J8KvgSWW1fLB%0n!Lz0kHqMc5oIZ6@zoGUfGUb=wqI5_pqrl`GGYJpi0 z8$T$_kT4}Yjipb?^z9?lH-6V?XqBDg=!^|Qz2`XBiVW)k8YTA!81Fbt0BXqd zB-h+R?{t95VU6d%VW?@yP1Wi`t9QYWW*eKy$rmb1Hmda*ZKx7W^7=h;e}mtPJC|X)U1ohDcJHrDDJ?Gk^wO?`gieTK~C%Hbn zfu5vK8D+Sl=hYOk@(=U|%8Su@^4gk^=+S!(4d$b<$tr}QlbqRGmf>q&aV}5ncSgv0 z9=}H13G*el`)1scL{6aD)v7`(aZ%3bRo4+oKdf;Q%%x+*+j&w>qoDt3-f1#ZH_U` z`iEcz??vt(J=(^E0pNsKOFYOC4>LWH0&xw0CLV1V3{C?d_#jB%#QhXu*pn&Ij zN$W6SN=Bx3<#LSe$jicU>K5k^5wE_3*~wW>)aMr}t1VMQ@h~wv8_v?YSG@RC)4#^W zA{MEzCUKuh{F+;moR6%Kr=KA)4d$=~BrX>gl@3zb_)6xftd;;DzCrY%b37E;6f(EU zr9}E$mMp0OYST}llBBNM^KE!caq*O@zxmIXh`?)kco91CQ(Ff0`zo2=q-Z}7w9piD z1v`PLpAEV#956q!HXQ8E%kc zY48^*9L+myJ-%*l7(@2A)5xIChw9Py3x-+X+k+zutzBmQ?1Rc190U@|384%&zGvkP z>!)5H1wr8kzOi2-qkWU>^+dp(0KOHSC^+SKwT5%@Y35E^wbBwV&_uBwh7>$Nz~BFj zeKdui`nD_nC{wxa$(W+_Z~-?oI8&7iF}o`TWkQgF_Iof^7Ub4m702Oan{^fL>NQYI z#yT}dA^YAf`VUFyd;PX`(2NrN$@x#c(&ThE41jL;p6ug*Q&Ux}zhVK9kWf?8LTJ`B z#WuL$yxOC!f;29lsDF>oZ|qD=jOLt<0TygqiZ_1zNvhT4zDFanHA8Yo4d&u^Dj8R#wP=@}zv{JPO#MLj zJb`huy6-W@l#U-$CNuTEoOQbN8wlo*y`0u%Gp1rN2l3gYnkW!!UwUE9d0{$G`UE(Z zi1>7Z`+>6FYgkU;1e9(}%*b;bXWwqE#8Xip#NnzDHGDtQ`6a-YGsMb1)R#kE{GxYBC4W*h=dCO08jycWnp3%iYCA0Pyv880ssIDKmt&4aQUj@ z>|ko1kZptUZ;x1Ajg2WPA}t^?fxv|lrKI8?xmca33p3%rgkuQ~k(B>VCZt5V{Zqq^ z0{y#IClqyr1X-_+7PE3H;7EQ40Em3}*Y+d;*RR%gE-a27ni_8ah~}YTpKSk*|05;q z)Ae%s%>#SUd%!Ib2CK$MEv~?LT{q1xk33->iW^6pOJyNc#&5W#IRI9RizjX!9WH>l zMCRh-EI}7boXA&>Z^s{{k9{HBrP0}=n(WZNq>?X3wM-8!Cat{q)@h|CP9PgEcHfVT z@OE9z?=X{d9nEzQYwaecAGN$`t!&2ERmD{h&lD?a*Uv*ETtnt}T09?I>ny&c_f0gV zhwkd`-hCr%AJ)vjXoNBF!rSL~W#QSYa-yFx13s-p^oE@+r!18I_`wHR=VWbQaYdgZ zIk@Igg_}?WGsl@|x0+&y%Z8r2QL6&!{Wj%k`2EAItnJNXXcK~KM?A@jw{6sz=Qwl} z1qMQnrNKrjW4AZaV-^Z&W@$ zcXD{w4UN8ce~wxle6b)82dH}IT`Es>Gb7H zxn`5C59BK`mE5SdrW{$>ki zHIUgo=-MB7R~!gQ)i#$Zw)&&vOfa*yxnF+XgP=99kfh*LW;^t#_%^b1b%rVVkv8HPug{vCjpdDTXP6o@!J*&a%V&fh$E)q}>A~p;+{O&VdzFr~Q0H{GN!C5(F zSj<;iUMt8ED(^~zz)JWN;GCwL%r#!xJxmq&#m|9dNR$&&6T*7qRVc!2sy>mI;>SYQ z{oaY`Rol5liYp$eU(-tEot|nXx@uxyV~Ms}dA)*w_dS(kUWDE`8%unW5U8jOryd&C zreS;5JUc}Yo70q4TCfrG^`Q;#2%v(pI+cPfC;aPW38Qy`EK!k_ z*BR01B?k2Zr+*8OX^Dy0k-~JV1p{S4&nAb7p^RaaLp4a3TzrFhMK$`9kHuAE@1#`X zBs<0w*_#rQMzf_={9o75Vb?R>NfjCs$BxIJ?-oNgU$V2KO>gT(pP#LG{zPVzWM!b- z0fjxjdh`6^=bc$!oY=Lva33Zgh=r%MZKB)-4sDfM2TmspVz|6dLnLWs8bfo#J*T}}_uQRq<#>^ej6 zg~kf{W-0F~z~wi4+x4S@a7C?veHI&l$J!VTg$h z=3T_sG_A6vuwG*NiLbC&qtk90H!NeG% zIW2>+;7-Z;7evfJJSg?4ETg5t0`H2<07Jn^m0FDAh)Iq>sM5$MZYp2kB5^!kLNGzMMS8Nvz>?9)Ev@Cn7u|9d^t&gPT8@f+9G=r* z^T$n?irC6YXnQ`ID^{N;d56z}m&1~?V?UR4vg~wC-6VEllVSwXdbEI@Nby|J6K`<9 z;b(^BQpCxR5<@~CI*R8rJ$~UiY^8%3Dx=)F7ECS(MW!q$OA3Y)G-@GT(Y<1EbN4=m z=kHY1g}Yyx`g7iBelBUc*<%ZIpLg@1P&wC*Z)ytMQEk25V)u9TUuiicC2VPqXSTvr z_?RG%^HaRvz&TSQt3)wiTFNJxQ>@_X$9)g_QQ&F;$FaP5EpBUM|KGpTir-~=@IAA7 z<3xTr;shZ!zLwuf?b~yNtP~Bd&Q5N%^HNoSC$N)fd1{GcRMsKFge$b^685-XfKFRk z6@dA#KFh099D0YZF!d>yE|+O`ZEEW8qYvZ4*@q36A7~hOXHi8O_SzUV;J2F*eR2dg zQtr8GLu{x`eG<*eYyhs?e6+e+oJ-&{QqH95+cSS`HK)UI3!+Mh7Hm~=4CTrjyRP#( z+qj8fPcD<1(mEPTl*N3|LOOXb3aTQ#$deCW3BUHA!=$nUuXm%yP$b}ek}UCl-NH%b zD>M5}^5p=o1FnxERp;d)3sUP`P9)()?4y6z$wo0V8D@9-=p?K-+E7vq@}LLw^B{iRu-}rrxeGvp)zL} zeml1kaRr~P@JWoN={QD-E!La}FV`6;Ke&-QW{>JLUl%;B+}V?BKWgLW{W*Yt_h6%c zV45~@_z)uR@a?W}CTC({ck#$u$VaSs6#F{XX=5`ZVb{U1)$WwS$Py)x=&eAZNY_mK zr;G37xfe%)_1LkrJ4(2+=|+)()6!ZkHFWuX!7SQ#m}R-~ynr|O4Li;I7&OS36z0mw z@0Hyl15`twrp!h)EABA1OO8N5CP5tD?vC@>YcB}IA7&JU+tK<)O2cPaL+uX4cJ-lj zK6i>6My2g=ZYoScd6jNab`2z!gVRTl3lTl9UG5z7Q|6x{fA3riYum=q8x#&c`laqu zA?52xzTYAJ2zQ#^raQ_T?UL83#PlBQ94IhumG|}cBqNV>08e_zCJ^OHF_xPT%T;V? zzlInG++O_&7q?}3US|vMfx~^;^C}6&uOxH<@i^U3-r^0QGkyteTdO#mI1@s@xXUds zVoecW59+cNSEnx|dMUGxVmPp2^zyS%0&)@(j#;PPxKi5YeB*mPEYzMmmLEYwwFIx< z{C*w&jUnpbBXfkB0#0eh->>?y64FH(Uab&}^(jWqBeaz-1(uvo_M7_*l=FF(N`c}a z+uA5VEXi?5SO47G3mFhC1S*?tKz{5vx(M^O5Xcjgp zXoy*=R92bSIbG=Knb`H2PUQDYq52R?ZPm}uf_Qts&1d;(3@BScH?hCEJl_yYAo>N4 zfdUI9rHgy^cAGPCmkyU78IRcRw3tQRn0Kvpd_RZWX1RSn3q?|XBXTo<>k~`qHUA51 zDF3l77b(WQapVV`Jr2R4`38!lnxU$u0WOV=)mn$jQtrl8(JNcWB$3vpxRXDSsq|)Q z@Hk~W&{w_C6)YYgPS&!a6HcoKozbyb7a)6YLpqDlInQF375&qZ8XK^LaDY62qrjPO z?|>Q`9seAh-<&-{APP?k6%)8%9hfS}X}`2J(0m4>M}G_Kx-*bYFJqdl_jeE_e&3b&dP!%E z!OoS?()zrO*mS_2WH%=Zzy7&YElqIZ`S{P%O>oecE9{F%H#fe z1~UG9ezbKZ`M9){m12BzMZ?r{jMOEh>7**bR@YE8{h1e>z&nEtA2#b%Lq$}h%UJ<( zkkjz75N8Gm)&-Abu+lE#ZR^(9Y530nlk5XtJLtV5_|~%w&pQB?3ylryCf3JvfC?lUNFLW+38motOd36 zWso{CUT@-0-u_$M8TZ}UwqC^+wWoS|X@US<_82~<8nzLkO~mCrLT%XPM1CrsE}ENq z773>Jj@?ipB^891;>nhPH%!MHS>S>AB}_Dtxd|?tE%a7YGonYb*KM+ui#UI$sHXE= z?A;S6B$nSVWQhNv3TYY|2re_ z|A_?QUs3@8Ap9Nm{+Bj@|L_SH7YFBm(7|iK|E&8Dpcu^q5`?$_0EULvU#!0x8vZ-- z7h3$?;2$(WnhzvciTqc@-q`xfe=rchcEwL=)Y4O g{~u@k?@rU9fd2(I{&x5mZX}%NQy@F%{p&dY1$XS1hyVZp 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',