Question

Je suis en train de définir une tâche cron pour lire les mises à jour pour une application Facebook. Je l'ai incité l'utilisateur à accorder des autorisations d'accès hors ligne et je dois stocker le session_key dans la db.

Je crearing un nouvel objet Facebook et d'ailleurs api et clé secrète J'utilise aussi le session_key (précédemment stockés dans db) et le uid fb. Quand je suis en train de créer le jeton d'authentification ou de faire un appel API je reçois une erreur 104: signature incorrecte

Toutes les idées, l'expérience, des conseils?

Était-ce utile?

La solution

Je viens d'écrire un au sujet de ma recherche de quelque chose de similaire - besoin d'écrire un script Python cron. Voici ce que je suis venu avec:

#!/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())

Autres conseils

Je fait face au même problème où l'erreur affichée était:

  

"facebook.FacebookError: Erreur 104: signature incorrect"

Il suffit de réinitialiser votre APP secret_key et faire des changements correspondants dans le code et que sgould résoudre le problème.

Vive!

Je ne l'ai jamais utilisé PyFacebook. Ou tenté de reprendre les sessions de cette manière. Mais j'imagine que le stockage session_key et uid ne suffit pas. Il y a d'autres params aussi, et une signature qui param est calculé en fonction de tous les params fb_*. Donc, vous pourriez avoir besoin de stocker tous.

Mais même ainsi, ils pourraient ne travailler pendant 20-30 minutes si vous êtes malchanceux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top