Как создать поисковый запрос в Apify для переменной с помощью Google App Script - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь изменить поисковый запрос в Apify Google Search Scraper с помощью Google App Script, сделав поисковый запрос переменной. https://apify.com/apify/google-search-scraper

Я пытаюсь понять, могу ли я ссылаться на него по его коду. https://github.com/apifytech/actor-google-search-scraper/blob/master/src/main.js

Я получаю это

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" type="text/css" class="__meteor-css__" href="https://cdn.apify.com/35dedb64425e459215b6d9b580601d18eccb1d29.css?meteor_css_resource=true">
<meta charset="utf-8" />
    <title>My Apify</title>
    <meta name="description" content="Apify (formerly Apifier) is the world’s most advanced web scraping and automation platform. Turn any website into an API in a few minutes." />
    <meta name="copyright" content="Copyright&copy; 2018 Apify Technologies s.r.o. All rights reserved." />
    <meta name="keywords" content="web scraper, web crawler, data extraction, API" />
    <meta name="robots" content="index, follow" />
    <meta name="referrer" content="origin" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />

    <meta property="og:title" content="Apify - The web scraping and automation platform" />
    <meta property="og:site_name" content="Apify" />
    <meta property="og:url" content="https://apify.com" />
    <meta property="og:type" content="website" />
    <meta property="og:description" content="Apify (formerly Apifier) is the world’s most advanced web scraping and automation platform. Turn any website into an API in a few minutes." />
    <meta property="fb:app_id" content="1636933253245869" />
    <meta property="og:image" content="https://apify.com/img/og-image.png" />
    <meta property="og:image:width" content="1200" />
    <meta property="og:image:height" content="630" />
    <meta property="og:image" content="https://apify.com/img/og-image-square.png?v=2">
    <meta property="og:image:width" content="1000" />
    <meta property="og:image:height" content="1000" />

    <link rel="icon" type="image/svg+xml" href="https://apify.com/img/favicon.svg" sizes="any" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-128x128.png" sizes="128x128" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-96x96.png" sizes="96x96" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-64x64.png" sizes="64x64" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-48x48.png" sizes="48x48" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-32x32.png" sizes="32x32" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-16x16.png" sizes="16x16" />
    <link rel="icon" type="image/x-icon" href="https://apify.com/favicon.ico" sizes="16x16 32x32 48x48 64x64" />
    <link rel="apple-touch-icon" href="https://apify.com/img/apple-touch-icon-180x180.png" sizes="180x180" />
    <script type="text/javascript" defer id="ie-check-script">
        var userAgent = navigator.userAgent.toUpperCase();
        // IE 11 uses user agent containing Trident as browser identifier, while IE bellow 11 has MSIE as browser identifier
        var browserIsIE = userAgent.indexOf('TRIDENT/') != -1 || userAgent.indexOf('MSIE') != -1;
        // If browser is detected as IE we show warning instead of document body, otherwise we remove this script
        if (browserIsIE) {
            var chromeLink = '<a href="https://www.google.com/chrome/">Google Chrome</a>';
            var firefoxLink = '<a href="https://www.mozilla.org/cs/firefox/new/">Mozilla Firefox</a>';
            var edgeLink = '<a href="https://www.microsoft.com/en-us/windows/microsoft-edge">Microsoft Edge</a>';
            var safariLink = '<a href="https://www.apple.com/safari/">Apple Safari</a>';
            var warningStyles = 'display: inline-block; margin: 10px; padding: 25px; border: 1px solid rgb(255, 200, 200); border-radius: 4px; font-size: 16px; background-color: rgb(255, 240, 240);';

            var message = '<div style="text-align:center;"><div style="'+warningStyles+'">We are sorry, but your browser is currently not supported by our platform.<br />'
                +'Please download one of the supported browsers: '+chromeLink+', '+firefoxLink+', '+edgeLink+' or '+safariLink+'.</div></div>';
            var newBody = document.createElement('body');
            newBody.innerHTML = message;
            document.body = newBody;
        } else {
            var thisScript = document.querySelector('#ie-check-script');
            thisScript.parentElement.removeChild(thisScript);
        }
    </script>

