Python: проверьте, предоставил ли пользователь Facebook доступ к моему приложению. Сбой с ошибкой HTTP 400: неверный запрос

Я пытаюсь определить, предоставил ли пользователь доступ к моему приложению, и если да, то какие у него есть разрешения. Это происходит НЕ во время первоначального процесса регистрации, а позже, когда мне нужно убедиться, что пользователи не удалили разрешения.

Я запускаю следующее:

access_token = "users_access_token"; # saved when user signed up using FB
url = "https://graph.facebook.com/v2.0/me/permissions/?access_token="+access_token
response = urllib2.urlopen(url)

Если пользователь предоставил доступ, ответ представляет собой строку json с разрешениями. Это то же самое, что я вижу, если я скопирую и вставлю URL-адрес в браузер.

Однако, если пользователь НЕ предоставил доступ (т.е. удалил мое приложение после первоначальной регистрации), я получаю сообщение об ошибке: «Ошибка HTTP 400: неверный запрос». Но если я скопирую и вставлю URL-адрес в свой браузер, я получу строку json с правильным сообщением об ошибке: «Пользователь не авторизовал приложение ...» (Если я введу неправильный access_token в URL-адрес браузера, я все равно получаю правильное сообщение об ошибке «Неверный токен доступа»)

Итак, как я могу изящно проверить, отозвал ли пользователь доступ к моему приложению? Я не хочу получать исключение, а скорее правильный ответ об ошибке FB. Кажется, это должно быть возможно, так как это работает, когда я копирую и вставляю URL-адрес в браузер.

Обратите внимание, что я вообще не меняю свой код. Единственное, что меняется, это то, предоставил ли пользователь доступ к приложению (так что это не значит, что URL-адрес искажен).


person user984003    schedule 25.04.2015    source источник


Ответы (1)


HTTPError сам содержит необходимую информацию, просто сделайте это:

try:
    response = urllib2.urlopen(url)
except urllib2.HTTPError as e:
    print(e.read())

Затем он распечатает сообщение об ошибке:

{"error":{"message":"Invalid OAuth access token.","type":"OAuthException","code":190}}
person skyline75489    schedule 25.04.2015