gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:59:36 25 4
gpt4 key购买 nike

如何使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com