</head>
<body>
  <script type="text/javascript">__meteor_runtime_config__ = JSON.parse(decodeURIComponent("%7B%22meteorRelease%22%3A%22METEOR%401.10.1%22%2C%22gitCommitHash%22%3A%223a3adab260deebeece444a11c4a79a49bd6b60e5%22%2C%22meteorEnv%22%3A%7B%22NODE_ENV%22%3A%22production%22%2C%22TEST_METADATA%22%3A%22%7B%7D%22%7D%2C%22PUBLIC_SETTINGS%22%3A%7B%22sentryDsn%22%3A%22https%3A%2F%2Fb61d4f03051b49e4ac4162e9e14314e8%40sentry.io%2F1494973%22%2C%22sentryEnv%22%3A%22prod%22%2C%22webScraperActorId%22%3A%22moJRLRc85AitArpNN%22%2C%22puppeteerScraperActorId%22%3A%22YJCnS9qogi9XxDgLB%22%2C%22legacyPhantomjsCrawlerActorId%22%3A%22YPh5JENjSSR6vBf2E%22%2C%22analyticsSettings%22%3A%7B%22Google%20Analytics%22%3A%7B%22trackingId%22%3A%22UA-67003981-5%22%7D%2C%22GoogleTagManager%22%3A%22GTM-MNGXGGB%22%2C%22OLD-Mixpanel%22%3A%7B%22token%22%3A%22b7bc52869761789650547589c1c97344%22%2C%22people%22%3Atrue%7D%7D%2C%22intercom%22%3A%7B%22id%22%3A%22kod1r788%22%2C%22allowAnonymous%22%3Atrue%7D%2C%22rewriteApiUrl%22%3A%7B%22from%22%3A%22https%3A%2F%2Fmy.apify.com%2Fapi%2F%22%2C%22to%22%3A%22https%3A%2F%2Fapi.apify.com%2F%22%7D%2C%22apiServerUrl%22%3A%22https%3A%2F%2Fapi.apify.com%22%2C%22cdnPrefix%22%3A%22https%3A%2F%2Fcdn.apify.com%22%2C%22staticWebUrl%22%3A%22https%3A%2F%2Fapify.com%22%2C%22docsUrl%22%3A%22https%3A%2F%2Fdocs.apify.com%22%2C%22cookieDomain%22%3A%22apify.com%22%2C%22cookieNames%22%3A%7B%22userId%22%3A%22ApifyProdUserId%22%2C%22user%22%3A%22ApifyProdUser%22%7D%2C%22superProxy%22%3A%7B%22hostname%22%3A%22proxy.apify.com%22%2C%22port%22%3A%228000%22%2C%22statusPageUrl%22%3A%22http%3A%2F%2Fproxy.apify.com%22%2C%22googleSerpProxyGroupId%22%3A%22GOOGLESERP%22%7D%2C%22conductor%22%3A%7B%22hostname%22%3A%22runs.apify.net%22%2C%22port%22%3A80%7D%2C%22appBanner%22%3Anull%2C%22userUploadedFilesS3BucketName%22%3A%22apify-uploads-prod%22%2C%22theaterServerMemoryMbytes%22%3A65536%2C%22imageProxyOptions%22%3A%7B%22hmacKey%22%3A%22BUsn3bQLa6wtN9iyQs64at3b%22%2C%22domain%22%3A%22apifyusercontent.com%22%7D%2C%22mixpanelToken%22%3A%226706f12b3a8942be188202d48458aa5b%22%2C%22enableClientDebugLogs%22%3Afalse%7D%2C%22ROOT_URL%22%3A%22https%3A%2F%2Fmy.apify.com%22%2C%22ROOT_URL_PATH_PREFIX%22%3A%22%22%2C%22accountsConfigCalled%22%3Atrue%2C%22autoupdate%22%3A%7B%22versions%22%3A%7B%22web.browser%22%3A%7B%22version%22%3A%2245d4d39e1c0c5679475d46bdb28c75d4b662941f%22%2C%22versionRefreshable%22%3A%2257063c4cf996485c3d1c14b0fc943ec069c52a98%22%2C%22versionNonRefreshable%22%3A%22053bcfd91a068917fd9fbe891cd9c3feb0f0bffb%22%7D%2C%22web.browser.legacy%22%3A%7B%22version%22%3A%223757fa1060d2a68657832aac83619ffa2113a97b%22%2C%22versionRefreshable%22%3A%2257063c4cf996485c3d1c14b0fc943ec069c52a98%22%2C%22versionNonRefreshable%22%3A%22897380d0290904c3f33ff3960c3cd9ae92a38a0c%22%7D%7D%2C%22autoupdateVersion%22%3Anull%2C%22autoupdateVersionRefreshable%22%3Anull%2C%22autoupdateVersionCordova%22%3Anull%2C%22appId%22%3A%225v8kbc7bvh2d1uwv25j%22%7D%2C%22appId%22%3A%225v8kbc7bvh2d1uwv25j%22%2C%22isModern%22%3Afalse%7D"))</script>

  <script type="text/javascript" src="https://cdn.apify.com/280c18e7fd3d10ff3f09510877315f175acff7a7.js?meteor_js_resource=true"></script>


