2

Facebookアプリケーションの更新を読み取るためのcronタスクを設定しようとしています。オフラインアクセス権限を付与するようにユーザーに促し、session_keyをデータベースに保存しました。

私は新しいFacebookオブジェクトを作成しており、APIと秘密鍵に加えて、session_key(以前はdbに格納されていた)とfbuidも使用しています。認証トークンを作成しようとしたり、API呼び出しを実行しようとすると、エラー104:署名が正しくありません

アイデア、経験、ヒントはありますか?

4

3 に答える 3

2

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())
于 2010-02-02T22:18:11.760 に答える
1

表示されたエラーが次のような同じ問題に直面しました。

「facebook.FacebookError: エラー 104: 署名が正しくありません」

APP Secret_key をリセットし、コードに対応する変更を加えるだけで、問題を解決できます。

乾杯!

于 2012-06-13T13:16:47.023 に答える
0

私は PyFacebook を使ったことがありません。または、この方法でセッションを再開しようとしました。session_keyしかし、保管するだけでuidは不十分だと思います。他のパラメーターもあり、すべてのfb_*パラメーターに基づいて計算される署名パラメーターもあります。したがって、それらすべてを保存する必要がある場合があります。

それでも、運が悪いと 20 ~ 30 分しか機能しない場合があります。

于 2010-01-26T15:08:02.657 に答える