【问题标题】:Book info Goodreads API图书信息 Goodreads API
【发布时间】:2018-12-30 03:51:45
【问题描述】:

尝试在 Goodreads API 上搜索图书信息。同时我正在尝试将数据从 xml 转换为 json。搜索书籍时出现此错误

请求的资源上不存在“Access-Control-Allow-Origin”标头。 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);
};

我需要解决什么问题?

【问题讨论】:

    标签: reactjs xml-to-json


    【解决方案1】:

    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

    【讨论】:

    • 当时的解决方案很好,但现在阅读此文的人请注意,雅虎已停用 YQL 服务,因此很遗憾它不再有效。
    • @Poc275 感谢您的更新。对于快速而肮脏的解决方案,可以使用cors-anywhere.herokuapp.com 或构建一个简单的 Node.JS 后端并将其部署在 heroku 或 zeit 上。这就是我现在一直在做的解决方法。
    猜你喜欢
    • 2022-01-08
    • 2018-01-03
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多