]>
code.delx.au - webdl/blob - common.py
1 # vim:ts=4:sts=4:sw=4:noet
20 autosocks
.try_autosocks()
22 CACHE_DIR
= os
.path
.expanduser("~/.cache/webdl")
25 def __init__(self
, title
, parent
=None):
28 parent
.children
.append(self
)
31 self
.can_download
= False
38 root_node
= Node("Root")
40 print "Loading iView episode data...",
43 iview_node
= Node("ABC iView", root_node
)
44 iview
.fill_nodes(iview_node
)
47 print "Loading SBS episode data...",
50 sbs_node
= Node("SBS", root_node
)
51 sbs
.fill_nodes(sbs_node
)
57 def urlopen(url
, max_age
):
58 if not os
.path
.isdir(CACHE_DIR
):
59 os
.makedirs(CACHE_DIR
)
62 return urllib
.urlopen(url
)
64 filename
= hashlib
.md5(url
).hexdigest()
65 filename
= os
.path
.join(CACHE_DIR
, filename
)
66 if os
.path
.exists(filename
):
67 file_age
= int(time
.time()) - os
.path
.getmtime(filename
)
68 if file_age
< max_age
:
71 src
= urllib
.urlopen(url
)
72 dst
= open(filename
, "w")
73 shutil
.copyfileobj(src
, dst
)
79 def grab_xml(url
, max_age
):
80 f
= urlopen(url
, max_age
)
85 def grab_json(url
, max_age
):
86 f
= urlopen(url
, max_age
)
91 def download_rtmp(filename
, vbase
, vpath
, hash_url
=None):
92 if vpath
.endswith(".flv"):
100 if hash_url
is not None:
101 cmd
+= ["--swfVfy", hash_url
]
103 p
= subprocess
.Popen(cmd
)
106 print >>sys
.stderr
, "rtmpdump exited with error code:", ret
111 print >>sys
.stderr
, "Failed to run rtmpdump!", e
113 except KeyboardInterrupt:
114 print "Cancelled", cmd
118 except KeyboardInterrupt:
119 p
.send_signal(signal
.SIGKILL
)
122 def download_urllib(filename
, url
):
123 print "Downloading: %s -> %s" % (url
, filename
)
125 src
= urllib
.urlopen(url
)
126 dst
= open(filename
, "w")
127 shutil
.copyfileobj(src
, dst
)
129 except KeyboardInterrupt:
130 print "\nCancelled", url