スキップしてメイン コンテンツに移動

Twitter Bot を作ってみる <その1>

Webアプリの素人である私が Google App Engine で twitter bot を作ろうとしている過程の記録です.

1. Google App Engine SDKのインストール.
2. Twitter API のお勉強.
この記事がとても参考になりました.
3. python-twitterのダウンロード.
4. simplejsonのダウンロード. (python-twitterが依存している)
5. 試しに、ハマコーさんのタイムラインを取得してみます.

import twitter
api = twitter.Api()
statuses = api.GetUserTimeline('555hamako')
for s in statuses:
print s.text

しかし、エラー!

File "~/twitter-bot/twitter-bot.py", line 6, in
api = twitter.Api()
File "~/twitter-bot/twitter.py", line 1332, in __init__
self.SetCache(cache)
File "~/twitter-bot/twitter.py", line 2024, in SetCache
self._cache = _FileCache()
File "~/twitter-bot/twitter.py", line 2265, in __init__
self._InitializeRootDirectory(root_directory)
File "~/twitter-bot/twitter.py", line 2325, in _InitializeRootDirectory
root_directory = self._GetTmpCachePath()
File "~/twitter-bot/twitter.py", line 2319, in _GetTmpCachePath
username = self._GetUsername()
File "~/twitter-bot/twitter.py", line 2313, in _GetUsername
os.getlogin() or \
AttributeError: 'module' object has no attribute 'getlogin'

python-twitterのIssue 59にパッチがあったのでこれでエラーを回避.
ところが、またもエラー!

File "/usr/lib/python2.6/multiprocessing/__init__.py", line 83, in
import _multiprocessing
ImportError: No module named _multiprocessing

こんどは、googleappengineの Issue 1504 でPython 2.5を使えとのこと.
Python2.5に入れ替えてみると、また違うエラーが!

File "~/twitter-bot/twitter-bot.py", line 11, in
print s.text
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-34: ordinal not in range(128)

これは、実行中のPythonがunicode型の文字列をASCIIコードで出力しようとして起きているもののようです. なので print 文を下記のように変更.

for s in statuses:
print s.text.encode('utf-8')

これで、ようやくハマコーさんつぶやきが表示されました!
今日はこれまで.

コメント

このブログの人気の投稿

iPhoneアプリを作る上でのモヤモヤを解消したい

フレームワークなんか使わなくてもガリガリコード書いちゃえばいいんだけど、なんか損してるんじゃないかと気になるのですよ。 でもフレームワークが自動的に色々やってくれてるのはありがたいのだけれど、何をやっているのか気になってモヤモヤしてしまう、というジレンマがあったりなかったり。 という訳でまずは、Xcode で Empty Application と Single View Application (Storyboard付き)で何か違うのかを調べてみた。 単純にコードの差分を比較すると以下の違いがあることがわかる。 追加されているファイル: ViewController.h ViewController.m MainStoryboard.storyboard ViewControllerはUIViewControllerからの派生で、viewDidLoadとdidReceiveMemeoryWarningだけがオーバーライドされただけのひな形。 MainStoryboard.storyboardは、ViewControllerとFirstResponder, Exit ViewControllerにはUIVIewが1つだけ配置されている。 ここまでは、ひな形が追加されているというだけなので、特にモヤモヤはなし。 次に差分のあるファイル:  app-info.plist  AppDelegate.m app.xocdeproj/project.pbxproj app.xocdeproj/project.xcworkspace/xcuserdata/cozy.xcuserdatad/UserInterfaceState.xcuserstate app.xocdeproj/xcuserdata/cozy.xcuserdatad/xcschemes/test.xcscheme  app.xocdeproj/xcuserdata/cozy.xcuserdatad/xcschemes/xcschememanagement.plist とりあえず、app.xcodeproj中身については脇に置いておこう。 app-info.plistは、以下の2行が追加されている。     <key>UIMainStoryboardFi

repo init の使い方覚書

Androidのソースコード管理ツール repo についての覚書. 使用例 repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake -u URL "URL"にはマニフェストファイルのリポジトリのURLを指定する. 通常は git://android.git.kernel.org/platform/manifest.git を指定する. -b REVISION マニフェストファイルのブランチまたはリビジョンを指定する. どんなブランチやリビジョンがあるかは、 http://android.git.kernel.org/platform/manifest.git を参照. 省略すると"master"になる. 一度作成したrepoクライアントのマニフェストファイルのブランチは repo init -b で変更できる. ただし、変わるのはマニフェストファイルのブランチのみ. ソースコードに反映させるには, repo sync が必要. -m NAME.xml 初期化時にrepoクライアントに作成されるマニフェストファイルのファイル名. 省略すると default.xml になる.

Ubuntu で emacs の Ctrl + Space で Mark set できない問題

Ubuntu 9.04 のデフォルト環境で emacs を使っているとき、 Ctrl + Space でマークをセットしようとすると SCIM(IME) が 立ち上がってマークができません。 Ctrl + @でもマークを設定できるバインディングになっているみたいですが 長年、Ctrl + Space を使ってきたので、SCIMを起動させなくする方法を調べました。 1.[System] -> [Preferences] -> [SCIM Input Method Setup]を起動。 2.左のリストから、[FrontEnd : Global Setup] を選択。 3.[Hotkeys] の [Trigger] の [...] ボタンを押して、Select the trigger keys を起動。 4."Control + space" を選択して、[Delete] ボタンを押す。 5."Control + space" が消えたら、[OK] 6.更に SCIM Input Method Setup も [OK] で閉じる。(ダイアログが出ても[OK]でOK) これで、スッキリしました。