之前已经提出过这个问题,但许多解决方案已被弃用,GraphAPI的要求似乎已经使许多解决方案无关紧要。 我已经摆弄了fbpy,facebook,oauth,oauth2软件包,并查看了他们的示例,但仍然无法弄清楚如何使其正常工作。我不相信任何代码或我一直使用的软件包,并且想知道是否有人有任何他们知道可行的确定解决方案。谢谢。
答案 0 :(得分:4)
首先,您需要了解login flows。如果您想轻松切换不同的Facebook库,应了解。因此,对于基于实现的非常简单的代码,它可以拥有非常冗长的代码。
接下来的事情是,有不同的方法来实现处理OAuth以及在Python中显示和启动Web应用程序的不同方法。没有点击浏览器就无法授权。否则你必须保持将access_token复制粘贴到代码中。
假设您选择web.py
来处理您的网络应用演示,并requests.py
来处理Graph API HTTP调用。
import web, requests
然后设置我们希望所有请求通过的网址
url = (
'/', 'index'
)
现在获取您想要使用的应用程序ID,密码和登录后的URL
app_id = "YOUR_APP_ID"
app_secret = "APP_SECRET"
post_login_url = "http://0.0.0.0:8080/"
此代码将有一个类index
来处理逻辑。在本课程中,我们想要处理登录后Facebook将返回的授权code
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>"
否则,我们可以使用收到的access_token
code
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 - 用户Feed: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/
答案 1 :(得分:3)
使用facepy:
的一种可能的(测试!)解决方案status_update
扩展权限。使用上一步中创建的用户访问令牌facepy:
from facepy import GraphAPI
ACCESS_TOKEN = 'access-token-copied-from-graph-api-explorer-on-web-browser'
graph = GraphAPI(ACCESS_TOKEN)
graph.post('me/feed', message='Hello World!')
答案 2 :(得分:2)
您也可以尝试this博客。它正在使用 fbconsole app。
博客中的代码:
from urllib import urlretrieve
import imp
urlretrieve('https://raw.github.com/gist/1194123/fbconsole.py', '.fbconsole.py')
fb = imp.load_source('fb', '.fbconsole.py')
fb.AUTH_SCOPE = ['publish_stream']
fb.authenticate()
status = fb.graph_post("/me/feed", {"message":"Your message here"})
答案 3 :(得分:1)
这就是我开始工作的方式。您绝对不需要为此创建任何应用程序。我将介绍如何将状态更新发布到您的个人资料以及您的Facebook页面。
首先,将状态更新发布到您的个人资料:
转到https://developers.facebook.com/tools/explorer。
你会看到一个带有Access Token的文本框。单击此文本框旁边的“获取访问令牌”按钮。它将打开一个弹出窗口,询问您对访问令牌的各种权限。基本上,这些权限定义了使用此令牌通过Graph API可以执行的操作。选中您需要的所有权限旁边的复选框,其中一个权限将更新您的状态
现在继续安装facepy模块。最好的方法是使用pip install
在此之后,任何.py文件中的以下代码段:
from facepy import GraphAPI
access_token = 'YOUR_GENERATED_ACCESS_TOKEN'
apiConnection = GraphAPI(access_token)
apiConnection.post(path='me/feed',
message='YOUR_DESIRED_STATUS_UPDATE_HERE')
现在以标准的python方式执行此.py文件并检查你的facebook。您应该看到YOUR_DESIRED_STATUS_UPDATE_HERE
发布到您的Facebook个人资料中。
接下来,用你的facebook页面做同样的事情:
除了生成访问令牌外,该过程几乎完全相同 现在您无法使用相同的访问令牌发布到您的Facebook页面。您需要生成一个新的,对于初次使用Graph API的人来说可能有点棘手。这是你需要做的:
转到相同的developers.facebook.com/tools/explorer页面。
找到显示'Graph API Explorer'的下拉列表,然后点击它。从下拉列表中,选择要从中发布更新的页面。为此页面生成新的访问令牌。该过程描述为here :.不要忘记在扩展权限选项卡中查看manage_pages权限。
现在使用此代码与您之前使用的代码相同并运行它。
转到您的Facebook页面。您应YOUR_DESIRED_STATUS_UPDATE
张贴到您的信息页。
希望这有帮助!