Cookpad タグの一覧です(1 件)

クックパッドの話題のレシピをtwitterにPOSTするBOTを作った

うちの家庭でなくてはならないクックパッドのレシピですが、ふと思い立ってクックパッドの話題のレシピをtwitterにPOSTするcookpad_recipeというBOTを作りました。よければfollowしてやって下さい。本家からクレーム入ったり、小遣いを減らされてサーバ代が払えなくならない限り続けます。
作成の経緯は、pythonの勉強をしている際にどんぴしゃな情報があったので発作的に作って、レンタルサーバにアップしちゃったというのが本当のところです。

BOTの説明

  • クックパッドのメインページにある”話題のレシピ”からレシピタイトルとURLを取得します。
  • レシピごとにtwitterにPOSTします。
  • POSTは一日一回で、今のところ17時に実施します(夕飯の献立を考える頃合いを狙ってます?)

pythonの環境

  • レンタルサーバのユーザ領域にvirtual-pythonをインストール
  • python-twitterが必要(依存関係でsimplejsonも)
  • HTML解析にBeautifulSoupが必要

モジュールはeasy_installがあればすんなり入ります。で、作ったBOTのコードがこちら

import urllib2

from twitter import Api as TwitterApi
from BeautifulSoup import BeautifulSoup

TWITTER_USERNAME = 'twitterのscreen_name'
TWITTER_PASSWORD = 'password'

COOKPAD_URL = 'http://cookpad.com/'
soup = BeautifulSoup(urllib2.urlopen(COOKPAD_URL))

def fetch_data():
        for node in soup.findAll('div', {'id': 'wadai-recipe-inner'}):
                for tag in node('a', {'class': 'recipe-title'}):
                        yield tag['title'], tag['href']

def main():
        api = TwitterApi(TWITTER_USERNAME, TWITTER_PASSWORD)
        for recipe_title, recipe_url in fetch_data():
                post = u"%s %s" % (recipe_title, recipe_url)
                api.PostUpdate(post)

if __name__ == '__main__':
        main()

コードはこちらの方とそっくりになってしまいましたが、オリジナルコードがすばらしいということで(汗。
それにしてもBeautifulSoupはとっても面白くて、適当なサイトを見つけてはスクレイピングの練習をしています。インタラクティブシェルで結果が即反映するので楽しいですよ。

尚、virtual-pythonなどpython環境については後日もう少し書きたいと思います。

[2008年12月23日追記]
クックパッドのトップページに若干の修正あったようで、それに合うようにコードを若干修正しました。

import urllib2

from twitter import Api as TwitterApi
from BeautifulSoup import BeautifulSoup

TWITTER_USERNAME = 'twitterのscreen_name'
TWITTER_PASSWORD = 'password'

COOKPAD_URL = 'http://cookpad.com'
soup = BeautifulSoup(urllib2.urlopen(COOKPAD_URL))

def fetch_data():
        for node in soup.findAll('div', {'id': 'wadai-recipe-inner'}):
                for tag in node('a', {'class': 'recipe-title'}):
                        yield tag['title'], tag['href']

def main():
        api = TwitterApi(TWITTER_USERNAME, TWITTER_PASSWORD)
        for recipe_title, recipe_url in fetch_data():
                post = u"%s %s%s" % (recipe_title, COOKPAD_URL, recipe_url)
                api.PostUpdate(post)

if __name__ == '__main__':
        main()

[追記ここまで]
[2009年3月22日追記]
レシピの配信方法を、17時に一括から都度配信にしました。そこらへんについては後述します(つもり)
[追記ここまで]


PAGE TOP