0
我试图使用python建立一个Facebook的API客户端,代码如下:Facebook的API非交互授权/登录
import os
import urllib2
import urllib
import cookielib
import hashlib
import json
USER = ''
PASS = ''
LOGIN = 'http://www.facebook.com/login.php?login_attempt=1'
HOST = 'http://api.facebook.com/restserver.php'
API_KEY = 'eca5c767f0e5b65942419574374c34a4'
SECRET_KEY = 'e2aab4000e08f4199f3ca6793ab4f02c'
def getSig(params, secret):
sigStr = ''
for k in sorted(params.keys()):
sigStr += k + '=' + params[k]
sigStr += secret
return hashlib.md5(sigStr).hexdigest()
def call(host, params):
basicParams = {'api_key': API_KEY,
'format': 'JSON',
'v': '1.0'}
basicParams.update(params)
basicParams['sig'] = getSig(basicParams, SECRET_KEY)
finalParams = urllib.urlencode(basicParams)
cj = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), urllib2.HTTPRedirectHandler)
urllib2.install_opener(opener)
request = urllib2.Request(host)
request.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100402 Ubuntu/9.10 (karmic) Firefox/3.5.9')
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
h = urllib2.urlopen(request, finalParams)
return h.read()
def getToken():
paramsRaw = {'method': 'Auth.createToken',
'api_key': API_KEY,
}
ret = call(HOST, paramsRaw)
return json.loads(ret)
def login(user, password, token):
# post login form
paramsRaw = {
'auth_token': token,
'email': user,
'pass': password,
}
call(LOGIN, paramsRaw)
def getSession(token):
paramsRaw = {'method': 'Auth.getSession',
'auth_token': token
}
print call(HOST, paramsRaw)
def main():
token = getToken()
login(USER, PASS, token)
getSession(token)
main()
我基本上接收Auth.createToken令牌,与用户发布它/通过facebook.com/login.php并发送相同的令牌Auth.getSession(如此处所述:http://wiki.developers.facebook.com/index.php/Auth.createToken) 但getSession返回错误100(“无效参数”),我做错了什么?网络上有类似程序的例子吗?
你的意思是在POSTing到login.php时?我应该通过哪些方法参数? Auth.getSession/Auth.createToken的文档明确指出,它们不需要call_id(http://wiki.developers.facebook.com/index.php/Auth.createToken,http://wiki.developers.facebook。 com/index.php/Auth.getSession) – Juliusz 2010-04-20 16:31:19
只注意到你不使用FB连接。你正在实施一个桌面应用程序?您仍需要将用户重定向到网页才能登录(http://wiki.developers.facebook.com/index.php/Authorization_and_Authentication_for_Desktop_Applications)。否则,您应该使用Facebook Connect(http://wiki.developers.facebook.com/index.php/Authorization_and_Authentication_for_Desktop_Applications)。以编程方式记录用户不是一件好事。你可以做一次,如果你想以后再存储令牌 - 但你必须至少做一次网络登录。 – rlotun 2010-04-20 18:06:50
是的,这就是问题的要点 - 以编程方式记录用户并获取API的会话密钥。它应该是一个服务器端处理程序,并且我想要控制日志记录过程(没有浏览器启动或直接用户浏览器交互)。 所以 - 为什么这是一个坏主意,我该怎么做? – Juliusz 2010-04-20 19:02:22