はてなブックマークで人気のcookpadレシピをTumblr投稿する
ときどきはてなブックマークの人気エントリーにcookpadのレシピが入ってきます。
見ると食べてみたくなるんで、嫁さんに見せて作ってもらったりするんですが、いちいちリンクを送ったりするのが面倒になってきました。
嫁さんがはてなブックマークをチェックしてくれればいいんですが、はてブは見ませんし、RSSリーダーも使ってません。
なのでTumblrに人気になってるレシピを投稿して、そのサイトをときどきチェックしてもらうことにしました。
こちらのサイトに投稿してます。
投稿させる処理はpythonで書いて、google app engine上で6時間ごとにcronで動かしてます。
# -*- coding: utf-8 -*- import re import logging import urllib2 from datetime import datetime import feedparser from BeautifulSoup import BeautifulSoup from kay.utils.decorators import cron_only from werkzeug import Response from google.appengine.ext.deferred import deferred from google.appengine.api import memcache from config import OAUTH_CONSUMER_KEY, SECRET_KEY, \ OAUTH_TOKEN, OAUTH_TOKEN_SECRET, \ RSS_URL, LAST_PUBLISHED_DATETIME_MEMCACHE_KEY, \ COOKPAD_PATTERN, HATENA_BOOKMARK_LINK, BLOG_URL @cron_only def index(request): deferred.defer(task) return Response(None) def task(): atom = feedparser.parse(RSS_URL) last_published_string = memcache.get(LAST_PUBLISHED_DATETIME_MEMCACHE_KEY) pattern = re.compile(COOKPAD_PATTERN) entries = [] for e in atom.entries: title = e.title.encode('utf-8') link = e.link.encode('utf-8') date_string = e.date date = parse_date_string(date_string) matcher = pattern.match(e.link) if not matcher: continue if last_published_string: last_published = parse_date_string(last_published_string) if date <= last_published: continue id = matcher.groups(0) image_source = get_image_source_from_cookpad(id) entries.append({'title': title, 'source': image_source, 'link': link, 'date': date_string}) logging.debug(title) logging.debug(link) logging.debug(image_source) logging.debug(date) if entries: entries.reverse() memcache.set(LAST_PUBLISHED_DATETIME_MEMCACHE_KEY, entries[-1:][0]["date"]) for e in entries: post_tumblr(create_caption(e['title'], e['link']), e['source'], e['link']) def create_caption(title, link): caption = u'<a href="%s">%s</a>'.encode('utf-8') % (link, title) caption = caption + HATENA_BOOKMARK_LINK % (link, link, title) return caption def get_image_source_from_cookpad(id): res = urllib2.urlopen('http://cookpad.com/recipe/%s' % id) soup = BeautifulSoup(res) img = soup.find('div', attrs={'id': 'main-photo'}).find('img') return img["src"] def post_tumblr(title, source, url): from tumblpy import Tumblpy t = Tumblpy(app_key=OAUTH_CONSUMER_KEY, app_secret=SECRET_KEY, oauth_token=OAUTH_TOKEN, oauth_token_secret=OAUTH_TOKEN_SECRET) t.post('post', blog_url=BLOG_URL, params={'type': 'photo', 'caption': title, 'source': source, 'link': url}) def parse_date_string(s): return datetime.strptime(s, "%Y-%m-%dT%H:%M:%S+09:00")