40
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PythonでFacebookを操作してみる

Last updated at Posted at 2015-01-08

#目的
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。

easy_install facebook-sdk

bottle

PythonのWebフレームワーク。1ファイルのみで構成されているのでインストールが楽。

beaker

Pythonでセッション管理を行うためのライブラリ

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を用いたアプリケーションを作成できる。

40
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?