Skip to content

Instantly share code, notes, and snippets.

@buddy-sandidge
Created August 3, 2012 16:49
Show Gist options
  • Save buddy-sandidge/3249411 to your computer and use it in GitHub Desktop.
Save buddy-sandidge/3249411 to your computer and use it in GitHub Desktop.
Youtube rss
#!/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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment