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

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

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

フレームワークなんか使わなくてもガリガリコード書いちゃえばいいんだけど、なんか損してるんじゃないかと気になるのですよ。 でもフレームワークが自動的に色々やってくれてるのはありがたいのだけれど、何をやっているのか気になってモヤモヤしてしまう、というジレンマがあったりなかったり。
という訳でまずは、Xcode で Empty Application と Single View Application (Storyboard付き)で何か違うのかを調べてみた。

単純にコードの差分を比較すると以下の違いがあることがわかる。
追加されているファイル:
ViewController.hViewController.mMainStoryboard.storyboard ViewControllerはUIViewControllerからの派生で、viewDidLoadとdidReceiveMemeoryWarningだけがオーバーライドされただけのひな形。 MainStoryboard.storyboardは、ViewControllerとFirstResponder, Exit ViewControllerにはUIVIewが1つだけ配置されている。
ここまでは、ひな形が追加されているというだけなので、特にモヤモヤはなし。

次に差分のあるファイル:
 app-info.plist AppDelegate.mapp.xocdeproj/project.pbxprojapp.xocdeproj/project.xcworkspace/xcuserdata/cozy.xcuserdatad/UserInterfaceState.xcuserstateapp.xocdeproj/xcuserdata/cozy.xcuserdatad/xcschemes/test.xcscheme app.xocdeproj/xcuserdata/cozy.xcuserdatad/xcschemes/xcschememanagement.plist とりあえず、app.xcodeproj中身については脇に置いておこう。
app-info.plistは、以下の2行が追加されている。

    <key>UIMainStoryboardFile</key>
    <string>…