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

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')

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

コメント

このブログの人気の投稿

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)

これで、スッキリしました。

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 になる.

Android x86 をビルドする(カーネル編)

カーネルのビルドですが、特筆すべきことはありませんね。
ITProの記事、そのままです。


$ cd kernel
$ make i386_defconfig ※x86系のデフォルトに設定
$ make menuconfig ※設定編集メニューを起動

以下は必要最小限と思われるものだけです。
ネットワーク関連は省略。
Framebuffer Console は必要に応じてEnable/Disableしてください。

General setup --->
[*] Enable the Anonymous Shared Memory Subsystem
Power Management Option --->
[*] Wake lock
Device Drivers --->
[*] Misc Devices --->
[ ] Android pmem allocator ※drivers/misc/pmem.cでコンパイルエラーが出るのでチェックを外す
Graphics support --->
Support for frame buffer device --->
[*] VESA VGA graphics support
Console display driver support --->
<*> Framebuffer Console support ※デバッグ用に起動時のログを表示させる.
<*> Real Time Clock --->
[ ] Android alarm driver ※drivers/rtc/alarm.cでコンパイルエラーが出るのでチェックを外す


さて、カーネルのビルドも通り、USBフラッシュメモリに焼いて起動させてみましたが・・・
案の定、途中でフリーズします。

まず最初に怒られるのは、mountdが無いこと。
これは init.rc で mountd を使っているところを vold に置き換えることで解決.

次に、dalvikvm の起動でリセットが掛かり、延々と ZygoteInit が起動と停止を繰り替えす症状が発生。
これは、x8…