3 from __future__
import with_statement
5 from email
.utils
import parsedate
10 # consider timestamps earlier then this non-existant
11 reasonable_timestamp
= time
.mktime(time
.strptime("2008", "%Y"))
13 def __init__(self
, url
):
15 # last url timestamp if any
17 # ignore episodes older then this
18 self
.watermark
= time
.mktime(time
.strptime("03 2008", "%m %Y"))
20 def get_remote_timestamp(self
):
21 conn
= urllib2
.urlopen(self
.url
)
23 if 'Last-Modified' in conn
.info():
24 t
= time
.mktime( parsedate( conn
.info()['Last-Modified'] ) )
25 if t
> self
.reasonable_timestamp
:
32 if self
.timestamp
is not None:
33 remote_timestamp
= self
.get_remote_timestamp()
34 return remote_timestamp
is None or \
35 self
.timestamp
< remote_timestamp
39 def get_new_episodes(self
):
40 tree
= feedparser
.parse( self
.url
)
41 watermark
= self
.watermark
42 for e
in tree
.entries
:
43 timestamp
= time
.mktime(e
.modified_parsed
)
44 if timestamp
> self
.watermark
and 'enclosures' in e
:
45 for encl
in e
.enclosures
:
47 if timestamp
> watermark
:
49 self
.watermark
= watermark
51 def get_subscribed_feeds():
52 with
open("feeds.lst","r") as f
:
53 for url
in map(str.strip
, f
.readlines()):
56 def get_updated_feeds():
57 for feed
in get_subscribed_feeds():
61 def download_episode(url
):
66 for feed
in get_updated_feeds():
68 for url
in feed
.get_new_episodes():
71 # update feed watermark
76 if download_episode(url
):
78 file_manager
.append(url
)
80 # file_manager.expire_and_prune()