Google App EngineでInstapaperのFeedをParseしてはてなに投稿するPythonコード
InstapaperのRSSをGAEでパースしてはてなブックマークにタグ[あとで読む]で投稿する。
はてブの投稿にはWSSE.pyを使う。
#!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = "yadokari23" import logging import re import os import urllib, urllib2 from google.appengine.ext import webapp from google.appengine.ext.webapp import util from google.appengine.ext import db from google.appengine.api import urlfetch from google.appengine.api import mail from xml.etree.ElementTree import * import datetime from WSSE import * from google.appengine.api.labs import taskqueue #はてな情報 HATENA_USERNAME='XXXXXXXX' HATENA_PWD='XXXXXXXXX' InstapaperURL='http://www.instapaper.com/rss/XXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX' class Instpr(db.Model): title = db.TextProperty() link = db.LinkProperty() description = db.TextProperty() pubDate = db.TextProperty(required=True) task = db.BooleanProperty() class MainHandler(webapp.RequestHandler): def get(self, mode=""): if mode=='parse_Instapaper_feed': #Instapaperのフィードをパースする results = urlfetch.fetch(url=InstapaperURL, method=urlfetch.GET, deadline=10) dom = fromstring(results.content) if results.status_code == 200: if dom.findall('.//item'): for e in dom.findall('.//item'): q = Instpr.gql("WHERE link = :1", e.findtext('./link')) Instprrec = q.fetch(1) if Instprrec is None: p = Instpr(title=e.findtext('./title') ,link=e.findtext('./link') ,description=e.findtext('./description') ,pubDate=e.findtext('./pubDate') ,task=False) p.put() #task queue未登録のレコードを1件取り出す。 Instprrec = Instpr.all().filter('task =', False).get() if Instprrec: query={'link':Instprrec.link } #タスクbookmarkTwFavのインスタンスを作成し、タスクを追加 bookmark_task = taskqueue.Queue('hatebu') next_task = taskqueue.Task(url='/_hatebu', params=query) bookmark_task.add(next_task) Instprrec.task = True db.put(Instprrec) def post(self, mode=""): if mode=='_hatebu': #はてブする url = self.request.get("link") #WSSE認証 hbc = HatenaBookmarkClient(HATENA_USERNAME,HATENA_PWD) hbc.getServiceURI() # サービスエンドポイントの取得(PostURIとFeedURI) if url <> '': hbcomment = u'[あとで読む]' hbc.postBookmark(url, hbcomment) # ブックマークの登録 def main(): #URLによってリクエストハンドラを切り替える application = webapp.WSGIApplication([('/(.*)', MainHandler)], debug=True) util.run_wsgi_app(application) if __name__ == '__main__': main()