2012-10-01 1 views
1
내 사서함/메시지에 액세스 할 수 facepy facebook graph API을 사용하고

내가 다음에 다음과 같은 두 가지 방법 :파이썬 : 페이스 북 API 보여주는 유효하지 않은 토큰

1 접근 :

내가 사용하는 내가 Graph Explorer 페이스 북에서받은 access token 페이지와 아래의 코드를 사용합니다

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

은 위의 코드는 잘 작동하고 나는를 사용하여 내 모든 메시지를 검색 할 수 있었다. 문제는 내 auth_token expired 언젠가 후에 발생했습니다.

그래서, 일부 인터넷 검색 후 나는 에 접근이 이동 : 이제

를, 내가가 페이스 북의 응용 프로그램을 생성 한 일은 그것을 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 #)를 볼 수 있습니다.

나는 페이스 북이 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)으로 변경하고

을 받았습니다.210
facepy.exceptions.OAuthError 

그래서 나는 다시 long_lived_access_token = get_extended_access_token(token, app_id, key)으로 바꿨고 위와 같은 예외/오류가 발생했습니다.

그래서 버그입니까, 아니면 잘못하고 있습니다.

추신 : 전 git에서 최신 버전을 설치했습니다.

답변

6

사용자의 사서함을 읽는 데 응용 프로그램 액세스 토큰을 사용할 수 없다는 가정이 맞지만 실제로 액세스 토큰을 사용하여 을 초기화하지 않았기 때문에 오류가 발생합니다.

사용자의 액세스 토큰을 확장하는 방법을 묻는 올바른 길을 걷고 있습니다. 당신이 이미 발견했듯이 Facepy HEAD (곧 버전 0이 될 것입니다.9)는 기존의 수명이 짧은 사용자 액세스 토큰을 수락하고 확장하는 기능이 get_extended_access_token입니다. 확장 사용자 액세스 토큰은 2 개월 동안 지속되며, removal of offline_access permission의 Facebook 문서에서 자세한 사용자 액세스 토큰을 읽을 수 있습니다. 당신이 Facepy의 올바른 버전을 설치 한 후

$ pip install git+git://github.com/jgorset/[email protected] 

, 당신은 기존의 단명 한 사용자 액세스를 확장 할 수 있습니다 : 당신이 지금 get_extended_access_token를 사용하려면

, 당신은 자식에서 facepy를 설치해야합니다 토큰과 함께 GraphAPI의 새로운 인스턴스를 초기화 : 당신은 단지 올바른 방법으로 결과를 해석하지 않는 API 아무 문제가 없습니다

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') 
+0

감사 :

그래서 최종 코드는 같을 것이다. 제 '업데이트 된'질문을보십시오. – RanRag

+0

API에서'get_extended_access_token'은 튜플을 반환하므로 정확한 토큰 전달 방법은'graph = GraphAPI (long_lived_access_token [0])'이됩니다. – RanRag

+1

@RanRag : 네 말이 맞아. 그에 따라 내 대답을 업데이트했습니다. 감사! –

5

. 당신이 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 docs에 따르면 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 

에 요청을해야하고 5184000 60 일을 의미 곳 응답이 token=mytoken&expire=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') 
+0

고마워, 완벽하게 wokrked하지만 어떤 대답을 받아 들일지 혼란 스럽다. – RanRag

+5

@Noob : 그 이야기를 듣고 기쁩니다. 나는 그가 Johannes의 대답을 받아 들여야한다고 믿는다. 왜냐하면 그는 API의 원저자이기 때문에 나는 API docs를 보았을 뿐이다. 그래서 크레딧은 필자가 아니라 저자에게 가야합니다. – RanRag