1

私はfacepyfacebookグラフAPIを使用してメールボックス/メッセージにアクセスしており、次の2つのアプローチに従いました。

最初のアプローチ:

access tokenFacebookページから取得したものを使用Graph Explorerし、以下のコードを使用しました。

from facepy import GraphAPI
graph = GraphAPI(token)
print graph.get('/me')
#Rest of the code

上記のコードは正常に機能し、を使用してすべてのメッセージを取得できましたFQL Query。しばらくしてauth_tokenexpiredを実行すると、問題が発生しました。

それで、いくつかのグーグルの後、私は2に近づくようにシフトしました:

さて、私がやったことは、Facebookアプリがread_mailbox許可を与えてそれを取得しid and key、次にfacepyのget_application_access_tokenメソッドを使用してトークンを取得することでした。

使用したトークンを取得した後:

token = facepy.utils.get_application_access_token(app_id, key)
graph.get('/me')
## OUT: OAuthError: [2500] An active access token must be used to query information about the current user.
facepy.utils.get_extended_access_token(token, app_id, key)
# OUT: OAuthError: [1] No user access token specified

commented #これで、アプリケーショントークンの使用時に生成されたerror()を確認できます。

私が得ているエラーは、Facebookがを必要user_tokenとし、私がそれを提供しているためだと思いますapp_token

それで、app_tokenを使用してユーザーデータにアクセスすることは可能ですか?そうでない場合は、ユーザーデータにアクセスできるを発行する方法はありますかextended token

アップデート:

それで、私は@Johannesの提案に従い、これを試しましたが、エラーが発生しました:

from facepy.utils import get_extended_access_token
from facepy import GraphAPI
token = "My user access token got from https://developers.facebook.com/tools/explorer"
long_lived_access_token = get_extended_access_token(token)
graph = GraphAPI(long_lived_access_token)
graph.get('/me')

さて、上記のコードを実行すると、

TypeError: get_extended_access_token() takes exactly 3 arguments (1 given)

だから、私はそれをに変更してlong_lived_access_token = get_extended_access_token(token, None, None)得ました

facepy.exceptions.OAuthError

それで、もう一度に変更しましたlong_lived_access_token = get_extended_access_token(token, app_id, key)が、上記と同じ例外/エラーが発生しました。

それで、これはバグですか、それとも私は何か間違ったことをしていますか?

PS:gitから最新バージョンをインストールしました。

4

2 に答える 2

6

アプリケーションアクセストークンを使用してユーザーのメールボックスを読み取ることはできないという想定は正しいですが、発生するエラーはgraph、アクセストークンで初期化していないという事実に起因しています。

とはいえ、ユーザーのアクセストークンを拡張する方法を尋ねるのは正しい方向に進んでいます。すでにお気づきのように、Facepy HEAD(まもなくバージョン0.9)にはget_extended_access_token、既存の短期間のユーザーアクセストークンを受け入れて拡張する機能があります。拡張ユーザーアクセストークンは2か月間有効です。詳細については、offline_access権限の削除に関するFacebookのドキュメントをご覧ください。

今すぐ使用したい場合はget_extended_access_token、gitからfacepyをインストールする必要があります。

$ pip install git+git://github.com/jgorset/facepy.git@b5153f460f2f52cef9a5e49a3b48b3fb8742356c

適切なバージョンのFacepyをインストールしたら、既存の短期間のユーザーアクセストークンを拡張し、それを使用しての新しいインスタンスを初期化できますGraphAPI

from facepy.utils import get_extended_access_token
from facepy import GraphAPI

long_lived_access_token, expires_at = get_extended_access_token(short_lived_access_token, application_id, application_secret_key)

graph = GraphAPI(long_lived_access_token)
graph.get('/me')
于 2012-10-01T16:13:18.053 に答える
5

結果を正しい方法で解釈していないAPIには何の問題もありません。結果を印刷しようとしても、long_lived_access_token = get_extended_access_token(token)直接は表示されません。long_lived_access_token代わりに、タプルに内容が表示されます。

long_lived_access_token = ('your token', datetime_object).

これは、 utils.pyのソースコードを確認することで確認できます。メソッドを見ると、get_extended_access_tokenが返されますtoken, expires_at

Facebookのドキュメントによると、extendedアクセストークンを取得するには、以下のエンドポイントでリクエストを行う必要があります

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

応答は、60日を意味するtoken=mytoken&expire=5184000場合のようなものです。5184000

したがって、最終的なコードは次のようになります。

from facepy.utils import get_extended_access_token
from facepy import GraphAPI

app_id = 'id'
key = 'key'

short_lived_access_token = 'short_token'
long_token = get_extended_access_token(short_token, id, key)

graph = GraphAPI(long_token[0])
print graph.get('/me')
于 2012-10-02T08:27:01.490 に答える