图书信息Goodreads API

时间:2018-07-22 14:37:55

标签: reactjs xml-to-json

尝试在Goodreads API上搜索书籍信息。同时,我试图将数据从xml转换为json。搜索书籍

时出现此错误
  

所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://localhost:3000”。

和警告

  

跨域读取阻止(CORB)阻止了MIME类型为application / xml的跨域响应https://www.goodreads.com/search/index.xml?key=PL6saHk8cIrLeeLG3eylg&q=halo。有关更多详细信息,请参见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 个答案:

答案 0 :(得分:0)

GoodReads API不允许您从前端进行API调用。 (请参阅此GoodReads forum question)。 您需要从后端服务(例如,nodejs服务器)发出API请求,或通过代理。

设置代理可能很麻烦,因此您可以使用YQL(雅虎的查询语言)客户端来调用API。

这是解决方法。

⚠️警告:这不是一个好习惯,但出于学术目的请在此处编写。 请考虑设置自己的后端服务以调用API。

直接调用YQL可能很麻烦,因此您可以使用另一个名为proxyfy-url的库,它为您提供了一个近似的YQL URL。

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;
}

无耻的插头!
如果您想了解更多信息,我在我的博客上写了关于同一问题的信息
How to call GoodReads API using YQL