web-dev-qa-db-ja.com

Facebook Graph APIを使用するためのプログラムによるアクセストークンの取得

Facebook graph APIで遊ぶためにbashまたはpythonスクリプトを組み立てようとしています。APIの使用は簡単に見えますが、bashスクリプトでcurlをセットアップして認証を呼び出すのに問題がありますとaccess_token。誰かが実際の例を持っていますか?

39
justinhj

2018-08-23を更新

これはまだいくつかのビューと賛成を得ているので、メンテナンスされたサードパーティSDKが存在するようになったことに言及したいだけです: https://github.com/mobolic/facebook-sdk


絶対に遅れるよりも、それを探している人が見つかるかもしれません。 MacBookでPython 2.6で動作するようにしました。

これはあなたが持っている必要があります

  • Pythonインストール済みのfacebookモジュール: https://github.com/pythonforfacebook/facebook-sdk
  • 実際のFacebookアプリのセットアップ
  • また、投稿するプロファイルには、読み取りや書き込みなどのさまざまなものすべてを許可する適切な権限が付与されている必要があります。

Facebook開発者向けドキュメントで認証に関する情報を読むことができます。詳細については、 https://developers.facebook.com/docs/authentication/ を参照してください。

このブログ投稿もこれに役立つ可能性があります: http://blog.theunical.com/facebook-integration/5-steps-to-publish-on-a-facebook-wall-using-php/

ここに行く:

#!/usr/bin/python
# coding: utf-8

import facebook
import urllib
import urlparse
import subprocess
import warnings

# Hide deprecation warnings. The facebook module isn't that up-to-date (facebook.GraphAPIError).
warnings.filterwarnings('ignore', category=DeprecationWarning)


# Parameters of your app and the id of the profile you want to mess with.
FACEBOOK_APP_ID     = 'XXXXXXXXXXXXXXX'
FACEBOOK_APP_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
FACEBOOK_PROFILE_ID = 'XXXXXX'


# Trying to get an access token. Very awkward.
oauth_args = dict(client_id     = FACEBOOK_APP_ID,
                  client_secret = FACEBOOK_APP_SECRET,
                  grant_type    = 'client_credentials')
oauth_curl_cmd = ['curl',
                  'https://graph.facebook.com/oauth/access_token?' + urllib.urlencode(oauth_args)]
oauth_response = subprocess.Popen(oauth_curl_cmd,
                                  stdout = subprocess.PIPE,
                                  stderr = subprocess.PIPE).communicate()[0]

try:
    oauth_access_token = urlparse.parse_qs(str(oauth_response))['access_token'][0]
except KeyError:
    print('Unable to grab an access token!')
    exit()

facebook_graph = facebook.GraphAPI(oauth_access_token)


# Try to post something on the wall.
try:
    fb_response = facebook_graph.put_wall_post('Hello from Python', \
                                               profile_id = FACEBOOK_PROFILE_ID)
    print fb_response
except facebook.GraphAPIError as e:
    print 'Something went wrong:', e.type, e.message

トークンを取得する際のエラーチェックの方が良いかもしれませんが、何をすべきかのアイデアは得られます。

37
maryisdead

ここで、できるだけ簡単に進みます。サードパーティのSDKなどは必要ありません。

Python 'requests'モジュールがインストールされていることを確認してください

import requests

def get_fb_token(app_id, app_secret):
    url = 'https://graph.facebook.com/oauth/access_token'       
    payload = {
        'grant_type': 'client_credentials',
        'client_id': app_id,
        'client_secret': app_secret
    }
    response = requests.post(url, params=payload)
    return response.json()['access_token']
27
Waqas

簡単! facebook-sdk を使用してください。

import facebook

app_id = 'YOUR_APP_ID'
app_secret = 'YOUR_APP_SECRET'

graph = facebook.GraphAPI()

# exactly what you're after ;-)
access_token = graph.get_app_access_token(app_id, app_secret) 
16
s29

最初に アプリケーションのセットアップ を行う必要があります。次に、アプリケーションIDとシークレットが指定されたアクセストークンを吐き出します。

> curl -F type=client_cred -F client_id=[...] -F client_secret=[...] https://graph.facebook.com/oauth/access_token
9
Ian Stevens

そこにISそれを行う方法、私はそれを見つけましたが、それは多くの作業であり、ブラウザを100%偽装する必要があります(そして、あなたはおそらく彼らの条件を破るでしょうサービス)

申し訳ありませんが、すべての詳細を提供することはできませんが、その要点:

  1. facebookアカウントのユーザー名/パスワードを持っていると仮定して、oauth/authenticate ...ページのcurlを実行します。 「Set-Cookie」ヘッダーで返されたすべてのCookieを抽出し、「Location」ヘッダーを追跡します(途中でCookieをコンパイルします)。
  2. ログインフォームをスクレイピングし、すべてのフィールドを保持し、(1)からの同じCookieコレクションを送信(リファラーとコンテンツタイプヘッダーを設定し、メール/パスを挿入)して送信します
  3. (2)と同じですが、ここでPOST(2)が送信された後に取得された承認フォーム、フォームが取得されたthr URLでRefererヘッダーを設定する必要があります。
  4. サイトに送り返すまでリダイレクトに従い、そのURLから「コード」パラメーターを取得します
  5. oauthエンドポイントでaccess_tokenのコードを交換します

主な落とし穴は、Cookieの管理とリダイレクトです。基本的に、ブラウザを100%模倣する必要があります。ハッカーだと思いますが、方法はありますが、本当に難しいです!

6
Hidden

Webブラウザは実際の承認に関与する必要があるため、すべてを実行する「スタンドアロンスクリプト」のようなものはありません。 APIで遊んでいるだけの場合、または自分で何かを自動化するスクリプトを記述していて、access_token有効期限が切れていない自分の場合は、ここで入手できます。 http://fbrell.com/auth/offline-access-token

6
daaku

s29には正しい答えがありますが、解決するための手順がいくつか残っています。次のスクリプトは、Facebook SDKを使用してアクセストークンを取得するための作業スクリプトを示しています。

__requires__ = ['facebook-sdk']

import os

import facebook


def get_app_access_token():
    client = facebook.GraphAPI()
    return client.get_app_access_token(
        os.environ['FACEBOOK_APP_ID'],
        os.environ['FACEBOOK_APP_SECRET'],
    )


__== '__main__' and print(get_app_access_token())

このスクリプトは、FACEBOOK_APP_IDおよびFACEBOOK_APP_SECRET環境変数がアプリの値に設定されることを想定しています。別のソースからこれらの値をロードするために、その手法を自由に適用してください。

最初に Facebook SDKをインストールpip install facebook-sdk; python get-token.py)または rwt などの別のツールを使用してスクリプトを呼び出します(rwt -- get-token.py)。

1
Jason R. Coombs

Pythonコード です。コマンドラインで これらの例 のいくつかを実行してみてください。うまく動作します。参照してください— http://www.pythonforfacebook.com/

0
gsharma