]> git.frykholm.com Git - svtplaydump.git/blobdiff - svtplaydump.py
oops
[svtplaydump.git] / svtplaydump.py
index 0718c308e74c87e0125d84230b98a5b17094a074..9b1991c371f6f368105433271c281dd27e408146 100755 (executable)
@@ -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&sectionId=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&sectionId=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))