2014-01-22 4 views
6

Сделал себя простым клиентом Instagram, чтобы сделать аутентифицированные запросы своим API. Тем не менее, работает он продолжает бросать следующую ошибкуinstagram.bind.InstagramClientError: невозможно разобрать ответ, недействительно JSON

Traceback (most recent call last): 
    File "request-ig-data.py", line 24, in <module> 
    recent_media = api.user_recent_media(user_id=user_id, count=50) 
    File "/lib/python2.7/site-packages/instagram/bind.py", line 151, in _call 
return method.execute() 
    File "/lib/python2.7/site-packages/instagram/bind.py", line 143, in execute 
content, next = self._do_api_request(url, method, body, headers) 
    File "/lib/python2.7/site-packages/instagram/bind.py", line 99, in _do_api_request 
raise InstagramClientError('Unable to parse response, not valid JSON.') 
instagram.bind.InstagramClientError: Unable to parse response, not valid JSON. 

Итак, ответ не JSON (несмотря на то, что я бы ожидать, что она будет, учитывая, что это doc'd формат réponse Instagram), но почему? Код - довольно простая реализация python-instagram - последовали за их документами и попробовали преобразовать ответ на JSON, но все равно получал такое же ошибочное. Вот код:

from instagram.client import InstagramAPI 
import httplib2 
import json 
import sys 

client_id = '[...]' 
client_secret = '[...]' 
redirect_uri = 'https://mycallback.com' 
scope = '' 
user_id = '1034466' # starbucks 

api = InstagramAPI(client_id=client_id,client_secret=client_secret,redirect_uri=redirect_uri) 
redirect_uri = api.get_authorize_login_url(scope = scope) 

print "Visit this page and authorize access in your browser:\n", redirect_uri 

code = raw_input("Paste in code in query string after redirect: ").strip() 

access_token = api.exchange_code_for_access_token(code) 

print "access token:\n", access_token 

api = InstagramAPI(access_token=access_token) 
recent_media, next = api.user_recent_media(user_id=user_id, count=50) 
for media in recent_media: 
    print media.text 

ответ

2

Выбрано это. api = client.InstagramAPI(access_token=access_token) должен быть api = client.InstagramAPI(access_token=access_token[0]), чтобы передать токен доступа, а не полный объект.

4

Эта линия:

access_token = api.exchange_code_for_access_token(code) 

Лучше положить таким образом:

access_token, user_info = api.exchange_code_for_access_token(code) 

Это расколоть бы из маркера доступа из информации пользователя. Таким образом, вы можете сохранить эту линию так же:

client.InstagramAPI(access_token=access_token) 
+3

Я хотел бы также отметить, я получил такую ​​же ошибку, но понял, что это произошло потому, что я пытался использовать имя пользователя, а не идентификатор пользователя (который может быть получен на основе по имени пользователя с помощью метода user_search: 'user = api.user_search ('username') [0] .id'). – bshur2008

+0

bshur2008 абсолютно прав - я также отправлял имя пользователя, а не идентификатор пользователя – LittleBobbyTables

Смежные вопросы