Как вы можете искать Google программно Java API

Кто-нибудь знает, возможен ли программный поиск в Google и каким образом, особенно если для этого есть Java API?

97 голосов | спросил Dan 16 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 16 Sep 2010 18:28:23 +0400 2010, 18:28:23

7 ответов


0

Некоторые факты:

  1. Google предлагает API-интерфейс общедоступного поиска, который возвращает JSON : http://ajax.googleapis.com/ajax/services/search/web , Документация здесь

  2. Java предлагает java.net.URL и java.net.URLConnection для запуска и обработки запросов HTTP.

  3. JSON может быть преобразован в Java в полноценный Javabean-объект с использованием произвольного Java JSON API. Одним из лучших является Google Gson .

Теперь посчитай:

public static void main(String[] args) throws Exception {
    String google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
    String search = "stackoverflow";
    String charset = "UTF-8";

    URL url = new URL(google + URLEncoder.encode(search, charset));
    Reader reader = new InputStreamReader(url.openStream(), charset);
    GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);

    // Show title and URL of 1st result.
    System.out.println(results.getResponseData().getResults().get(0).getTitle());
    System.out.println(results.getResponseData().getResults().get(0).getUrl());
}

Благодаря этому классу Javabean, представляющему наиболее важные данные JSON, возвращаемые Google (на самом деле он возвращает больше данных, но он оставлен на ваше усмотрение в качестве упражнения для соответствующего расширения этого кода Javabean):

public class GoogleResults {

    private ResponseData responseData;
    public ResponseData getResponseData() { return responseData; }
    public void setResponseData(ResponseData responseData) { this.responseData = responseData; }
    public String toString() { return "ResponseData[" + responseData + "]"; }

    static class ResponseData {
        private List<Result> results;
        public List<Result> getResults() { return results; }
        public void setResults(List<Result> results) { this.results = results; }
        public String toString() { return "Results[" + results + "]"; }
    }

    static class Result {
        private String url;
        private String title;
        public String getUrl() { return url; }
        public String getTitle() { return title; }
        public void setUrl(String url) { this.url = url; }
        public void setTitle(String title) { this.title = title; }
        public String toString() { return "Result[url:" + url +",title:" + title + "]"; }
    }

}

Смотрите также:


Обновление с ноября 2010 года (через 2 месяца после вышеуказанного ответа) веб-служба общедоступного поиска стала устаревшей (и последний день, когда была предложена услуга, был сентябрь 29, 2014). Ваша лучшая ставка теперь заключается в запросе http://www.google.com/search непосредственно у честного пользователя агент, а затем проанализировать результат с помощью HTML-парсер . Если вы пропустите пользовательский агент, вы получите 403 обратно. Если вы лежите в пользовательском агенте и имитируете веб-браузер (например, Chrome или Firefox), тогда вы получите намного больший ответ HTML, что является пустой тратой пропускной способности и производительности.

Ниже приведен пример использования Jsoup в качестве анализатора HTML:

String google = "http://www.google.com/search?q=";
String search = "stackoverflow";
String charset = "UTF-8";
String userAgent = "ExampleBot 1.0 (+http://example.com/bot)"; // Change this to your company's name and bot homepage!

Elements links = Jsoup.connect(google + URLEncoder.encode(search, charset)).userAgent(userAgent).get().select(".g>.r>a");

for (Element link : links) {
    String title = link.text();
    String url = link.absUrl("href"); // Google returns URLs in format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>".
    url = URLDecoder.decode(url.substring(url.indexOf('=') + 1, url.indexOf('&')), "UTF-8");

    if (!url.startsWith("http")) {
        continue; // Ads/news/etc.
    }

    System.out.println("Title: " + title);
    System.out.println("URL: " + url);
}
ответил BalusC 16 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 16 Sep 2010 18:41:17 +0400 2010, 18:41:17
0

В Условиях использования Google мы можем прочитать:

5.3. Вы соглашаетесь не получать (или пытаться получить доступ) к каким-либо Сервисам каким-либо образом, кроме как через интерфейс, предоставляемый Google, если только вам не было специально разрешено сделать это в отдельном соглашении с Google. Вы, в частности, соглашаетесь не осуществлять доступ (или пытаться получить доступ) к каким-либо Услугам с помощью каких-либо автоматических средств (включая использование сценариев или сканеров веб-страниц) и должны гарантировать, что вы будете соблюдать инструкции, изложенные в любом файле robots.txt, представленном на Сервисах .

Поэтому я думаю, что ответ «Нет». Более того, SOAP API больше не доступен

ответил Manuel Selva 16 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 16 Sep 2010 18:37:14 +0400 2010, 18:37:14
0

