3

저는 파이썬 facebook-sdk 클라이언트 라이브러리를 사용하고 있습니다. https://developers.facebook.com/tools/accesstoken/에서 얻은 수명이 짧은 액세스 토큰을 사용하여 사이트의 코드를 인증 용 코드로 복사합니다.파이썬에서 페이스 북 액세스 토큰을 확장하는 방법

 graph = facebook.GraphAPI(access_token) 

이 토큰은 60 분 후에 만료됩니다. 나는 이것을 60 일간의 살아있는 토큰으로 확장하려고 노력하고 있으므로 만료 될 때마다 수동으로 복사 할 필요가 없다. 파이썬 (또는 단순히 페이지에 로그인하지 않고 단순히)이 아니라 다른 형식으로이 작업을 수행하는 방법에 대한 수많은 답을 찾을 수 있습니다.

[참고로, 내가 사용할 코드는 내 용도로만 사용되었으며, 따라서 로그인 페이지를 만들지 않으려 고합니다. 나는 이미 가지고있는 토큰을 확장 할 수 있기를 원한다.

답변

9

문제는 원래 질문했을 때이 파이썬의 FB API를 제공했지만, 깔끔한 방법은 액세스의 만기를 연장 할 경우 확실하지 않음 토큰은 다음과 같습니다 :

graph = facebook.GraphAPI(user_short_lived_token_from_client) 
app_id = 'app_id' # Obtained from https://developers.facebook.com/ 
app_secret = 'app_secret' # Obtained from https://developers.facebook.com/ 

# Extend the expiration time of a valid OAuth access token. 
extended_token = graph.extend_access_token(app_id, app_secret) 
print extended_token #verify that it expires in 60 days 
+0

감사합니다. 이것은 이전에 사용했던 것보다 훨씬 깨끗합니다. – kyrenia

+0

@kyrenia 환영합니다. 당신은 당신의 대답을 삭제할 필요가 없었습니다. 나는 누군가가 원시 http 요청을 만들고 싶다면 여전히 유용하다고 생각한다. 이 경우에는 – uchamp

+0

가 unldeleted됩니다! – kyrenia

1

extending short lived client tokens에 자신의 하위에 따르면, 당신은 토큰 당신의 단명 클라이언트에 걸릴해야하고, 관련 응용 프로그램 데이터에 충전 한 다음 엔드 포인트에 서버에서 GET 요청을 보내

GET /oauth/access_token? 
    grant_type=fb_exchange_token&   
    client_id={app-id}& 
    client_secret={app-secret}& 
    fb_exchange_token={short-lived-token} 

응답에는 수명이 긴 액세스 토큰이 포함되어 클라이언트에 다시 전달되거나 서버에서 사용될 수 있습니다. 현재 HTTP 작업을 수행하는 모듈이 없다면 Requests을 적극 권장합니다.

3

여기에 편집 된 버전은 최신 API 버전으로 호환 :

import requests 
import json 
access_token = 'your token'  # Obtained from https://developers.facebook.com/tools/accesstoken/ 
app_id = "your app id"   # Obtained from https://developers.facebook.com/   
client_secret = "app secret" # Obtained from https://developers.facebook.com/ 

link = "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=" + app_id +"&client_secret=" + client_secret + "&fb_exchange_token=" + access_token 
s = requests.Session() 
token = s.get(link).content 
token=json.loads(token) 
token=token.get('access_token') 

print token