世界的日曜WEBプログラマー日記 -21ページ目

世界的日曜WEBプログラマー日記

一年後に世界的なWEBサービスを運営するにはどうすればいいのか書いていく(予定)


宅配のマイ食

マイ食を運営しています。宜しければフィードバック下さい。
お弁当宅配サイト マイ食

FacebookアプリケーションをPythonを使って作ってみる。(2012, 3月)


基本的なことだけど、Facebookのアプリケーションは、実はWebサイト。WebサイトをFacebook上で見せることでFacebookアプリが誕生する。

さて、今回はPythonを用いてFacebookアプリを作る。方法は色々あるがGAEをサーバとして使って、Facebook SDK for pythonを用いてアプリを作成する。

アプリを作るには以下の3つのサイトだけ押さえておけば良い。

  • http://developers.facebook.com/ : アプリ登録
  • http://code.google.com/intl/ja/appengine/ : Google App Engine
  • https://github.com/facebook/python-sdk : Python SDK

Facebookアプリ on GAEの簡単な流れ

Facebookにアプリ申請(AppID, App Secretの取得と、そのアプリのあるURLの設定)
Google App Engine( GAE )の環境構築(Googleへ申請。)
FacebookSDK for python(Python SDK)の入手とサンプルをGAEにアップロード(サンプルコードの実行)

これだけ。だけど意外と概念を掴むのに時間がかかる。まぁじっくりやっていこう。

1.Facebookへアプリ登録
Facebookにアプリを申請するにはまず上記のアプリ登録を行う。アプリを登録するにはクレジットカードの番号を入力する必要がある。(別に決済が行われるわけではないので安心を)

アプリ申請がおわると、アプリ名の入力と共にAppID, App Secretを取得することができる。この二つはのちのちのPythonSDKを叩く上でとても重要になる。また、アプリのURLを設定しなければならない。URLはGoogle App Engineで得られるURLで、今はまだ解らないのでlocalhost:8080と書いておく。
ここにあるアドレス以外からアクセスされるとFacebookは拒否をする仕組みとなっている。つまり、AppEngineで登録したURLをここに最終的にはかかないといけない。


2. Google App Engine
Google App Engineの登録には携帯電話を持っている必要がある。ない人はすぐにDocomoショップに行こう。でも、ちょっと待った。
実は会ってもGoogleのエラーのせいで登録ができない。(少なくても僕は出来なかった)現在方法は一択で、Googleのヘルプセンターへメールを書くこと。アプリ申請ページにメールを撹乱があるのでそれを書いて2営業日ほど経つとOKの通知が来てアクティブになった。
以下は手順とそれぞれのURLアドレス。
I. アプリ申請 -> https://appengine.google.com/ CreateApplicationを押していく。
II. Google SMS GAEサービス ヘルプセンター -> https://appengine.google.com/waitlist/sms_issues
アプリの申請が終わったら、GoogleのSDKをインストールする
III. Google GAE SDK tools のダウンロード==> http://code.google.com/intl/ja/appengine/downloads.html
IV. アプリの登録。ここで登録されるアプリ名はユニークな名前となる。yasuhirotodorokiとした。URLは次のようになるだろう。--> http://yasuhirotodoroki.appspot.com/
appspotは勝手に付けられる。お金を払うと好きなような名前で使うことができる。

以上。さてGAEのSDKツールはどういうツールかというと、GoogleGAEサーバにアプリのUploadやローカルの環境でサーバーにアップする前にテストするなどが可能なツールセットとなっている。

3.FacebookSDK for pythonの入手。
以上が出来ればあとはやるだけ。まずはFacebookSDK for pythonをクリックしよう。
https://github.com/facebook/python-sdk/downloads
tarボールかzipか、どちらかをダウンロードしよう。さぁ準備は整った。いよいよサイト構築の方法を説明。

GAEを使ったFacebookアプリの作成(SDK with Pythonの利用)

以下に具体的な方法
I. 下準備( facebook-sdkの編集 )
$ tar zxvf facebook*.tgz # 上記ステップ3でダウンロードのファイル解凍( zipのときはunzip)
$ ls facebook-python-sdk-cb8dbd3/examples # 確認 cb8bdb3の部分は変わるかも
appengine/ newsfeed/ oauth/ tornado/
$ cp facebook-python-sdk-cb8dbd3/examples/oauth ./mytestapp -rf # コピー。テストアプリの作成
$ emacs mytestapp/app.yaml # アプリケーションの情報の登録(emacsじゃなくても適当なエディタで)
application: WRITE_ANY_APPLICATION_NAME_HERE
...
#上記の部分をGoogleAppEngineで登録したアプリケーションの名前を書く.作業2のところのyasuhirotodorokiがそれにあたる。
$ emacs mytestapp/facebookoauth.py # 次の行を見つけて編集
FACEBOOK_APP_ID = "243712345716954"
FACEBOOK_APP_SECRET = "ffcf7823feee1f9d408d0123b0fc4a61"
# 上記は人に依って異なる。作業1で取得したAPP_IDとSECRETを入れること。
$ emacs mytestapp/oauth.html
# bodyタグのところに適当に何か書いてみる。


以上でOK。
II. GAEの実行&サーバーへUpload
$ unzip google_appengine_1.6.3.zip # 1.6.3の部分は人に依って異なる
$ python google_appengine_1.6.3/dev_appserver.py mytestapp/ # ローカルテストサーバーの起動
localhost:8080でアクセスできることを確認する。アクセスできない場合は1.Facebookへアプリ登録でアドレスをきちんとlocalhost:8080に設定していたか確認。

$ python google_appengine_1.6.3/appcfg.py update mytestapp/ # サーバーへテストコードのUP

facebookのページに行きURLを変更する。(localhost:8080 --> http://yasuhirotodoroki.appspot.com ). yasuhirotodorokiの部分は自分で決定した名前となる。

以上


株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house
キャッシュの構築の際にエラー:
[|] Repository type can't be determined.
警告: 上記のエラーによりリポジトリ '1.2-non-oss' は無効になっています。

みたいなときは、

sudo vi /etc/zypp/repos.d/1.2-oss.repo
sudo vi /etc/zypp/repos.d/1.2-non-oss.repo

を編集し、Baseurlを変更する。例えば以下のようになる。
古:
baseurl=http://download.meego.com/snapshots/1.2.0.90.12.20110809.2/repos/oss/ia32/packages
新:
baseurl=http://download.meego.com/snapshots/20120202.1/repos/oss/ia32/packages

変更箇所は数字の羅列の部分で、http://download.meego.com/snapshots/にアクセスして最新の日付に変更する。


株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house

動的に変数へアクセス

djangoで、Hogeというモデルを定義してある場合
child_hoge = Hoge()
としてインスタンスを作成できる。この時プライマリーキーにアクセスする場合は
child_hoge.pk
とする。他の変数名(テーブルでいうところのカラム名)にアクセスする場合も同様である。

for文などで分回して色々なカラム名にアクセスしたいが中々できない問題にぶち当たった。
なぜならHogeはfoo, bar, bazなどのカラム名を持っていた場合
 child_hoge.foo
child_hoge.bar
child_hoge.baz

としかアクセスできないため。動的にアクセスできためだ。

この問題を解決するにはsetattrを使う
val = 100
for col_name in [ 'foo', 'bar', 'baz' ]:
setattr( child_hoge, col_name, val )

これで、カラム名には値をすることができる。


株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house