Facebookアプリは外部でホスティングしないといけない。
だが、僕らにはGoogle App Engineがあるじゃないか!
ということで、Google App Engine上でFacebookアプリを作るための準備。
携帯のメアドが必要です。
今のところ1アカウントで10個までアプリケーションを登録できる。
これから作るアプリを登録しよう。
ちなみにこの記事内では、アプリの名前はwrkngということにします。
Python
Pythonをまだインストールしていなければ、Python Language Websiteから、2.5の最新版をダウンロードして、インストールしよう。
SDK
SDKには、ローカルで動作する開発サーバーや、デプロイツールが含まれている。
Google Codeからダウンロードして、インストールだ。
最初のアプリ
Windowsの場合は、デフォルトのままインストールすれば、C:\Program Files\Google\google_appengine\new_project_templateにアプリケーションのテンプレートがある。
適当なところにコピーしよう。
コピーしたら、app.yamlを修正する。
修正するのはアプリケーション名のところだ。
一行目の
を
というように修正する。(アプリケーション名は自分が登録したものに読み替えてほしい)
Macの場合は、ランチャーアプリ内から新しいアプリケーションを作成できる。
ローカルで動作確認
アプリケーションを展開したディレクトリで、dev_appserver.py . を実行する。
http://localhost:8080 にアクセスすれば、Hello, worldと表示されるはずだ。
アップロード
アプリケーションのディレクトリで、appcfg.py update . を実行する。
appengineを登録したアカウントで、アプリケーションがアップロードされる。
アップロードが終わったら、実際にアクセスして実行されているのを確認できる。
アプリケーションのURLは、http://wrkng.appspot.com のようになる。
開発者アプリケーション内で、新規のアプリケーションを登録する。
コールバックURLに、さきほど作成したgoogle app engineのURL(http://wrkng.appspot.com/)を登録する。
キャンバスページにアクセスすると、405エラーとなるはず。
これは、Facebookからのアクセスが常にPOSTでくるためだ。
アプリケーションのmain.pyを修正する。
MainHandlerクラスのgetメソッドをpostメソッドに変更しよう。
修正したら、またアップロードする。
キャンバスページでも、Hello, worldが表示されるのを確認しよう。
ラッパライブラリのPyFacebookを使えば、APIを手軽に利用できる。
リリースされているコードはないので、SVNのリポジトリから取得してこよう。
http://pyfacebook.googlecode.com/svn/trunk/
facebookディレクトリを、アプリケーションのディレクトリにコピーする。
以下のコードは、アクセスしたFacebookユーザーのフレンドをリスト表示する例だ。
apikeyや、secretは開発者アプリケーションで確認できる。
だが、僕らにはGoogle App Engineがあるじゃないか!
ということで、Google App Engine上でFacebookアプリを作るための準備。
Google App Engineの準備
Google App Engineのページに行って、ユーザー登録する。携帯のメアドが必要です。
今のところ1アカウントで10個までアプリケーションを登録できる。
これから作るアプリを登録しよう。
ちなみにこの記事内では、アプリの名前はwrkngということにします。
Python
Pythonをまだインストールしていなければ、Python Language Websiteから、2.5の最新版をダウンロードして、インストールしよう。
SDK
SDKには、ローカルで動作する開発サーバーや、デプロイツールが含まれている。
Google Codeからダウンロードして、インストールだ。
最初のアプリ
Windowsの場合は、デフォルトのままインストールすれば、C:\Program Files\Google\google_appengine\new_project_templateにアプリケーションのテンプレートがある。
適当なところにコピーしよう。
コピーしたら、app.yamlを修正する。
修正するのはアプリケーション名のところだ。
一行目の
application: new-project-template
を
application: wrkng
というように修正する。(アプリケーション名は自分が登録したものに読み替えてほしい)
Macの場合は、ランチャーアプリ内から新しいアプリケーションを作成できる。
ローカルで動作確認
アプリケーションを展開したディレクトリで、dev_appserver.py . を実行する。
http://localhost:8080 にアクセスすれば、Hello, worldと表示されるはずだ。
アップロード
アプリケーションのディレクトリで、appcfg.py update . を実行する。
appengineを登録したアカウントで、アプリケーションがアップロードされる。
アップロードが終わったら、実際にアクセスして実行されているのを確認できる。
アプリケーションのURLは、http://wrkng.appspot.com のようになる。
Facebookの準備
Facebookにログインして、開発者アプリケーションを追加する。開発者アプリケーション内で、新規のアプリケーションを登録する。
コールバックURLに、さきほど作成したgoogle app engineのURL(http://wrkng.appspot.com/)を登録する。
キャンバスページにアクセスすると、405エラーとなるはず。
これは、Facebookからのアクセスが常にPOSTでくるためだ。
アプリケーションのmain.pyを修正する。
MainHandlerクラスのgetメソッドをpostメソッドに変更しよう。
修正したら、またアップロードする。
キャンバスページでも、Hello, worldが表示されるのを確認しよう。
FBMLのAPIを使う
Facebook APIから様々な情報を取得できる。ラッパライブラリのPyFacebookを使えば、APIを手軽に利用できる。
リリースされているコードはないので、SVNのリポジトリから取得してこよう。
http://pyfacebook.googlecode.com/svn/trunk/
facebookディレクトリを、アプリケーションのディレクトリにコピーする。
以下のコードは、アクセスしたFacebookユーザーのフレンドをリスト表示する例だ。
apikeyや、secretは開発者アプリケーションで確認できる。
<code>
import wsgiref.handlers
import facebook.wsgi as facebook
from google.appengine.ext import webapp
class MainHandler(webapp.RequestHandler):
def post(self):
fb = self.request.environ['pyfacebook.facebook']
if fb.check_session(self.request):
uid = fb.uid
self.response.out.write('<fb:name uid="%s" useYou="false" />\'s friends:'
% uid)
friends = fb.friends.get()
self.response.out.write('<ul>')
for friend in friends:
self.response.out.write('<li><fb:name uid="%s" /></li>'
% friend)
self.response.out.write('</ul>')
else:
url = fb.get_add_url()
self.redirect(url)
def main():
application = webapp.WSGIApplication([('/', MainHandler),
('/send', SendHandler)],
debug=True)
config = {"pyfacebook.apikey":"********************************",
"pyfacebook.secret":"********************************"}
application = facebook.FacebookWSGIMiddleware(application,
config)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
main()
</code>
|