Информация о книге Goodreads API
Попытка выполнить поиск в API Goodreads для получения информации о книге. В то же время я пытаюсь преобразовать данные из XML в JSON. Я получаю эту ошибку при поиске книги
В запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Источник ' http://localhost:3000/', следовательно, не имеет доступа.
и предупреждение
Блокировка перекрестного чтения (CORB) заблокировала ответ перекрестного происхождения https://www.goodreads.com/search/index.xml?key=PL6saHk8cIrLeeLG3eylg&q=halo с приложением MIME-типа /xml. См. https://www.chromestatus.com/feature/5629709824032768 для получения дополнительной информации.
Я установил пакет xml2js и поместил его в свою функцию следующим образом
searchBooks = async (e) => {
e.preventDefault();
const search = this.state.search;
try {
let res = await axios.get(
`https://www.goodreads.com/search/index.xml?key=PL6saHk8cIrLeeLG3eylg&q=${search}`
);
let xml = res.data;
parseString(xml, (error, res) => {
this.setState({
books: res.data
});
});
} catch (error) {
this.setState({ error });
}
console.log(this.state.books);
};
Что мне нужно исправить?
1 ответ
GoodReads API не позволяет вам вызывать API из front-end. (Обратитесь к этому вопросу форума GoodReads). Вам нужно сделать запрос API от серверной службы (например, сервера nodejs) или пройти через прокси.
Настройка прокси может быть трудной, поэтому вы можете вызывать API с помощью клиента YQL (языка запросов Yahoo).
Итак, вот обходной путь.
⚠️ ВНИМАНИЕ: Это не очень хорошая практика, но она написана здесь для академических целей. Пожалуйста, подумайте о том, чтобы настроить свой собственный серверный сервис для вызова API.
Прямой вызов YQL может быть проблематичным, поэтому вы можете использовать другую библиотеку, proxyfy-url, которая дает вам прокси-URL YQL.
var proxify = require('proxify-url');
...
get proxyfiedUrl() {
// GoodReads API returns result in "XML" format.
// "XML" is the "input" format fed into YQL
let proxyUrl = proxify(this.url, { inputFormat: 'xml' });
return proxyUrl;
}
Бесстыдная вилка!
Если вы хотите больше информации, я написал о той же проблеме в моем блоге
Как вызвать GoodReads API с помощью YQL