せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

ようやくTwitter1.1へのマイグレーションをしました(Python準備編)


6月11日にTwitterAPIが大きく変わった件(※1)、
知ってはいたのですが忙しさにかまけて作成していたBOT(※2)を放置していました。

※1:Twitter API v1.1でのAPI利用ルールの変更について
http://blog.jp.twitter.com/2012/08/twitter-api-v11aip.html

※2:自分のBOT
http://twitter.com/iroironashi
版権の切れた短文詩の投稿と、自動フォロー返し機能を持ちます。センスのいい詩を集めているのが自慢(←)。

久しぶりに確認すると、やはり6月11日で発言がとまっている。
おいたわしや・・・。
f:id:sekaiya:20130720081545j:plain

ということで、コード改修しようとするも手元にすでにソースがない!
クラウド(GAE)上に載せればいつでもソースが取れると、大きく誤解していました。2年ほど前の自分・・・愚かです。

ということで1から作り直し。
どうせならということでこの機会に、Pythonで作成することにしました。
Python触ったこと一度もナシ!まずはインストールからだ。

Pythonインストール
現時点でPython 3.3.2が最新のようで、これをインストール…しようと思ったら2.5しかサポートされていない(※3)。
と思ったら更に「2.5は非推奨。2.7を使ってね(※4)という情報が。
こういうの、凡人にはつらいです。
結局2.7をインストール。

※3:「Python ランタイム環境では、Python バージョン 2.5.2 を使用します。」
https://developers.google.com/appengine/docs/whatisgoogleappengine?hl=ja

※4:「Support for Python 2.5 has been deprecated. 」
https://developers.google.com/appengine/docs/python/python25/diff27?hl=ja

■ファーストステップ
GAE提供のスタートガイド:Python を見ながら学習(※5)。
分かりやすい!
Rubyはある程度分かるので、なんとなく既視感が。
と思ったら、コマンドラインでのPython実行でこけました。

※5:スタート ガイド: Python
https://developers.google.com/appengine/docs/python/gettingstarted/?hl=ja

■はまったところ(dev_appserver.pyの実行エラー)
GAEスタートガイド「データストアの使用」にて、以下のアナウンスに従いdev_appserver.py を実行しデータ消去時にエラーが発生!嫌な予感!

開発用サーバーの起動前にデータストアを消去するには、サーバーの起動時に --clear_datastore オプションを使用します。

dev_appserver.py --clear_datastore helloworld/

-https://developers.google.com/appengine/docs/python/gettingstarted/usingdatastore?hl=ja

・発生エラー
その1:

C:\Users\HOGE>python
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> dev_appserver.py --clear_datastore helloworld/
  File "<stdin>", line 1
    dev_appserver.py --clear_datastore helloworld/
SyntaxError: invalid syntax

その2:

C:\Users\HOGE>python C:\google_appengine\dev_appserver.py --clear_datastore
 helloworld yes
Traceback (most recent call last):
  File "C:\google_appengine\dev_appserver.py", line 182, in <module>
  (中略)
    raise ValueError('must be "yes" or "no", not %r' % values)
ValueError: must be "yes" or "no", not 'helloworld'

その3:

C:\Users\HOGE>python C:\google_appengine\dev_appserver.py --clear_datastore
=yes helloworld
  File "C:\google_appengine\google\appengine\tools\devappserver2\application_con
figuration.py", line 271, in _parse_configuration
    with open(configuration_path) as f:
IOError: [Errno 2] No such file or directory: 'helloworld'

その4:(もうやだ・・・)

C:\Users\HOGE_ADMIN>python C:\google_appengine\dev_appserver.py --clear_datastore
=yes C:\Users\HOGE_ADMIN\Desktop\helloworld
WARNING  2013-07-20 11:33:59,767 devappserver2.py:468] Failed to remove datastor
e file 'c:\\users\\HOGE_ad~1\\appdata\\local\\temp\\appengine.helloworld\\datasto
re.db': [Error 32] プロセスはファイルにアクセスできません。別のプロセスが使用中
です。: 'c:\\users\\HOGE_ad~1\\appdata\\local\\temp\\appengine.helloworld\\datast
ore.db'
INFO     2013-07-20 11:33:59,890 dispatcher.py:164] Starting module "default" ru
nning at: http://localhost:8080
INFO     2013-07-20 11:33:59,917 admin_server.py:117] Starting admin server at:
http://localhost:8000

以下の気づきで解決

その1)Pythonコマンドラインが対話型では、スクリプトファイルは実行できない(※7)

その2)スタートガイドの引数が古い(※6)

その3)ファイルパスを指定する必要がある(※8)

その4)ポートが8080以外の場合は指定する必要がある(※9)
 加えて、GAELauncher で実行されているアプリを一旦停止する。


「dev_appserver.py --clear_datastore」が実行できました!やった!(´;ω;`)
ローカルDBに存在していたデータが消えました!

C:\Users\HOGE_ADMIN>python C:\google_appengine\dev_appserver.py  --port=8083 --cl
ear_datastore=yes C:\Users\HOGE_ADMIN\Desktop\helloworld
INFO     2013-07-20 11:53:07,825 dispatcher.py:164] Starting module "default" ru
nning at: http://localhost:8083
INFO     2013-07-20 11:53:07,831 admin_server.py:117] Starting admin server at:
http://localhost:8000
INFO     2013-07-20 11:53:40,078 module.py:595] default: "GET / HTTP/1.1" 200 27
7
INFO     2013-07-20 11:53:40,289 module.py:595] default: "GET /favicon.ico HTTP/
1.1" 404 154


とは言っても、データクリアに、実行中のアプリをとめてコマンドから実行しているあたりが本質から外れています。
アプリの中から「dev_appserver.py」を呼び出す方法は・・・まだ不明。
ここまででPython触って2時間経過!

次回に続く(←)


※6:GAE - I can't clear datastore and the datastore is corrupted I believe
http://stackoverflow.com/questions/16687597/gae-i-cant-clear-datastore-and-the-datastore-is-corrupted-i-believe

※7:python スクリプトファイルの実行
http://okwave.jp/qa/q4709964.html

※8:Google App Engine スタートガイド (2) dev_appserver.py
http://undersourcecode.blog62.fc2.com/blog-entry-80.html

※9:GAE for Python: Mac OS X で GAE の dev_appserver.py が起動ができないときの解決法
http://d.hatena.ne.jp/tatsuyaoiwa/20110606/1314445708