Perl: WWW::Google::CustomSearch: Отсутствуют обязательные аргументы?

(Обновление 2024-03-01: следующий вопрос ввел в заблуждение. Об этой ошибке уже было сообщено разработчику, и я нашел обходной путь. См. комментарии)

Я пишу сценарий для запуска API пользовательского поиска Google для получения результатов поиска. Когда я запускаю следующий скрипт, мне удается получить результат.

#! /bin/perl

# minisearch.pl

use strict;
use warnings;
use WWW::Google::CustomSearch;
use Data::Dumper;
use feature qw(say);

my $engine  = WWW::Google::CustomSearch->new(
    api_key => 'my api key',
    cx => 'my search engine ID',
    dateRestrict => 'm3',
    #siteSearch => 'accesswire.com',
    #siteSearchFilter => 'i'
    );

my $result  = $engine->search('mobile+pc+linux');

exit unless defined $result;

say "kind: ", $result->kind;
say "totalResults: ", $result->totalResults;
say "formattedTotalResults: ", $result->formattedTotalResults;
say "formattedSearchTime: ", $result->formattedSearchTime;
say "searchTime: ", $result->searchTime;
say "url_template: ", $result->url_template;
say "url_type: ", $result->url_type;
say "";
say "request:";
say "REQUEST:\n", Dumper $result->request;
say "";
say ">>> 10 pages >>>\n";
for my $n (1..2) {
    say "=== PAGE $n ";
    say "ITEMS:\n", Dumper $result->items;
    say "";

    sleep 10;
    $result = $result->nextPage->fetch;
}

Но когда я использую параметры siteSearch и siteSearchFilter для ограничения целевых сайтов, это не удается.

my $engine  = WWW::Google::CustomSearch->new(
    api_key => 'my api key',
    cx => 'my search engine ID',
    dateRestrict => 'm3',
    siteSearch => 'accesswire.com',
    siteSearchFilter => 'i'
    );

Отображается следующее сообщение об ошибке.

$ ./miniSearch.pl Отсутствуют обязательные аргументы: totalResults в Строка /usr/local/share/perl/5.30.0/WWW/Google/CustomSearch/Request.pm 30.

Я добавил хеш-запись totalResults в новую, как показано ниже.

my $engine  = WWW::Google::CustomSearch->new(
    api_key => 'my api key',
    cx => 'my search engine ID',
    dateRestrict => 'm3',
    siteSearch => 'accesswire.com',
    siteSearchFilter => 'i',
    totalResults => 1000,
    );

или ниже.

my $engine  = WWW::Google::CustomSearch->new(
    api_key => 'my api key',
    cx => 'my search engine ID',
    dateRestrict => 'm3',
    siteSearch => 'accesswire.com',
    siteSearchFilter => 'i',
    totalResults => '1000',
    );

Но ошибка остаётся прежней.

Кто-нибудь знает, как это решить?

Я подозреваю, что это немного вводит в заблуждение. Я думаю, возможно, он говорит о том, что результат не имеет параметра totalResults. Теперь я смутно понимаю, что если это последняя страница результатов (или только одна страница), возможно, она ее не содержит. Так что это может быть проблема с реализацией Perl. Посмотрите, можете ли вы отладить фактический запрос, какой ответ поступает и есть ли там TotalResults.

Ian 29.02.2024 12:25

Ошибка возникает из-за создания объекта Page. Объекты страниц создаются на основе ответов. Итак, похоже, что раньше Google возвращал поле, которое он больше не возвращает, и модули ожидают, что это поле будет присутствовать в ответе. Сообщите об ошибке.

ikegami 29.02.2024 16:17

Кто-то сообщил об этой проблеме по запросам без результатов. Может, оставить там комментарий?

ikegami 29.02.2024 16:19

Вы знаете, что в вашем хэш-назначении стоит висящая запятая?

Bork 29.02.2024 17:12

@Bork, Запятые в конце - это нормально. (И их использование — моя любимая практика.)

ikegami 29.02.2024 17:49

@ikegami Ты прав. Мой вопрос выше ввел в заблуждение: (неправильно) Если вы используете хеш-ключ siteSearch, поиск завершится с ошибкой Missing.... (справа) Если количество найденных сайтов равно нулю, поиск завершится с ошибкой Missing....

Chihiro Fukazawa 01.03.2024 09:15

Когда я запускаю приведенный ниже код: my $engine = WWW::Google::CustomSearch->new( api_key => 'мой ключ API', cx => 'идентификатор моей поисковой системы', dateRestrict => 'm3', ); # Следующие слова не были найдены при веб-поиске Google my $result = $engine->search('no_ such_words_are_there_foo_bar_baz_'); Код не выполнен с той же ошибкой.

Chihiro Fukazawa 01.03.2024 09:16

На данный момент я воспользовался этим обходным путем: my $result; eval {$result = $engine->search('no_search_result_found_foo_bar'); }; if ($@) { сказать «нет результатов поиска»; Выход; } Для меня это нормально. Спасибо.

Chihiro Fukazawa 01.03.2024 09:16

Я подтвердил, что модуль исправлен и теперь возвращает понятный результат, даже если результат равен НУЛЮ. Metacpan.org/release/MANWAR/WWW-Google-CustomSearch-0.40 Спасибо!

Chihiro Fukazawa 02.03.2024 06:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
9
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Будучи автором WWW::Google::CustomSearch, я просто предложил предложенное исправление соответствующей проблемы.

https://rt.cpan.org/Ticket/Display.html?id=141609

В версии 0.40 есть исправление.

https://metacpan.org/release/MANWAR/WWW-Google-CustomSearch-0.40

Благодаря вашему обновлению я подтвердил, что модуль работает нормально и возвращает дружественный результат, даже если количество просматриваемых страниц равно нулю.

Chihiro Fukazawa 02.03.2024 06:37

Другие вопросы по теме