Python Hack-a-thon #3

Facebook application on
      appengine
               aodag
       http://blog.aodag.jp/
          twitter: @aodag
 http://www.facebook.com/aodag
Facebookアプリを作ってみよう

 Facebook
 Facebookアプリ
Facebook
Facebook

いわゆるSNS
世界最大
Flickrよりも写真が多いとか
twitterのようなアクティビティストリーム
リンクや写真などを共有
グループ
などなど
Facebookアプリ

Facebook上で動くアプリケーション
ユーザーの情報を取得できる
ユーザーの友達の情報を取得できる
アプリ上での行動をアクティビティに投稿できる
などなど
 
Facebookアプリ

FBML
アプリが作成したFBMLをFacebookがHTMLに変換する。
サーバーサイドで各種クライアントライブラリを使ってFacebookの機
能にアクセスする。
IFRAME
アプリが作成したHTMLをIFRAME内で表示する。
XFBMLで、FBMLの機能を一部利用できる。
Javascript SDKでFacebookの機能を使える。
サーバーサイドからのアクセスも可能。
FBML
IFrame
Google App Engineで
Facebookアプリを作るには
準備
Facebook開発者アプリで、appkeyとsecretを取得する。
http://www.facebook.com/developers
 
xd_receiver.htm をダウンロードする。
http://www.somethingtoputhere.com/xd_receiver.htm
app.yaml

...
handlers:

- url: /
  static_files: static/index.html
  upload: static/index.html

- url: /xd_receiver.htm
  static_files: static/xd_receiver.htm
  upload: static/xd_receiver.htm

- url: .*
  script: main.py
index.html
<!-- javascript libraryをインポート -->
    <script type="text/javascript" src="http://static.ak.
connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"
></script>
 <!-- jqueryとかもインポート -->
略
<!-- 初期化 -->
    <script >
      apikey = "d831ba0c7dd7b830572fb5f928f94bc4";
      FB.init(apikey, "xd_receiver.htm");
      FB.ensureInit(function() {
$(function() {
// ここで初期化
});
});
    </script>
main.py wsgiミドルウェア

  application = webapp.WSGIApplication([('/fbprofile',
ProfileHandler)],
                                       debug=True)
  import facebook.wsgi as facebook
  import settings
  application = facebook.FacebookWSGIMiddleware
(application,
                                                settings.fbconfig)
  util.run_wsgi_app(application)
さらにmain.py リクエストハンドラ

class FacebookHandler(webapp.RequestHandler):
    def init(self, request, response):
         """
         Facebook用スーパークラス
         """
         super(FacebookHandler, self).init(request, response)
         self.facebook = request.environ['pyfacebook.facebook']
         if self.facebook.check_session(self.request):
             self.request.remote_user = self.facebook.uid
FBML

ログインユーザー名を表示する例
 <fb:name uid="loggedinuser" />

ユーザー12345のプロフィール写真を
表示する例
 
<fb:profile-pic uid="12345" linked="
true" />
FBMLをJavascriptライブラリで変換する

FB.XFBML.Host.parseDomTree();
FQL

(´-`).。oO(また新しいQuery Languageか)

 
FQLの例


SELECT name 
FROM album 
WHERE  owner IN (
    SELECT uid2 
    FROM friend 
    WHERE uid1 = 530888600)

aodag(530888600)の友達のアルバム名を全て取得する
FQLをJavascriptクライアントから呼ぶ

FB.Facebook.apiClient.fql_query(query, 
    function(result) {
        //なんか 処理する
    });

Python Hack A Thon 3 Facebook Application On A