先日参加した、プログラマ勉強会in群馬にてfacebookアプリの話が出ましたので、早速チャレンジしてみました。
本当は、facebookからたどるのですが、ググるとわかるように、Python SDKは、GitHubのここからダウンロードできます。
https://github.com/facebook/python-sdk/
解凍すると、下記のようなファイルとフォルダが展開されます。察しが言い方は、お気づきの事とは思いますが、examplesの中に、appengineなんてのが有るんですわ。鼻っからGAEで開発だろjkって感じ。素晴らしい。なので、このサンプルをちょちょいといじればすぐにGAEでfacebookアプリできるやん!って思った次第です。が、そうは問屋が卸してくれませんでした。いろいろと御池があってハマったので、修正した箇所を書き記します。今回は、サンプルの中の一番簡単そうな「appengine」にチャレンジしました。
\FACEBOOK-PYTHON-SDK-322930C │ readme.md │ setup.py ├─examples │ ├─appengine │ │ app.yaml │ │ example.html │ │ example.py │ ├─newsfeed │ │ │ app.yaml │ │ │ facebookclient.py │ │ ├─static │ │ │ base.css │ │ │ favicon.ico │ │ │ robots.txt │ │ └─templates │ │ base.html │ │ home.html │ │ index.html │ ├─oauth │ │ app.yaml │ │ facebookoauth.py │ │ oauth.html │ └─tornado │ example.html │ example.py │ schema.sql └─src facebook.py
srcにある、facebook.pyが心臓部です。今回は、GAEでの使用なので、ローカルマシンへのインストールに加えて、GAE用のフォルダにファイルごとをコピーして使用しました。適当な場所に、appengineフォルダをコピーし、そのなかにfacebook.pyをコピーします。exampleはダサイので、それぞれ、main.pyと、index.htmlに変更しました。ファイル名は変えなくてもOKです。facebook.pyはコピーするだけでそのまま使用します。
\facebookongae │ app.yaml │ facebook.py │ index.html │ main.py
これは、必須作業です。faceboook側でアプリの登録をします。その際に発行される「アプリID(アプリケーションID)」と、「アプリの秘訣(シークレットキー)」を入力します。翻訳がヘンテコなので場所によって表記が違います(^^;)内容をみれは同じなのでわかると思います。この2つを、index.py(example.py)に、入力します。
FACEBOOK_APP_ID = "your app id" FACEBOOK_APP_SECRET = "your app secret"
htmlファイル名を変えたら、path変数も合わせて変更しておきます。
class HomeHandler(BaseHandler): def get(self): path = os.path.join(os.path.dirname(__file__), "index.html")
なぜかexampleには、getメソッドが用意されているのですが、実はfacebook側からはPOSTで呼び出されるのです。そこで、postに対する処理メソッドを用意します。ただし、まだgetメソッドが必要なのか不明なので消したりせず、以下のようにpostメソッドからgetメソッドを呼ぶ事にしました。これに気づかず、405 Method Not Allowedエラーが出てました。
class HomeHandler(BaseHandler): def get(self): path = os.path.join(os.path.dirname(__file__), "index.html") args = dict(current_user=self.current_user, facebook_app_id=FACEBOOK_APP_ID) self.response.out.write(template.render(path, args)) def post(self): self.get()
/以下に変なアクセスがあっても処理できるように、mainメソッドは念のためこうしました。
def main(): util.run_wsgi_app(webapp.WSGIApplication([(r"/", HomeHandler)]))
def main(): util.run_wsgi_app(webapp.WSGIApplication([(r"/.*", HomeHandler)]))
ここは、GAEお決まりのアレですが、app.yamlのapplicationに取得済みのGAEアプリケーション名を設定しましょう。
application: facebook-example
あとは、いつものようにデプロイすればOK。
実行結果はこんな感じになります。
とても簡単にfacebookアプリが開発できることが分かりました。GAEを使えばほぼただでGoogleのインフラ使えますからね。先日オライリーからがプログラミング Google App Engine発売になったので合わせていかがでしょうか?javaとPython両対応ですよ。
- 作者: Dan Sanderson,玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/01/24
- メディア: 大型本
- 購入: 5人 クリック: 414回
- この商品を含むブログ (27件) を見る