Для поиска в Google с помощью API вы должны использовать пользовательский поиск Google , веб-страница для просмотра которой есть не разрешено

В Java вы можете использовать клиентскую библиотеку API CustomSearch для Java

Зависимость maven:

<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-customsearch</artifactId>
    <version>v1-rev57-1.23.0</version>
</dependency> 

Пример поиска кода с использованием клиентской библиотеки API Google CustomSearch

public static void main(String[] args) throws GeneralSecurityException, IOException {

    String searchQuery = "test"; //The query to search
    String cx = "002845322276752338984:vxqzfa86nqc"; //Your search engine

    //Instance Customsearch
    Customsearch cs = new Customsearch.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), null) 
                   .setApplicationName("MyApplication") 
                   .setGoogleClientRequestInitializer(new CustomsearchRequestInitializer("your api key")) 
                   .build();

    //Set search parameter
    Customsearch.Cse.List list = cs.cse().list(searchQuery).setCx(cx); 

    //Execute search
    Search result = list.execute();
    if (result.getItems()!=null){
        for (Result ri : result.getItems()) {
            //Get title, link, body etc. from search
            System.out.println(ri.getTitle() + ", " + ri.getLink());
        }
    }

}

Как вы можете видеть, вам нужно запросить ключ API и настройте собственный идентификатор поисковой системы, cx .

  

Обратите внимание, что вы можете осуществлять поиск по всей сети, выбрав "Поиск по всей сети" на основных настройках вкладки во время настройки cx, но результаты будут отличаться от результатов поиска в обычном браузере Google.

В настоящее время (дата ответа) вы получаете 100 вызовов API в день бесплатно, а затем Google хочет поделиться своей прибылью.

ответил Petter Friberg 26 +03002017-10-26T23:31:46+03:00312017bEurope/MoscowThu, 26 Oct 2017 23:31:46 +0300 2017, 23:31:46
0

Действительно, есть API для программного поиска в Google. API называется Google Custom Search. Для использования этого API вам понадобятся ключ API разработчика Google и ключ cx . Простая процедура доступа к поиску Google из Java-программы описана в моем блоге http://preciselyconcise.com/apis_and_installations/search_google_programmatically.php

ответил Sai Sunder 28 Jpm1000000pmTue, 28 Jan 2014 20:28:31 +040014 2014, 20:28:31
0

Google TOS немного расслабился в апреле 2014 года. Теперь говорится:

«Не злоупотребляйте нашими Сервисами. Например, не вмешивайтесь в наши Сервисы и не пытайтесь получить к ним доступ, используя метод, отличный от интерфейса и инструкций, которые мы предоставляем».

Итак, отрывок об «автоматизированных средствах» и сценариях исчез. Очевидно, что по-прежнему не является желаемым (для Google) способом доступа к их службам, но я думаю, что теперь формально открыт для интерпретации того, что именно представляет собой «интерфейс», и имеет ли это какое-то значение в том, как именно обрабатывается возвращаемый HTML ( обработано или проанализировано). Во всяком случае, я написал удобную библиотеку Java, и вам решать, использовать ли ее или нет:

https://github.com/afedulov/google-web-search

ответил Alex Fedulov 23 J000000Thursday15 2015, 17:08:24
0

В свете этих изменений TOS в прошлом году мы создали API, который предоставляет доступ к поиску Google. Это было только для нашего собственного использования, но после некоторых запросов мы решили открыть его. Мы планируем добавить дополнительные поисковые системы в будущем!

Если кто-то ищет простой способ внедрения /получения результатов поиска, вы можете зарегистрироваться и попробовать REST API: https://searchapi.io

Он возвращает результаты JSON и должен быть достаточно простым для реализации с подробными документами.

Обидно, что Bing и Yahoo в этом отношении опережают Google. Их API не дешевы, но, по крайней мере, доступны.

ответил Stan Smulders 15 TueEurope/Moscow2015-12-15T12:24:06+03:00Europe/Moscow12bEurope/MoscowTue, 15 Dec 2015 12:24:06 +0300 2015, 12:24:06
0

В качестве альтернативы ответу BalusC, поскольку он устарел, и вы должны использовать прокси, вы можете использовать этот пакет. Пример кода:

Map<String, String> parameter = new HashMap<>();
parameter.put("q", "Coffee");
parameter.put("location", "Portland");
GoogleSearchResults serp = new GoogleSearchResults(parameter);

JsonObject data = serp.getJson();
JsonArray results = (JsonArray) data.get("organic_results");
JsonObject first_result = results.get(0).getAsJsonObject();
System.out.println("first coffee: " + first_result.get("title").getAsString());

Библиотека на GitHub

ответил Hartator 7 AMpSat, 07 Apr 2018 01:10:38 +030010Saturday 2018, 01:10:38

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132