我想設置一個cron任務來讀取Facebook應用程序的更新。我已經提示用戶授予離線訪問權限,並且我已將會話密鑰存儲在數據庫中。PyFacebook無限會話
我正在創建一個新的Facebook對象,除了api和密鑰之外,我還使用session_key(以前存儲在db中)和fb uid。當我嘗試創建身份驗證令牌或執行API調用時,出現錯誤104:錯誤簽名
任何想法,經驗和提示?
我想設置一個cron任務來讀取Facebook應用程序的更新。我已經提示用戶授予離線訪問權限,並且我已將會話密鑰存儲在數據庫中。PyFacebook無限會話
我正在創建一個新的Facebook對象,除了api和密鑰之外,我還使用session_key(以前存儲在db中)和fb uid。當我嘗試創建身份驗證令牌或執行API調用時,出現錯誤104:錯誤簽名
任何想法,經驗和提示?
我剛剛寫了一個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())
我從來沒有使用PyFacebook。或試圖以這種方式恢復會話。但我想像僅存儲session_key
和uid
是不夠的。還有其他參數,以及基於所有fb_*
參數計算的簽名參數。所以你可能需要存儲所有這些。
即使如此,如果你不幸運,他們也許只能工作20-30分鐘。
我面對其中,顯示的錯誤同樣的問題是:
"facebook.FacebookError: Error 104: Incorrect signature"
只是重置您的APP SECRET_KEY並做出相應的代碼中的變化和sgould解決問題。
乾杯!
這是一個無限的會話,用戶已授予offline_access,因此它的工作原理 – PanosJee 2010-01-26 15:17:52