如何使用Python&;更新FB状态;格拉法比?

如何使用Python&;更新FB状态;格拉法比?,python,facebook,facebook-graph-api,Python,Facebook,Facebook Graph Api,这个问题以前有人提出过,但许多解决方案都被否决了,GraphAPI的要求似乎使许多解决方案变得无关紧要。 我已经摆弄了fbpy、facebook、oauth、oauth2软件包,并查看了它们的示例,但仍然不知道如何使其工作。我对我使用的任何代码或软件包都不信任,我想知道是否有人有任何他们知道会起作用的最终解决方案。谢谢 一种可能的(经过测试的!)解决方案,使用: 创建新的或使用以前创建的现有 使用具有应用程序的扩展权限的状态更新生成用户访问令牌 将在上一步中创建的用户访问令牌用于: 首先你需要

这个问题以前有人提出过,但许多解决方案都被否决了,GraphAPI的要求似乎使许多解决方案变得无关紧要。 我已经摆弄了fbpy、facebook、oauth、oauth2软件包,并查看了它们的示例,但仍然不知道如何使其工作。我对我使用的任何代码或软件包都不信任,我想知道是否有人有任何他们知道会起作用的最终解决方案。谢谢

一种可能的(经过测试的!)解决方案,使用:

  • 创建新的或使用以前创建的现有
  • 使用具有应用程序的扩展权限的状态更新生成用户访问令牌
  • 将在上一步中创建的用户访问令牌用于:


  • 首先你需要做的是理解。如果您想轻松地切换不同的Facebook库,您应该了解。因此,它可以有非常详细的代码,而不是基于实现的非常简单的代码

    接下来,有不同的方法来实现对OAuth的处理,也有不同的方法来用Python显示和启动web应用程序。如果不点击浏览器,就无法进行授权。否则,您必须将访问令牌复制粘贴到代码中

    假设您选择
    web.py
    来处理web应用程序演示,选择
    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/"
    
    此代码将有一个类
    索引
    ,用于处理逻辑。在这个类中,我们要处理登录后Facebook将返回的授权
    code

    user_data = web.input(code=None)
    code = user_data.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>"
    
    从这里,您可以选择如何处理更新状态的调用,例如表单

    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>' )
    
    所以最终你可以得到一个精简版,比如

    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')
    
    导入web
    从facepy导入GraphAPI
    从URL解析导入解析
    url=(“/”,“索引”)
    app\u id=“你的app\u id”
    app\u secret=“app\u secret”
    post_登录_url=”http://0.0.0.0:8080/"
    用户\数据=web.input(代码=无)
    如果不是用户_data.code:
    对话框_url=(“http://www.facebook.com/dialog/oauth?" +
    “客户端id=“+应用程序id”+
    “&redirect_uri=“+post_login_url”+
    “&scope=publish\u stream”)
    返回“top.location.href=”+对话框\u url+“”
    其他:
    graph=GraphAPI()
    response=graph.get(
    path='oauth/access\u token',
    客户端id=应用程序id,
    客户端密码=应用程序密码,
    重定向\u uri=post\u登录\u url,
    代码=代码
    )
    数据=解析(响应)
    graph=GraphAPI(数据['access\u token'][0])
    graph.post(路径='me/feed',消息='yourmessage here')
    
    有关更多信息,请参阅

    *Facebook API-用户源:
    *用Python发布Facebook照片–最基本的调味品:
    *Facebook和Python——最基本的调味品:

    你也可以试试博客。它正在使用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"})
    

    我就是这样让它工作的。你绝对不需要为此创建任何应用程序。我将描述如何将状态更新发布到您的个人资料和您的facebook页面

    首先,要将状态更新发布到您的个人资料:


    您将看到一个文本框,前面写有访问令牌。单击此文本框旁边的“获取访问令牌”按钮。它将打开一个弹出窗口,询问您访问令牌的各种权限。基本上,这些权限定义了您可以使用此令牌通过Graph API执行的所有操作。选中您需要的所有权限旁边的复选框,其中一个权限将更新您的状态。
    现在继续安装facepy模块。最好的方法是使用pip安装。
    在此之后,在任何.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。你应该在这里看到
    你想要的\u状态\u更新\u
    发布到你的facebook个人资料中

    接下来,在你的facebook页面上做同样的事情:

    除了生成您的访问令牌之外,过程几乎完全相同。
    现在,您不能使用相同的访问令牌发布到您的facebook页面。您需要生成一个新的API,这对于Graph API新手来说可能有点棘手。以下是您需要做的:

    转到相同的developers.facebook.com/tools/explorer页面

    找到显示“Graph API Explorer”的下拉列表并单击它。从下拉列表中,选择要发布更新的页面。为此页生成新的访问令牌。过程描述如下:。不要忘记在“扩展权限”选项卡中检查“管理页面”权限

    现在,在与前面使用的代码相同的代码中使用此令牌并运行它

    转到你的facebook页面。您应该
    将所需的\u状态\u更新发布到您的页面


    希望这有帮助

    如果您有一个类似于file_get_contents的函数,并且知道如何使用curl,我可以一步一步地告诉您如何使用curl。因为我不是python高手,我不能给你确切的代码。如果你有了一个开始,与FB合作其实很容易。谢谢你的片段。我确实试过这个片段。我遇到的问题是让OAuth正常工作。似乎有一个OAuth和OAuth2包,其中OAuth2是较新的包。除了包中已经存在过时示例的问题(当包的名称为OAuth2时,它们从OAuth导入OAuth…),提供的示例对于这样一个简单的任务来说似乎过于复杂(165行…尽管其中一部分是注释)。无法将有效的oauth_访问_
    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')
    
    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"})
    
    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')