FilesSubmittedBranchesLabelsClientsUsersJobsHelp
Tree viewShow file textShow revision historyShow/hide recent activityInformation
Recent activity in //depot/projects/podgrab/podgrab.py/...
2192005/10/20ksimpsoniTunes 4.9 does podcasts natively now, so podgrab is officially obsolete.
1182005/01/15ksimpsonpodgrab 1.0. keep only the newest 3 episodes per feed so the 4GB mini doesn't fill up.
1032004/11/27ksimpsonfeeds.opml is per-user config, it doesn't belong in the depot. podgrab reads ~/.podgrab/feeds.opml
952004/11/09zz9podgrab: urllib2 + a real User-Agent; two feeds 403 on Python-urllib.
912004/10/14ksimpsoncopy to the ipod if it's mounted. one dead feed shouldn't kill the whole run.
//depot/projects/podgrab/podgrab.py#1

//depot/projects/podgrab/podgrab.py#1 – add change 88 (xtext) ·revision history

1#!/usr/bin/env python
2"""podgrab - fetch podcast enclosures and drop them on the iPod.
3
4usage: podgrab.py [feeds.opml]
5
6ksimpson, oct 2004. needs Python 2.3.
7"""
8
9import os
10import sys
11import urllib
12from xml.dom import minidom
13
14IPOD = "/Volumes/IPOD"
15CACHE = os.path.expanduser("~/.podgrab")
16SEEN = os.path.join(CACHE, "seen")
17
18
19def read_opml(path):
20 dom = minidom.parse(path)
21 feeds = []
22 for node in dom.getElementsByTagName("outline"):
23 url = node.getAttribute("xmlUrl")
24 if url:
25 feeds.append((node.getAttribute("text"), url))
26 return feeds
27
28
29def enclosures(feed_url):
30 dom = minidom.parse(urllib.urlopen(feed_url))
31 for item in dom.getElementsByTagName("item"):
32 for enc in item.getElementsByTagName("enclosure"):
33 yield enc.getAttribute("url")
34
35
36def load_seen():
37 seen = {}
38 if not os.path.exists(SEEN):
39 return seen
40 for line in open(SEEN):
41 seen[line.strip()] = 1
42 return seen
43
44
45def main(argv):
46 opml = len(argv) > 1 and argv[1] or "feeds.opml"
47 if not os.path.isdir(CACHE):
48 os.makedirs(CACHE)
49 seen = load_seen()
50 out = open(SEEN, "a")
51 for title, url in read_opml(opml):
52 print "==>", title
53 for enc in enclosures(url):
54 if enc in seen:
55 continue
56 fname = os.path.join(CACHE, os.path.basename(enc))
57 print " ", enc
58 urllib.urlretrieve(enc, fname)
59 out.write(enc + "\n")
60 out.close()
61
62
63if __name__ == "__main__":
64 main(sys.argv)

P4Web/LINUX26X86/2005.1/82295 · Copyright © 1995-2005 Perforce Software · ttul.org