代码之家  ›  专栏  ›  技术社区  ›  PanosJee

pyfacebook无限会话

  •  2
  • PanosJee  · 技术社区  · 15 年前

    我正试图设置一个cron任务来读取Facebook应用程序的更新。我已提示用户授予脱机访问权限,并已将会话密钥存储在数据库中。

    我正在创建一个新的facebook对象,除了API和密钥之外,我还使用会话密钥(以前存储在db中)和fb uid。当我试图创建身份验证令牌或执行API调用时,我得到一个错误104:签名不正确

    有什么想法,经验,提示吗?

    3 回复  |  直到 13 年前
        1
  •  2
  •   ae35unit    15 年前

    我刚写了一篇 blog entry 关于我搜索类似的东西-需要编写一个python cron脚本。我想到的是:

    #!/usr/bin/python
    import os, sys, optparse, time, json
    import facebook
    
    ##
    
    USER_SESSION_FILE = os.path.expanduser('fb-user.session')
    APP_KEY_FILE = os.path.expanduser('fb-app.keys')
    
    ##
    
    def main():
        app_keys = open(APP_KEY_FILE).readlines()
        fb_api = facebook.Facebook(api_key=app_keys[0].strip(), secret_key=app_keys[1].strip())
        opts, args = parse_options()
        if args == ['init']:
            init(fb_api)
            return
        session = json.load(open(USER_SESSION_FILE))
        fb_api.uid = session['uid']
        fb_api.secret = session['secret']
        fb_api.session_key = session['session_key']
    
        fb_api.stream.publish(message="test from PyFacebook")
    
    
    def init(fb_api):
        fb_api.auth.createToken()
    
        sys.stdout.write('Opening web page to add application (press ENTER when done)...')
        sys.stdout.flush()
        fb_api.login()
        raw_input()
    
        sys.stdout.write('Asking for offline access now...')
        sys.stdout.flush()
        fb_api.request_extended_permission('offline_access')
        raw_input()
    
        sys.stdout.write('And, finally, asking for permission to publish')
        sys.stdout.flush()
        fb_api.request_extended_permission('publish_stream')
        raw_input()
    
        fb_api.auth.getSession()
    
        if fb_api.session_key_expires != 0:
            print """We were granted a temporary key; please wait a minute and run `%s init` again.""" % (sys.argv[0],)
        else:
            if not os.path.exists(USER_SESSION_FILE):
                # Only set restrictive permissions when creating the file
                # ourselves.
                open(USER_SESSION_FILE, 'w').close()
                os.chmod(USER_SESSION_FILE, 0600)
            json.dump({
                       'uid': fb_api.uid,
                       'secret': fb_api.secret,
                       'session_key': fb_api.session_key,
                       },
                       open(USER_SESSION_FILE, 'w'),
                       sort_keys=True,
                       indent=4)
    
    
    def parse_options():
        p = optparse.OptionParser()
        return p.parse_args()
    
    
    if __name__ == '__main__':
        sys.exit(main())
    
        2
  •  1
  •   Perception    13 年前

    我遇到了同样的问题,显示的错误是:

    “facebook.facebook错误:错误104:签名不正确”

    只需重置应用程序密钥,并对代码进行相应更改,即可解决问题。

    干杯!

        3
  •  0
  •   jimeh    15 年前

    我从来没有用过pyfacebook。或者尝试以这种方式恢复会话。但我可以想象只是储存 session_key uid 是不够的。还有其他参数,以及基于所有 fb_* 帕拉姆斯所以你可能需要把它们全部储存起来。

    但即便如此,如果你不走运的话,他们可能只工作20-30分钟。

    推荐文章