Ответ API в браузере отличается от ответа в коде - PullRequest
0 голосов
/ 18 мая 2018

Вот мой код:

async function BuiltWithCall(website) {
    var domainCall = `https://api.builtwith.com/v12/api.json?KEY=${keys.builtWith}&LOOKUP=${website}`;
    var domainRes = await fetch(domainCall);
    console.log(domainRes);
    var keywordCall = `https://api.builtwith.com/kw1/api.json?KEY=${keys.builtWith}&LOOKUP=${website}`;
    var keywordRes = await fetch(keywordCall);
    console.log(keywordRes);
    return await {'domRes': domainRes.json(), 'kwRes': keywordRes.json()};
}

Он берет предоставленный веб-сайт и запускает его через API BuiltWith.Но проблема в ответе.

Response {
    size: 0,
        timeout: 0,
        [Symbol(Body internals)]:
    { body:
        PassThrough {
        _readableState: [Object],
            readable: true,
            domain: null,
            _events: [Object],
            _eventsCount: 7,
            _maxListeners: undefined,
            _writableState: [Object],
            writable: true,
            allowHalfOpen: true,
            _transformState: [Object] },
        disturbed: false,
            error: null },
    [Symbol(Response internals)]:
    { url: 'https://api.builtwith.com/v12/api.json?KEY=key&LOOKUP=hotelscombined.com',
        status: 200,
        statusText: 'OK',
        headers: Headers { [Symbol(map)]: [Object] } } }
Response {
    size: 0,
        timeout: 0,
        [Symbol(Body internals)]:
    { body:
        PassThrough {
        _readableState: [Object],
            readable: true,
            domain: null,
            _events: [Object],
            _eventsCount: 3,
            _maxListeners: undefined,
            _writableState: [Object],
            writable: false,
            allowHalfOpen: true,
            _transformState: [Object] },
        disturbed: false,
            error: null },
    [Symbol(Response internals)]:
    { url: 'https://api.builtwith.com/kw1/api.json?KEY=key&LOOKUP=hotelscombined.com',
        status: 200,
        statusText: 'OK',
        headers: Headers { [Symbol(map)]: [Object] } } }

Так что это прямо здесь не имеет смысла для меня.Поскольку это точно такой же URL, запустите в браузере:

{
    "Keywords": [
        {
            "Domain": "hotelscombined.com",
            "Keywords": [
                "compare",
                "save",
                "cheap",
                "hotel",
                "deal",
                "hotelscombined",
                "search",
                "... More keywords but you get the idea"
            ]
        }
    ],
    "Errors": []
};

Другой ответ на вызов:

{
    "Results": [
        {
            "Result": {
                "IsDB": true,
                "Spend": 609,
                "Paths": [
                    {
                        "FirstIndexed": 1294059600000,
                        "LastIndexed": 1526338800000,
                        "Domain": "builtwith.com",
                        "Url": "",
                        "SubDomain": "",
                        "Technologies": [
                            {
                                "Categories": [
                                    "Edge Delivery Network"
                                ],
                                "IsPremium": "yes",
                                "Name": "Amazon CloudFront",
                                "Description": "Amazon CloudFront delivers your static and streaming content using a global network of edge locations.",
                                "Link": "http://aws.amazon.com/cloudfront/",
                                "Tag": "cdns",
                                "FirstDetected": 1386284400000,
                                "LastDetected": 1526338800000
                            },
                        ]
                    },
                ]
            },
            "Meta": {
                "Vertical": "Technology And Computing",
                "Social": [
                    "http://twitter.com/builtwith",
                    "http://facebook.com/builtwith",
                    "http://linkedin.com/company/builtwith",
                    "http://google.com/+builtwithdotcom"
                ],
                "CompanyName": "BuiltWith",
                "Telephones": [
                    "+61-300-558745",
                    "+1-650-618-3949"
                ],
                "Emails": [
                    "support@builtwith.com"
                ],
                "City": "Sydney",
                "State": "NSW",
                "Postcode": "2000",
                "Country": "AU",
                "Names": [
                    {
                        "Name": "N/A",
                        "Type": 0,
                        "Email": "n/a@builtwith.com"
                    },
                    {
                        "Name": "N/A",
                        "Type": 0,
                        "Email": "n/a@builtwith.com"
                    }
                ],
                "ARank": 22108,
                "QRank": 275921
            },
            "Attributes": {
                "MJRank": 8737,
                "MJTLDRank": 4620,
                "RefSN": 7402,
                "RefIP": 10142,
                "TTFB": 129,
                "Sitemap": 20,
                "GTMTags": 0,
                "QubitTags": 0,
                "TealiumTags": 0,
                "AdobeTags": 0,
                "CDimensions": 0,
                "CGoals": 0,
                "CMetrics": 0,
                "SourceBytes": 0
            },
            "FirstIndexed": 1294059600000,
            "LastIndexed": 1526338800000,
            "Lookup": "builtwith.com"
        }
    ],
    "Errors": []
}

Так что, как вы можете видеть, ответы совершенно разные, и у меня нетидея почему.Тот же метод выборки отлично работает для PageSpeed ​​API, но здесь что-то идет ужасно неправильно.

Вызов PageSpeed:

async function PageSpeedCall(website) {
    var pagespeedCall = `https://www.googleapis.com/pagespeedonline/v4/runPagespeed?url=https://${website}&strategy=mobile&key=${keys.pageSpeed}`;
    // second call
    var results = await fetch(pagespeedCall);
    return await results.json();
}

Что я делаю не так?

1 Ответ

0 голосов
/ 18 мая 2018

domainRes - это объект ответа, а не полезная нагрузка.Вот почему вы видите все вещи в выводе консоли.

Чтобы проанализировать полезную нагрузку как JSON, вам нужно вызвать domainRes.json, что также дает вам обещание, поэтому вы должны ждать его.Вот так.

async function BuiltWithCall(website) {
    var domainCall = `https://api.builtwith.com/v12/api.json?KEY=${keys.builtWith}&LOOKUP=${website}`;
    var domainRes = await fetch(domainCall);
    console.log(domainRes);
    var keywordCall = `https://api.builtwith.com/kw1/api.json?KEY=${keys.builtWith}&LOOKUP=${website}`;
    var keywordRes = await fetch(keywordCall);
    console.log(keywordRes);
    return {'domRes': await domainRes.json(), 'kwRes': await keywordRes.json()};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...