You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
#!/usr/bin/env python
 | 
						|
 | 
						|
import datetime
 | 
						|
import feedparser
 | 
						|
import json
 | 
						|
import os
 | 
						|
from urlparse import urlparse
 | 
						|
 | 
						|
def readConfigFile():
 | 
						|
    """Read the config file ~/.youtube-rss and return a dictionary"""
 | 
						|
    path = os.path.expanduser("~/.youtube-rss")
 | 
						|
    configFile = open(path)
 | 
						|
    contents = configFile.read()
 | 
						|
    configFile.close()
 | 
						|
    return json.loads(contents)
 | 
						|
 | 
						|
def saveConfigFile(dictonary):
 | 
						|
    """Take a dictonary and save it to the config file as json"""
 | 
						|
    newContents = json.dumps(dictonary, sort_keys=True, indent=4)
 | 
						|
    path = os.path.expanduser("~/.youtube-rss")
 | 
						|
    configFile = open(path, "w")
 | 
						|
    configFile.write(newContents)
 | 
						|
    configFile.close()
 | 
						|
 | 
						|
def getVideoIdFromUrl(url):
 | 
						|
    urlparts = urlparse(url)
 | 
						|
    args = urlparts.query.split("&")
 | 
						|
    for arg in args:
 | 
						|
        pair = arg.split("=")
 | 
						|
        if pair[0] == "v":
 | 
						|
            return pair[1]
 | 
						|
 | 
						|
    return None
 | 
						|
 | 
						|
def downloadVid(vidId, path):
 | 
						|
    if path[-1] != '/':
 | 
						|
        path = "%s/" % path
 | 
						|
 | 
						|
    now = datetime.datetime.now()
 | 
						|
 | 
						|
    sysCall = "youtube-dl -o \"%s%s_%%(stitle)s.%%(ext)s\" \"http://www.youtube.com/watch?v=%s\"" % \
 | 
						|
        (path, now.strftime("%Y-%m-%d"), vidId)
 | 
						|
 | 
						|
    os.system(sysCall)
 | 
						|
 | 
						|
def checkForNew(channel):
 | 
						|
    feed = feedparser.parse(channel['link'])
 | 
						|
    for entry in feed.entries:
 | 
						|
        vidId = getVideoIdFromUrl(entry.link)
 | 
						|
        if vidId not in channel['watched']:
 | 
						|
            fullpath = os.path.expanduser(channel['destination'])
 | 
						|
            downloadVid(vidId, fullpath)
 | 
						|
            channel['watched'].append(vidId)
 | 
						|
 | 
						|
    return channel
 | 
						|
 | 
						|
def main():
 | 
						|
    """Downloads all the links"""
 | 
						|
    config = readConfigFile()
 | 
						|
    newconfig = []
 | 
						|
    for channel in config:
 | 
						|
        newconfig.append(checkForNew(channel))
 | 
						|
 | 
						|
    saveConfigFile(newconfig)
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 | 
						|
 |