1

我使用此代码:https ://github.com/andrewiggins/Facebook-Friend-Graph从 Facebook 获取图形文件。

实际上,它已经工作了很长时间。但是突然之间,自我路径不再起作用了?在我看来 self.path 是空的。

编辑:好的,经过一些研究,我发现 Facebook 实际上已经改变了他们返回 url 的方式。

他们返回的网址如下: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 中:

def do_GET(self): """此方法在用户登录或取消Facebook认证后从Facebook请求中提取access_token或error """ self.send_response(200) self.send_header('Content-type', '文本/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))

自路径没有从 URL 中获取 accesstoken,因为突然在 url 中有一个 #

4

2 回答 2

0

我猜下面的这段代码可能是问题的原因(accesstoken.py 中的第 52 行

window.location = url.replace("#", "?")

我对 facebook graph 一无所知,但上面的代码意味着“#”的每个实例都被替换为“?” 在网址中。所以现在的 URL 会变成下面这样

http://whateversite:8000/??accesstoken= (notice the consecutive ??)

所以它可能正在创建一个空白查询字符串?

于 2013-10-16T14:57:23.420 回答
0

修复它,从if '?' in self.path

if 'token' in self.path

这样,它会进入 if else 中的最后一个陡峭位置,并将 # 替换为 ""

还将顶部的 javascrit 更改为window.location = url.replace("#", ""),删除了 #

于 2013-10-16T19:50:15.767 回答