Google App Engine for PythonでTwitterのbotを作った。

GAE for Pythonをサーバーにして、
HTMLを解析して、自動でTwitterに投稿するbotを作った。
GAE for Pythonについては、以下のURLでお勉強します。
スタート ガイド: Python - Google App Engine
https://developers.google.com/appengine/docs/python/gettingstarted/?hl=ja

ファイル構成は以下のようにします。
一つのフォルダに
app.yaml
BeuatifulSoup.py
cron.yaml
htmlParserPtags.py
main.py
oauth.py
それぞれのファイルを入れます。

1.まず、以下のURLの記事を見ます。
無題メモランダム: TwitterボットをOAuthに対応させてみた - Google App Engine(Python)
http://blog.mudaimemo.com/2010/03/google-app-engine-twitteroauth.html

この記事を参照して、
app.yaml
cron.yaml
main.py
を作成します。
また、この記事を参照して、oauth.pyをダウンロードします。

追記(2013/3/16):main.pyについて
client.make_request('URL',
token=TWITTER_ACCESS_TOKEN,
secret=TWITTER_ACCESS_TOKEN_SECRET,
additional_params=param,
protected=True,
method='POST')

URLの部分は、2013/3/16現在、
https://api.twitter.com/1.1/statuses/update.json
となっております。
今は、Twitter API ver1.1ですが、
今後アップデートされる可能性もあるので、
そのときはTwitter Developersホームページでご確認ください。


また、Twitteroauth認証に必要な
アプリのconsumer key
アプリのconsumer secret
ボットのアカウントのアクセス・トーク
ボットのアカウントのアクセス・トークン・シークレット
を取得していなければ、
Twitter Developers https://dev.twitter.com/apps
このURLから取得します。


2.次に、BeutifulSoup.pyを以下のサイトからダウンロードします。
http://www.crummy.com/software/BeautifulSoup/bs3/download//3.x/BeautifulSoup-3.0.8/

3.次に、htmlParserPtags.pyを作成します。
コードは以下の通りです。

htmlParserPtags.py

#!/usr/bin/env python
# !-*- coding: utf-8 -*-

from BeautifulSoup import BeautifulSoup,NavigableString
import urllib2,sys
from google.appengine.api import urlfetch

def htmlParserGameFeed():

url = 'http://hiroba.dqx.jp/sc/forum/maintop/'
atag = ""

result = urlfetch.fetch(url)
html = result.content
if result.status_code == 200:
html = urllib2.urlopen(url).read()
html = html.lstrip(None)
html = html.strip()
html = html.replace('\r\n','')
html = html.replace('\n','')
html = html.replace('\r','')
html = html.replace('\t','')

soup = BeautifulSoup(html)
txt_thread_tags = soup.findAll(attrs={"class" : "txt_thread"})
txt_comment_tags = soup.findAll(attrs= {"class":"txt_comment"})

TagString = []

def printText(tags):
for tag in tags:
if tag.__class__ == NavigableString:
TagString.append(tag)
else:
printText(tag)

printText(txt_thread_tags[0])
q = ''.join(TagString)

TagString = []
printText(txt_comment_tags[0])
s = ''.join(TagString)

atag = txt_thread_tags[0].find("a").get("href")
atag = "http://hiroba.dqx.jp%s" % atag
atag = u"【%s】%s %s" % (q,s,atag)

return atag.encode('utf-8')

このコードはBeautifulSoupのドキュメントを参照して書きました。
BeautifulSoupのホーム
http://www.crummy.com/software/BeautifulSoup/
BeautifulSoupの日本語版ドキュメント
http://tdoc.info/beautifulsoup/#you-can-pass-in-a-callable


4.次に、main.pyを追加、変更しましょう。
http://blog.mudaimemo.com/2010/03/google-app-engine-twitteroauth.html
この記事に載っているmain.pyの4行目あたりに、

import htmlParserPtags
stringParser = htmlParserPtags.htmlParserGameFeed()

を追加します。

また、main.py中に出てくる、
ツイート投稿のためのパラメータは以下のようにします。
param = {'status': stringParser}

これで、main.pyは完成です。

5.最後に、Google App Engineにデプロイします。
デプロイ方法は、
アプリケーションのアップロード
https://developers.google.com/appengine/docs/python/gettingstarted/uploading?hl=ja
ここを参照ください。

Google App Engineのデータストアも使って、
ツイートする内容を管理することもできます。
詳しくは、以下の記事が参考になります。

データストアの使用
https://developers.google.com/appengine/docs/python/gettingstarted/usingdatastore?hl=ja
GAE/PythonTwitter bot を作る(準備編) - SPEAKER BREAKA
http://d.hatena.ne.jp/namaco35/20090810/1249904668

Enjoy