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


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

7 97

7 ответов:

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

  1. Google предлагает публичный поиск WebService 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);
}

на условия предоставления услуг google мы можем прочитать:

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

Так что я думаю, что ответ Нет. Больше за SOAP API больше нет

для поиска google с помощью API вы должны использовать Google Custom Search, выскабливание веб-страницы не допускается

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

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

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

пример поиска кода с помощью клиентской библиотеки Google CustomSearch API

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, но результаты не будут точно такими же, как в обычном браузере google search.

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

действительно есть API для поиска google программно. С помощью API под названием Google пользовательский поиск. Для использования этого API, вам понадобится Google Developer API key и ключ cx. Простая процедура доступа к Google search из java-программы объясняется в моем блоге http://preciselyconcise.com/apis_and_installations/search_google_programmatically.php

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

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

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

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

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

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

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

Это позор, что Bing и Yahoo на много миль впереди Google в этом отношении. Их API не дешевы, но, по крайней мере, доступны.

в качестве альтернативы ответу 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