2015-09-15 3 views
0

У меня есть простой код питона, который идет в this link и получающий свои данные. Вот кодНевозможно получить данные из Strawpoll API

import urllib, json 
url = "http://maps.googleapis.com/maps/api/geocode/json?address=googleplex&sensor=false" 
htmlfile = urllib.urlopen(url) 
data = json.loads(htmlfile.read()) 
print data 

Выполнение кода возвращает данные с URL-адреса.

{u'status': u'ZERO_RESULTS', u'results': []} 

Я хотел бы сделать то же самое, но для Strawpoll. Прочитав их API documentation, это, по-видимому, та же самая формула. Переходя к ссылке на strawpoll для тестирования, она показывает мне ту же структуру контента, что и ссылка google, показанная выше. В API Documenation указано, что «все ресурсы будут возвращать данные в JSON». Но я не получаю никаких данных, я получаю ошибки. Код точно такой же, но с отредактированным URL-адресом.

import urllib, json 
url = "http://strawpoll.me/api/v2/polls/1/" 
htmlfile = urllib.urlopen(url) 
data = json.loads(htmlfile.read()) 
print data 

Выполнение кода дает мне вид ошибки, я бы разместить изображение, но StackOverflow не позволит мне ...

Последняя ошибка я получаю это «ValueError: Нет объекта JSON не может быть загружен ». Но в документации по API говорилось, что данные возвращаются как JSON.

Удаление json.loads дает мне чистый HTML вместо. Вот код для этого. Опять же, точно так же, но удалил json.loads.

import urllib 
url = "http://strawpoll.me/api/v2/polls/1/" 
htmlfile = urllib.urlopen(url) 
data = htmlfile.read() 
print data 

Что я делаю неправильно?

ответ

0

Я просто побежал ваш код и посмотрел в ответ HTML. Возможно, вы не устанавливаете правильные заголовки HTTP? В нем говорится, что доступ запрещен, но я не уверен, почему это было бы. Я бы рекомендовал использовать requests.

>>> url = "http://strawpoll.me/api/v2/polls/1/" 
>>> import requests 
>>> requests.get(url).json() 
{u'id': 1, u'multi': False, u'votes': [14683, 31165, 5635, 7397], u'options': [u'Sucker punch ', u'Pirates of carribian ', u'Prison logic', u'Witchhunter'], u'title': u'What movie should we watch'} 

Поскольку вы не открывая URL из браузера, это может быть усилие strawpoll.me, чтобы защитить их содержимое от быть Царапины. Фактически, я нашел эту строку в ответе HTML:

<p>The owner of this website (strawpoll.me) has banned your access based on your browser's signature (***).</p> 
+0

Это работает! Спасибо. Может быть, это связано с тем, как Strawpoll настроенном? Хорошо, хорошо. В очередной раз благодарим за помощь! – HappyZombies

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