</body>
</html>
Мой код
function runSearch() {
  var formData = {
    initialRequests : 'banks in phoenix',
  };
  var options = {
    'method' : 'post',
    'payload' : formData
  };
  const test = UrlFetchApp.fetch('https://my.apify.com/tasks/<my-task-id>', options);
  Logger.log(test);
}

Что мне нужно изменить?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Есть много вещей, которые вам нужно изменить.

1) Вы используете свой личный зарегистрированный URL - https://my.apify.com/tasks/xLojrg7GEYkQbGBBL. Вместо этого вам нужно проверить вкладку API на правильном URL-адресе, чтобы вызвать эту задачу через API - https://api.apify.com/v2/actor-tasks/xLojrg7GEYkQbGBBL/runs?token=YOUR_TOKEN (поменяйте маркер вашего API Apify на вкладке учетной записи)

2) Поле, в котором вы передаете свои запросы, называется не initialRequests, а queries. Проверьте свою задачу, переключите свой ввод на JSON, и вы увидите, как поля называются в JSON.

3) К сожалению, сейчас Apify не позволяет получать данные набора данных (как из Google Search Scraper) с помощью одного вызова API для более длительных запусков. Прочтите эту статью , в которой объясняется, как интегрироваться через API.

1 голос
/ 02 апреля 2020
  1. Получить текст содержимого HTTPResponse.
Изменить:
Logger.log(test);
на:
Logger.log(test.getContentText());

По UrlFetchApp документам fetch() Метод возвращает объект типа: HTTPResponse. Вы хотите получить текст содержимого, применив метод getContentText() к объекту HTTPResponse. Следующим образом.

// Make a GET request and log the returned content.
var response = UrlFetchApp.fetch('http://www.google.com/');
Logger.log(response.getContentText());
Изменить параметр запроса, чтобы он соответствовал документации. Измените:
initialRequests : 'banks in phoenix',
на:
queries: 'banks in phoenix',

Посмотрите здесь документацию по Скребку результатов поиска Google.

В следующей таблице показана спецификация полей INPUT актера, как определено его входной схемой. Эти поля могут быть [...] предоставлены в объекте JSON при запуске актера с использованием API. Подробнее читайте в документах.

...

Поисковые запросы или URL

Поисковые запросы Google (например, еда в Нью-Йорке C) и / или полные URL (например, https://www.google.com/search?q=food+NYC).

Введите один элемент в строке.

Необязательно Тип: Строка

JSON пример
"queries": "Hotels in NYC
  Restaurants in NYC
  https://www.google.com/search?q=restaurants+in+NYC"
Итак, подведем итог, попробуйте изменить ваш код следующим образом.
const runSearch = () => {
  const formData = {
    queries: 'banks in phoenix',
  };
  const options = {
    method: 'post',
    payload: formData,
  };
  const test = UrlFetchApp.fetch(
    'https://my.apify.com/tasks/<my-task-id>',
    options,
  );
  const response = test.getContentText();
  Logger.log( 'response\n%s', response, );
}
...