我使用以下代码:https://github.com/andrewiggins/Facebook-Friend-Graph 从Facebook获取图形文件。
实际上,它已经工作了很长时间。但是突然之间,自我之路不再起作用了?在我看来,self.path是空的。
编辑:好的,经过一些研究,我发现Facebook实际上已经改变了他们返回网址的方式。
他们返回的网址如下: http://xxxxxx:8000/?accesstoken=
但现在他们变成了:http://xxxxxx:8000/?#accesstoken=
现在 self.path 不可用,因为它不理解 ?#
有什么提示吗?
它在 accsesstoken.py 失败,我收到以下错误:
127.0.0.1 - - [16/Oct/2013 11:21:36] "GET /? HTTP/1.1" 200 -
Traceback (most recent call last):
File "/Users/Eskil/Downloads/Facebook-Friend-Graph-master/src/2.7/main.py", line 49, in main
access_token = get_access_token(app_id)
File "/Users/Eskil/Downloads/Facebook-Friend-Graph-master/src/2.7/accesstoken.py", line 122, in get_access_token
raise Exception(httpd.error)
Exception: unknown error: {}
因此,失败的代码在 accesstoken.py:
定义do_GET(个体经营): ""此方法从Facebook中提取access_token或错误 在用户登录或取消 Facebook 身份验证后请求 """ self.send_response(200) self.send_header("内容类型"、"文本/html") self.end_headers()
self.server.access_token = ""
self.server.error = ""
if '?' in self.path:
query = urlparse.parse_qs(urlparse.urlparse(self.path)[4])
if query.has_key('access_token'):
self.server.access_token = query['access_token'][0]
self.wfile.write(html % ('Thank You!', 'You may now close this tab.'))
else:
self.server.error = query.get('error_reason', ['unknown error: %s' % str(query)])[0]
if self.server.error == 'user_denied':
self.wfile.write(html % ('Error', 'You must login to Facebook for the software to work.<br/>' +
'This software does not store any user names or passwords.'))
else:
self.wfile.write(html % ('Error', 'Sorry! An error has occurred. Please try again.'))
else:
self.wfile.write(html % ('Redirect', javascript_redirect))
self 路径不会从 URL 获取访问令牌,因为 url 中突然有一个 #
我想下面的这段代码可能是问题的原因(第 52 行 accesstoken.py)
window.location = url.replace("#", "?")
我对Facebook图表一无所知,但上面的代码意味着URL中的"#"的每个实例都替换为"?"。所以现在的URL将变成以下内容
http://whateversite:8000/??accesstoken= (notice the consecutive ??)
所以它正在创建一个空白的查询字符串?
修复了它,从if '?' in self.path
更改
到if 'token' in self.path
这样它就会进入 if else 中的最后一个陡峭点,并将 # 替换为 "
还将顶部的javascrit更改为window.location = url.replace("#", "")
,删除了#