Browse Source

fix #8

items now get posted in chronological order (per feed).
master
Daan Wynen 10 years ago
parent
commit
55c2b27164
  1. 30
      feed2twister.py

30
feed2twister.py

@ -98,10 +98,13 @@ def main(max_items): @@ -98,10 +98,13 @@ def main(max_items):
feed = feedparser.parse(feed_url)
n_items = 0
# store posts for later since we want to post them in chronological order
msgs = []
for i, e in enumerate(feed.entries):
eid = '{0}|{1}'.format(feed_url,e.id)
if db.has_key(eid) and not args.repost_existing: # been there, done that (or not - for a reason)
if eid in db.keys() and not args.repost_existing: # been there, done that (or not - for a reason)
logging.debug('Skipping duplicate {0}'.format(eid))
else: # format as a <=140 character string
@ -133,20 +136,14 @@ def main(max_items): @@ -133,20 +136,14 @@ def main(max_items):
logging.warn(u'Link too long at {0}'.format(eid))
continue
logging.info(u'posting {0}'.format(msg))
try:
next_k = get_next_k(twister, main_config['username'])
twister.newpostmsg(main_config['username'], next_k, msg)
db[eid] = utfmsg # anydbm can't handle unicode, so it's a good thing we've also kept the utf-8 :)
except Exception, e:
logging.error(`e`) # usually not very informative :(
logging.info(u'will post {0}'.format(msg))
msgs.append((eid, msg, utfmsg))
n_items+=1
if n_items >= max_items:
logging.warn(u'Quota reached. Skipping {0} items:'.format(len(feed.entries[i+1:])))
for ee in feed.entries[i+1:]:
eeid = '{0}|{1}'.format(feed_url, ee.id)
logging.warn(u' {0}|{1}'.format(feed_url, ee.id))
@ -159,6 +156,19 @@ def main(max_items): @@ -159,6 +156,19 @@ def main(max_items):
db[eeid] = utf8msg
break
# done parsing this feed, now post what we found, but in chronological order
msgs.reverse()
for (eid, msg, utfmsg) in msgs:
try:
logging.info(u'now posting {0}'.format(msg))
next_k = get_next_k(twister, main_config['username'])
twister.newpostmsg(main_config['username'], next_k, msg)
db[eid] = utfmsg # anydbm can't handle unicode, so it's a good thing we've also kept the utf-8 :)
except Exception, e:
logging.error(repr(e)) # usually not very informative :(
if e.error:
logging.error(e.error)
if __name__=='__main__':
if args.maxitems != None:

Loading…
Cancel
Save