From: Selena Deckelmann Date: Tue, 18 Aug 2009 16:30:47 +0000 (-0600) Subject: Version from May 18 of posttotwitter.py X-Git-Url: http://git.postgresql.org/gitweb/static/session/%7B%7Bsession.id%7D%7D-%7B%7Bsession.title%7Cslugify%7D%7D?a=commitdiff_plain;h=3f8d3252f61e42082923c254b4a4102fc88c742d;p=hamn.git Version from May 18 of posttotwitter.py --- diff --git a/posttotwitter.py b/posttotwitter.py new file mode 100755 index 0000000..90629e6 --- /dev/null +++ b/posttotwitter.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python + +# python rss reader -> twitter post +import feedparser, pickle, os, sys, twitter, urllib, simplejson as json +import psycopg2 +import feedparser +import datetime +import socket +import ConfigParser + + + +class RSS2Twitter: + def __init__(self, filename, url, username, passwd): + self.filename=filename + self.url=url + self.username=username + self.passwd=passwd + self.twApi=twitter.Api(username=self.username, password=self.passwd) + + psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) + self.db.set_client_encoding('UTF8') + c = self.db.cursor() + c.execute("SET TIMEZONE=GMT") + + if os.path.exists(self.filename): + self.itemsDB = pickle.load(file(filename, 'r+b')) + else: + self.itemsDB = {} + + def getLatestFeedItems(self, items = 10): + feed=feedparser.parse(self.url); + it=feed["items"] + it_ret=it[0:items] + return it_ret + + def twitIt(self, items): + oldItems=pItems=0 + items.sort(reverse=True) + for it in items: + if self.itemPublished(it) == None: + trim = json.loads(self.trim(it["link"])) + txt=it["title"] +" "+trim["url"] + # print txt + try: + status = self.twApi.PostUpdate(txt) + except IOError, e: + raise e + pItems=pItems+1 + # print "Total items: ", len(items) + # print "published: ",pItems + # print "old stuff: ",len(items) - pItems + + def itemPublished (self, item): + if self.itemsDB.has_key(item["link"]) == True: + return True + else: + self.itemsDB[item["link"]]=item["title"] + pickle.dump(self.itemsDB, file(self.filename, 'w+b')) + return None + + def trim(self, url): + try: + data = urllib.urlencode(dict(url=url, source="RSS2Twit")) + encodedurl="http://tr.im/api/trim_url.json?"+data + instream=urllib.urlopen(encodedurl) + ret=instream.read() + instream.close() + if len(ret)==0: + return url + return ret + except IOError, e: + raise "urllib error." + + def tiny(self, url): + try: + data = urllib.urlencode(dict(url=url, source="RSS2Twit")) + encodedurl="http://www.tinyurl.com/api-create.php?"+data + instream=urllib.urlopen(encodedurl) + ret=instream.read() + instream.close() + if len(ret)==0: + return url + return ret + except IOError, e: + raise "urllib error." + +if __name__ == "__main__": + # run it like python rss2twitter.py oi.dat (oi.dat is the posted item db) + # update username and passwd with your twitter account data, surrounding them with quotes. + url="http://planet.postgresql.org/rss20_short.xml" + r2t=RSS2Twitter(sys.argv[1], url, 'planetpostgres', 'pl4n3t.pg') + its=r2t.getLatestFeedItems() + r2t.twitIt(its)