2024-05-19 11:03:44 发布
网友
这个问题以前有人问过,但是很多解决方案都被否决了,GraphAPI的要求似乎使许多解决方案变得无关紧要。 我已经修改了fbpy、facebook、oauth、oauth2包,并浏览了它们的示例,但仍然无法找到如何使其工作的方法。我对我使用过的任何代码和软件包都不信任,我想知道是否有人有任何他们知道可以工作的最终解决方案。谢谢。
你也可以试试this博客。它正在使用fbconsole应用程序。
来自博客的代码:
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"})
首先你要做的是理解login flows。如果你想轻松地切换不同的Facebook库,你应该理解。因此,它可以有非常详细的代码,而基于实现的代码非常简单。
下一件事是有不同的方法来实现对OAuth的处理,以及用Python显示和启动web应用程序的不同方法。不点击浏览器就无法授权。否则,您必须继续将访问令牌复制粘贴到代码中。
假设您选择了web.py来处理您的web应用程序演示,选择了requests.py来处理图形API HTTP调用。
web.py
requests.py
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来处理逻辑。在这个类中,我们要处理的是授权codeFacebook将在登录后返回
index
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>"
否则我们可以使用接收到的code提取access_token
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/
一个可能(已测试!)使用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!')
你也可以试试this博客。它正在使用fbconsole应用程序。
来自博客的代码:
首先你要做的是理解login flows。如果你想轻松地切换不同的Facebook库,你应该理解。因此,它可以有非常详细的代码,而基于实现的代码非常简单。
下一件事是有不同的方法来实现对OAuth的处理,以及用Python显示和启动web应用程序的不同方法。不点击浏览器就无法授权。否则,您必须继续将访问令牌复制粘贴到代码中。
假设您选择了
web.py
来处理您的web应用程序演示,选择了requests.py
来处理图形API HTTP调用。然后设置我们希望所有请求都通过的URL
现在获取您想要使用的应用程序id、机密和登录后URL
这段代码将有一个类
index
来处理逻辑。在这个类中,我们要处理的是授权code
Facebook将在登录后返回从这里设置一个条件来检查
code
在“未授权”分支中,将用户发送到对话框
否则我们可以使用接收到的
code
提取access_token
从这里您可以选择如何处理更新状态的调用,例如表单
或者使用face.py
最后你可以得到一个瘦身版
有关详细信息,请参见
*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/
一个可能(已测试!)使用facepy的解决方案:
status_update
扩展权限的Graph API explorer生成用户访问令牌。使用在上一步中创建的用户访问令牌与facepy:
相关问题 更多 >
编程相关推荐