X-Git-Url: https://git.frykholm.com/svtplaydump.git/blobdiff_plain/56181f0a685110bf47faa35ff6f90ab79b864464..7c760a95e703fa38d7de2d79c3534ed8d08c1e56:/svtplaydump.py diff --git a/svtplaydump.py b/svtplaydump.py index 0718c30..9b1991c 100755 --- a/svtplaydump.py +++ b/svtplaydump.py @@ -27,6 +27,8 @@ import re import json from Crypto.Cipher import AES import struct +import argparse +import feedparser try: import urlparse except ImportError: @@ -38,19 +40,13 @@ except ImportError: pass import sys -def main(argv=None): - if argv is None: - argv=sys.argv +def main(url): + page = urllib2.urlopen(url).read() + soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES) + videoid = re.findall("svt_article_id=(.*)[&]*",page)[0] + flashvars = json.loads(urllib2.urlopen("http://www.svt.se/wd?widgetId=248134§ionId=1024&articleId=%s&position=0&format=json&type=embed&contextSectionId=1024"%videoid).read()) try: - videoid = re.findall("/video/(.*)[/]*",argv[1])[0] - soup = BeautifulSoup(urllib2.urlopen("http://www.svtplay.se/video/%s/?type=embed"%videoid).read()) - flashvars = json.loads(soup.find("param", {"name":"flashvars",'value':True})['value'][5:]) - except(IndexError): - page = urllib2.urlopen(argv[1]).read() - videoid = re.findall("svt_article_id=(.*)[&]*",page)[0] - flashvars = json.loads(urllib2.urlopen("http://www.svt.se/wd?widgetId=248134§ionId=1024&articleId=%s&position=0&format=json&type=embed&contextSectionId=1024"%videoid).read()) - try: - title = flashvars['statistics']['title'] + title = soup.find('meta',{'property':'og:title'}).attrMap['content'] except: title = "unnamed" if 'dynamicStreams' in flashvars: @@ -69,7 +65,7 @@ def main(argv=None): else: print "Could not find any streams" return - + return title+'.ts' def download_from_playlist(url, title): playlist = parse_playlist(urllib2.urlopen(url).read()) videourl = sorted(playlist, key=lambda k: int(k['BANDWIDTH']))[-1]['url'] @@ -81,9 +77,11 @@ def download_from_playlist(url, title): decrypt=False with open("%s"%title,"w") as ofile: segment=0 + size = 0 for url in segments: - print "Downloading: %s"%(url) ufile = urllib2.urlopen(url) + print "\r{} MB".format(size/1024/1024), + sys.stdout.flush() if decrypt: iv=struct.pack("IIII",segment,0,0,0) decryptor = AES.new(key, AES.MODE_CBC, iv) @@ -93,6 +91,7 @@ def download_from_playlist(url, title): if decrypt: buf = decryptor.decrypt(buf) ofile.write(buf) + size += len(buf) else: ufile.close() break @@ -132,4 +131,18 @@ def parse_segment_playlist(playlist): return(segments, metadata) if __name__ == "__main__": - sys.exit(main()) + parser = argparse.ArgumentParser() + parser.add_argument("-r", "--rss", help="Download all files in rss", + action="store_true") + parser.add_argument("url") + args = parser.parse_args() + if args.rss: + d = feedparser.parse(args.url) + for e in d.entries: + print("Downloading: %s"%e.title) + filename = main(e.link) + print Popen(["avconv","-i",filename,"-vcodec","copy","-acodec","copy", filename+'.mkv'], stdout=PIPE).communicate()[0] + #print(e.description) + else: + filename = main(args.url) + print("Saved to {}".format(filename))