目的
Pythonを用いてfacebookを操作してみる
デモページ
https://needtec.sakura.ne.jp/check_facebook/
Github
https://github.com/mima3/check_facebook
使用ライブラリ
facebook-sdk
facebook-sdkはPythonでFacebook Graph APIを操作するAPI。
https://github.com/pythonforfacebook/facebook-sdk
easy_install facebook-sdk
bottle
PythonのWebフレームワーク。1ファイルのみで構成されているのでインストールが楽。
http://bottlepy.org/docs/dev/index.html
beaker
Pythonでセッション管理を行うためのライブラリ
https://beaker.readthedocs.org/en/latest/#
easy_install Beaker
Facebookの操作の方法
アプリケーションの登録方法
1.facebookの開発者登録を行う。
開発者登録の手順
http://fb.dev-plus.jp/what-devplus/dev_register/
2.開発者ページの[Apps]->[Add a New App]を実行する。
https://developers.facebook.com/
3.アプリケーションの種類で[ウェブサイト]を選択する
4.アプリケーション名を入力して、[Create New Facebook APP ID]を選択する
5.カテゴリーを選択して[Create APP ID]を入力する。
6.作成されたページを下にスクロールすると「サイトURL」を入力できるので、そこを入力して「次へ」を押下する
FacebookAPIで指定するredirect_urlは、このサイとで指定したドメイン名でなければならない。IPアドレスの指定はできないようなので、ローカルで動かす場合はlocalhostとしておく。
7.ページをリロードするとメニューから作成したアプリケーションを選択できるようになる。
8.アプリを選択すると、「App ID」と「App Secret」を表示できる。この値を使って認証を行いアクセストークンを取得できる。
アクセストークン取得する
以下にアクセストークン取得する方法を示す。
1.oauthに接続してcodeを取得する
エンドポイント:
https://www.facebook.com/dialog/oauth
パラメータ:
client_id: facebookアプリのAppID
redirect_url: 認証後のリダイレクトURL。設定したドメインでないとエラーになる。
scope:「,」区切りで権限を指定する。
https://developers.facebook.com/docs/facebook-login/permissions/v2.2?locale=ja_JP
OKした場合のリダイレクトURL
https://localhost/check_facebook/index.cgi/?code=XXXXX#_=_
キャンセルした場合のリダイレクトURL
https://localhost/check_facebook/?error=access_denied&error_code=200&error_description=Permissions+error&error_reason=user_denied#_=_
2.access_tokenに接続してaccess_tokenを取得する
エンドポイント:
https://graph.facebook.com/oauth/access_token
パラメータ:
client_id: facebookアプリのAppID
client_secret: facebookアプリのSecret
redirect_url: 認証後のリダイレクトURL。設定したドメインでないとエラーになる。
code: oauthで取得したCode
エラーの場合:
{
"error": {
"message": "Error validating application. Invalid application ID.",
"type": "OAuthException",
"code": 101
}
}
access_tokenを取得できた場合:
access_token=XXX&expires=5183979
ここで取得したaccess_tokenを利用してGraphAPIにアクセス
PythonでBottle+Beakerでセッションを使用する方法
以下にbottleをCGIで動作した場合のサンプルを以下に示す。
index.cgi
from bottle import run
from application import app
from beaker.middleware import SessionMiddleware
session_opts = {
'session.type': 'file',
'session.data_dir': './session',
'session.cookie_expires': True,
'session.auto': True
}
appSession = SessionMiddleware(app, session_opts)
run(appSession, server='cgi')
application.py
from bottle import get, post, template, Bottle, response, request, redirect
import os
app = Bottle()
@app.get('/')
def index():
session = request.environ.get('beaker.session')
session['counter'] = session.get('counter', 0) + 1
session.save()
return template('<b>Hello {{name}}</b>!', name=session['counter'])
ページにアクセスするたびに、session.data_dirのファイルが更新される。
Beakerでは、作成されたファイルの削除は行われないので、cronなどで定期的に削除すること。
find /hoge/session -type f -mmin +60 -exec rm {} \;
facebook-sdkを使用した操作例
# -*- coding: utf-8 -*-
import facebook
graph = facebook.GraphAPI('取得したAPI')
profile = graph.get_object('facebookpageのIDか名前')
print profile
posts = graph.get_connections(profile['id'], 'posts')
print posts
まとめ
facebook-sdk、bottle、Beakerを利用することで、PythonでもfacebookAPIを用いたアプリケーションを作成できる。