python - 如何使用 Python 和 GraphAPI 更新 FB 状态?

标签 python facebook facebook-graph-api

如何使用 Python 和 GraphAPI 更新 FB 状态?以前有人问过这个问题,但许多解决方案已被弃用,而且 GraphAPI 的要求似乎使许多解决方案变得无关紧要。

我摆弄过 fbpy、Facebook、OAuth 和 oauth2 包,并查看了它们的示例,但我仍然无法弄清楚如何让它们工作。我不信任我一直在使用的任何代码或软件包,并且想知道是否有人有任何他们知道可行的明确解决方案。

最佳答案

首先你需要做的是了解login flows .如果您想轻松切换不同的 Facebook 库,您应该了解。因此,基于实现,它可以有非常冗长的代码和非常简单的代码。

接下来是有不同的方式来实现处理 OAuth 以及不同的方式来显示和启动 Python 中的网络应用程序。不点击浏览器就无法授权。否则,您将不得不继续将 access_token 复制粘贴到代码中。

假设您选择 web.py 来处理您的网络应用演示,并选择 requests.py 来处理 Graph API HTTP 调用。

import web, requests

然后设置我们希望所有请求通过的 URL

url = (
'/', 'index'
)

现在获取您要使用的应用程序 ID、密码和登录后 URL

app_id = "YOUR_APP_ID"
app_secret = "APP_SECRET"
post_login_url = "http://0.0.0.0:8080/"

此代码将有一个类 index 来处理逻辑。在这个类中,我们要处理授权 code Facebook 将在登录后返回

Login Flow

user_data = web.input(code=None)
code = user_data.code

从这里设置一个条件来检查code

if not code:
    # we are not authorized
    # send to oauth dialog
else:
    # authorized, get access_token

在“未授权”分支中,将用户发送到对话框

dialog_url = ( "http://www.facebook.com/dialog/oauth?" +
                           "client_id=" + app_id +
                           "&redirect_uri=" + post_login_url +
                           "&scope=publish_stream" )

return "<script>top.location.href='" + dialog_url + "'</script>"

否则我们可以使用收到的code提取access_token

token_url = ( "https://graph.facebook.com/oauth/access_token?" +
                          "client_id=" + app_id +
                          "&redirect_uri=" + post_login_url +
                          "&client_secret=" + app_secret +
                          "&code=" + code )
            response = requests.get(token_url).content

            params = {}
            result = response.split("&", 1)
            for p in result:
                (k,v) = p.split("=")
                params[k] = v

            access_token = params['access_token']

从这里您可以选择如何处理更新状态的调用,例如表单,

graph_url = ( "https://graph.facebook.com/me/feed?" +
"access_token=" + access_token )

return ( '<html><body>' + '\n' +
         '<form enctype="multipart/form-data" action="' +
         graph_url + ' "method="POST">' + '\n' +
         'Say something: ' + '\n' +
         '<input name="message" type="text" value=""><br/><br/>' + '\n' +
         '<input type="submit" value="Send"/><br/>' + '\n' +
         '</form>' + '\n' +
         '</body></html>' )

或者使用face.py

from facepy import GraphAPI
graph = GraphAPI(access_token)
try:
    graph.post(
            path = 'me/feed',
            message = 'Your message here'
    )
except GraphAPI.OAuthError, e:
    print e.message

所以最后你可以得到一个像这样的精简版

import web
from facepy import GraphAPI
from urlparse import parse_qs

url = ('/', 'index')

app_id = "YOUR_APP_ID"
app_secret = "APP_SECRET"
post_login_url = "http://0.0.0.0:8080/"

user_data = web.input(code=None)

if not user_data.code:
    dialog_url = ( "http://www.facebook.com/dialog/oauth?" +
                               "client_id=" + app_id +
                               "&redirect_uri=" + post_login_url +
                               "&scope=publish_stream" )

    return "<script>top.location.href='" + dialog_url + "'</script>"
else:
    graph = GraphAPI()
    response = graph.get(
        path='oauth/access_token',
        client_id=app_id,
        client_secret=app_secret,
        redirect_uri=post_login_url,
        code=code
    )
    data = parse_qs(response)
    graph = GraphAPI(data['access_token'][0])
    graph.post(path = 'me/feed', message = 'Your message here')

更多信息见

* Facebook API - 用户订阅:http://developers.facebook.com/docs/reference/api/user/#feed
* 在 Python 中发布 Facebook 照片——基础知识:http://philippeharewood.com/facebook/publish-a-facebook-photo-in-python-the-basic-sauce/
* Facebook 和 Python – 基础知识:http://philippeharewood.com/facebook/facebook-and-python-the-basic-sauce/

关于python - 如何使用 Python 和 GraphAPI 更新 FB 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13372528/

相关文章:

python 无法导入 gimpfu

java - Facebook 图形 API : Attend to event always returns responseCode: 200, false

c++ - 在 'parallel'中运行语句

python - 使用带有分类数据的 seaborn barplot 的困难

iphone - 适用于iPhone的SoundCloud示例项目

facebook - Facebook 的 'data-ft' JSON 结构中的键代表什么?

c# - 使用 C# 从 facebook 获取 FB 页面数据

python - 如何获取所有的 Facebook Graph API 页面提要?

python - 如何在 AngularJS 网站上的 Python 中使用 Selenium 迭代和保存动态表中的信息

ios - Swift segue 不工作?