获取访问令牌以读取页面洞察
我一直在用Python来获取Facebook的洞察信息。我能够获取一些公开的信息,比如可口可乐页面的“点赞”数,以及我自己开发的应用的洞察数据。
因为我同时是这两个页面和应用的管理员和开发者,所以当我访问facebook.com/insights时,我会看到一个关于页面的部分和一个关于应用的部分。我想通过图形API获取这两个部分的洞察数据,并把它们存储到我个人的数据库中。获取应用的洞察数据并不难。我在创建应用时得到了我的app_id和app_secret,然后按照这个页面的App Login流程 http://developers.facebook.com/docs/authentication/ 操作。这让我得到了一个可以用来获取应用洞察数据的app access_token。
但是,当我尝试对页面做同样的事情时,就遇到了更多麻烦。很多之前的帖子提到,Facebook的文档大多是关于如何让一个Facebook应用获取access_token,以便管理或读取页面的洞察数据。我明白这对与用户页面互动的应用是有用的。然而,我的直觉告诉我,作为页面的管理员,我应该能够直接获取一个带有read_insights权限的access token,而不需要通过外部应用。
到目前为止,我唯一能读取我页面洞察数据的方法是使用Graph Api Explorer。我通过Explorer获取了一个access_token(通过access_token按钮,允许Explorer访问我的个人数据,并请求了manage_pages和read_insight的扩展权限)。然后,我按照我上面提到的/docs/authentication/页面中的Page Login说明,获取了我管理的Facebook页面的access_token。最后,我终于可以运行 https://graph.facebook.com/PAGE_ID/insights?access_token=RETRIEVED_TOKEN。不过,这种获取access_token的方法实在是太繁琐了。有没有更简单的方法来获取这个token呢?谢谢你的帮助。我为这个问题挣扎了很久。
我还附上了我用来获取应用access token的代码。
def get_access_token():
args = dict(client_id=FACEBOOK_APP_ID, client_secret=FACEBOOK_APP_SECRET, grant_type="client_credentials" )
url = "https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(args)
response = urlparse.parse_qs(urllib.urlopen(url).read())
access_token = response['access_token'][0]
return access_token
1 个回答
为什么不使用传统的方法:
- 首先,你需要创建一个应用程序,然后用 Facebook 登录这个应用(比如使用 JavaScript SDK)。在这个过程中,你需要请求 offline_access 和 read_insights 的权限。
获取 offline_access 权限后,你会得到一个永久的访问令牌(access_token),这样你就可以随时访问数据了。 - 使用 JavaScript SDK 的时候(通过 FB.login 方法),系统会返回一个对象,这个对象里包含了你需要的访问令牌。