https://www.goodreads.com/api/index содержит пример, как вызвать json api с помощью js
<script type="text/javascript">
function myCallback(result) {
alert('nb of reviews for book: ' + result.reviews.length);
}
var scriptTag = document.createElement('script');
scriptTag.src = "https://www.goodreads.com/book/isbn/0441172717?callback=myCallback&format=json&user_id=123456789";
document.getElementsByTagName('head')[0].appendChild(scriptTag);
</script>
Честно говоря, мне так странно, что URL может содержать имя функции обратного вызова. В чем здесь секрет? Любой соответствующий документ JS?
Во всяком случае, это пример JavaScript. Если я хочу использовать requests
Python, чтобы сделать ту же работу. Как и что мне делать?
Я полностью застрял здесь.
Спасибо за совет.
Этот тип вызова действительно используется только из браузера, поэтому он не будет применяться к запросу Python.
Это пример запроса JSONP, который представляет собой способ сделать запрос кросс-источника, например, ваше приложение, обслуживаемое на foobar.com
хочет сделать запрос POST для example.com
. Во многих (но не во всех) случаях такие запросы будут блокироваться вашим браузером по соображениям безопасности.
В этом случае результат запроса передается обратному вызову, который затем выполняется браузером.
Связанные вопросы задавались ранее, есть хорошее объяснение JSONP--, как это работает, и почему вы хотели бы использовать его здесь: qaru.site/questions/529/...
Если вы используете requests
вас не будет проблем с перекрестным происхождением, поскольку вы будете делать этот запрос со стороны сервера. Я не знаком с API Goodreads, но подозреваю, что у них есть версия конечной точки, которую можно вызывать с сервера.
ПРИМЕЧАНИЕ. API Goodreads довольно странный и недостаточно документированный. Я поиграл с этим и смог заставить его работать, используя requests
, но, к user_id=...
вам нужно отправить свой ключ API в качестве key=...
не user_id=...
JSONP
, спасибо так много. Хотя никогда не использовался раньше и, надеюсь, не нужно использовать в будущем. Кстати, если вы передадитеkey
, он будет работать и вернет толькоxml
. Если вы передаетеuser_id
дляjson
, он работает только для браузера, но не из запроса Python