Help us understand the problem. What is going on with this article?

PythonでFacebookを操作してみる

More than 5 years have passed since last update.

目的

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした