1

Facebook からグラフ ファイルを取得するには、https ://github.com/andrewiggins/Facebook-Friend-Graph というコードを使用します。

実際、それは長い間素晴らしい仕事をしてきました。しかし、突然、セルフパスが機能しなくなりましたか? self.path が空のようです。

編集: さて、いくつかの調査の結果、Facebook が実際に URL を返す方法を変更したことがわかりました。

彼らは次のような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 またはエラーを抽出します """ self.send_response(200) self.send_header('Content-type', ' text/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 に突然 # が含まれるため、セルフ パスは URL からアクセストークンを取得しません。

4

2 に答える 2

0

以下のこのコードが問題の原因である可能性があると思います(accesstoken.py の52行目

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

Facebook グラフについては何も知りませんが、上記のコードは、「#」のすべてのインスタンスが「?」に置き換えられることを意味します。URLで。したがって、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 に答える