Frage

Ich versuche, eine Cron -Aufgabe festzulegen, um Updates für eine Facebook -Anwendung zu lesen. Ich habe den Benutzer aufgefordert, Offline -Zugriffsberechtigungen zu gewähren, und ich habe den Session_Key im DB gespeichert.

Ich bräste ein neues Facebook -Objekt und neben der API und dem geheimen Schlüssel verwende ich auch den Session_key (zuvor in DB gespeichert) und die FB -UID. Wenn ich versuche, das Auth -Token zu erstellen oder einen API -Anruf durchzuführen, erhalte ich einen Fehler 104: Falsche Signatur

Irgendwelche Ideen, Erfahrung, Hinweise?

War es hilfreich?

Lösung

Ich habe gerade eine geschrieben Blog-Eintrag Über meine Suche nach etwas Ähnlichem - muss ein Python Cron -Skript schreiben. Folgendes habe ich mir ausgedacht:

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

Andere Tipps

Ich hatte das gleiche Problem, bei dem der angezeigte Fehler war:

"Facebook.FacebookError: Fehler 104: Falsche Signatur"

Setzen Sie einfach Ihre App Secret_key zurück und ändere den Code entsprechend, und das Problem beheben das Problem.

Prost!

Ich habe noch nie Pyfacebook verwendet. Oder versucht, Sitzungen auf diese Weise wieder aufzunehmen. Aber ich würde mir vorstellen, nur aufzubewahren session_key und uid ist nicht genug. Es gibt auch andere Parameter und einen Signaturparam, der basierend auf allen berechnet wird fb_* Parameter. Möglicherweise müssen Sie sie möglicherweise alle aufbewahren.

Trotzdem arbeiten sie möglicherweise nur für 20-30 Minuten, wenn Sie Pech haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top