Загрузите более 10 изображений из пользовательского поиска Google [дубликат]

Прежде всего, если вы находитесь в & lt; 5.3PHP, то нет. У тебя много проблем, чтобы справиться.

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

Я приведу некоторую информацию о поддержке Unicode в PHP с помощью слайдов Elizabeth Smith в PHPBenelux'14

INTL

Хорошо:

  • Обертка вокруг библиотеки ICU
  • Стандартизованные локали, установка языка для каждого скрипта
  • Форматирование чисел
  • Форматирование валюты
  • Форматирование сообщений (заменяет gettext)
  • Календари, даты, часовой пояс и время
  • Транслитератор
  • Spoofchecker
  • Пакеты ресурсов
  • Конвертеры
  • Поддержка IDN
  • Graphemes
  • Collation
  • Итераторы

Плохо :

  • Не поддерживает zend_multibite
  • Не поддерживает преобразование входного сигнала HTTP
  • Не поддерживает перегрузку функции

mb_string

  • Включает поддержку zend_multibyte
  • Поддерживает прозрачную кодировку HTTP in / out
  • Предоставляет некоторые обертки для funtionallity, такие как strtoupper

ICONV

  • Первичный для преобразования кодировки
  • Обработчик выходных буферов
  • Функциональность кодирования mime
  • conversion
  • некоторые строковые помощники (len, substr, strpos, strppos)
  • Фильтр потока stream_filter_append($fp, 'convert.iconv.ISO-2022-JP/EUC-JP')

БАЗЫ ДАННЫХ

  • mysql: кодировка и сопоставление таблиц и соединений (не сортировка). Также не используйте mysql-msqli или PDO
  • postgresql: pg_set_client_encoding
  • sqlite (3): убедитесь, что он был скомпилирован с поддержкой unicode и intl

Некоторые другие Gotchas

  • Вы не можете использовать имена файлов Unicode с PHP и Windows, если вы не используете расширение третьей части.
  • Отправлять все в ASCII, если вы используете exec, proc_open и другие вызовы командной строки
  • Обычный текст не является обычным текстом, файлы имеют кодировки
  • Вы можете конвертировать файлы «на лету» с фильтром iconv

Я обновлю этот ответ, если что-то изменит добавленные функции и так далее.

12
задан Joy 4 June 2013 в 20:17
поделиться

2 ответа

Вы не можете так поступать. num может быть не более 10. См.

https://developers.google.com/custom-search/v1/using_rest#query-params

< blockquote>

num Количество результатов поиска для возврата Вы можете указать, сколько результатов будет возвращено для текущего поиска. Допустимые значения - целые числа от 1 до 10 включительно. Если num не используется, предполагается значение 10.

Чтобы показать больше результатов, Google предлагает сделать несколько вызовов, увеличивая при этом параметр запуска:

http://support.google.com/customsearch/bin/answer.py?hl=ru&answer=1361951

Пользовательский поиск Google и поиск по сайту Google возвращаются до 10 результатов на запрос. Если вы хотите отобразить более 10 результатов для пользователя, вы можете выдать несколько запросов (используя параметры start = 0, start = 11 ...) и отображать результаты на одной странице. В этом случае Google рассмотрит каждый запрос как отдельный запрос, и если вы используете Google Site Search, каждый запрос будет рассчитываться в соответствии с вашим лимитом.

19
ответ дан Bumptious Q Bangwhistle 26 August 2018 в 18:16
поделиться

Во-первых, Google говорит: «Параметры запроса, которые вы можете использовать с API пользовательского поиска JSON / Atom, приведены в этом разделе. Все значения параметров должны быть закодированы в URL». https://developers.google.com/custom-search/v1/using_rest#query-params Значит, что все после "?" должен быть закодирован с эквивалентом php url encoder, который устанавливает стандарт для urlencoding. Дело в том, что класс Java URLEncoder не совсем прав, вам нужно сделать пару replaceAll. Вам нужно сделать это со своим вводом:

String queryArguments = "key="+key+ "&cx="+ cx +"&q="+    searchText+"&alt=json"+"&start="+"0"+"&num="+"30";

Обратите внимание, что есть числа вокруг чисел. Если вы их используете из переменных, используйте следующее:

String thenum = Integer.toString(theinteger);

И затем правильная кодировка

String addition = URLEncoder.encode(queryArguments, "UTF-8")
.replaceAll("\\%28", "(") 
.replaceAll("\\%29", ")") 
.replaceAll("\\+", "%20") 
.replaceAll("\\%27", "'") 
.replaceAll("\\%21", "!") 
.replaceAll("\\%7E", "~");

Затем вы добавляете это к исходному неэкодированному URL:

String url = "https://www.googleapis.com/customsearch/v1?"
String total = url + addition;

В заключение ваш код будет выглядеть так:

String query = URLEncoder.encode("key="+key+ "&cx="+ cx +"&q="+    searchText+"&alt=json"+"&start="+"0"+"&num="+"30"), "UTF-8").replaceAll("\\%28", "(") 
.replaceAll("\\%29", ")") 
.replaceAll("\\+", "%20") 
.replaceAll("\\%27", "'") 
.replaceAll("\\%21", "!") 
.replaceAll("\\%7E", "~");
URL url = new URL("https://www.googleapis.com/customsearch/v1?" + query);
HttpURLConnection conn2 = (HttpURLConnection) url.openConnection();
System.out.println("Connection opened!");
conn2.setRequestMethod("GET");
conn2.setRequestProperty("Accept", "application/json");
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn2.getInputStream())));

Надеюсь, это сработает для вас. Я сделал что-то очень похожее на старое устаревшее изображение api, но концепция придерживается того же самого, и я посмотрел на новые документы. :)

EDIT: убедитесь, что ваш параметр num находится между 0 и 10 включительно.

-1
ответ дан Jackson Kulik 26 August 2018 в 18:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: