PythonでFacebookを操作してみる

  • 35
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

目的

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/

facebook1.png

3.アプリケーションの種類で[ウェブサイト]を選択する
facebook2.png

4.アプリケーション名を入力して、[Create New Facebook APP ID]を選択する

facebook3.png

5.カテゴリーを選択して[Create APP ID]を入力する。
facebook4.png

6.作成されたページを下にスクロールすると「サイトURL」を入力できるので、そこを入力して「次へ」を押下する

facebook5.png

facebook6.png

FacebookAPIで指定するredirect_urlは、このサイとで指定したドメイン名でなければならない。IPアドレスの指定はできないようなので、ローカルで動かす場合はlocalhostとしておく。

7.ページをリロードするとメニューから作成したアプリケーションを選択できるようになる。
facebook8.png

8.アプリを選択すると、「App ID」と「App Secret」を表示できる。この値を使って認証を行いアクセストークンを取得できる。

facebook9.png

アクセストークン取得する

以下にアクセストークン取得する方法を示す。

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

例:
https://www.facebook.com/dialog/oauth?client_id=XXXXX&redirect_uri=http%3A%2F%2Flocalhost%2Fcheck_facebook&scope=read_stream

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

例:
https://graph.facebook.com/oauth/access_token?client_id=facebookアプリのAppID&client_secret=facebookアプリのSecret&redirect_uri=http%3A%2F%2Flocalhost%2Fcheck_facebook&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を用いたアプリケーションを作成できる。