Кто-нибудь знает, если и как можно искать Google программно - особенно если для этого есть Java API?
Как вы можете искать программный API Google API
Ответ 1
Некоторые факты:
-
Google предлагает общедоступный API webservice, который возвращает JSON: http://ajax.googleapis.com/ajax/services/search/web. Документация здесь
-
Java предлагает
java.net.URL
иjava.net.URLConnection
для запуска и обработки HTTP-запросов. -
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 + "]"; }
}
}
См. также:
- Как запускать и обрабатывать HTTP-запросы с помощью
java.net.URLConnection
- Как конвертировать JSON в Java
Обновить с ноября 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 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);
}
Ответ 2
В Условиях использования google мы можем прочитать:
5.3. Вы соглашаетесь не получать доступ (или пытаться получить доступ) к каким-либо Услугам любыми способами, кроме как через интерфейс, предоставляемый Google, если только вам не разрешено делать это в отдельном соглашении с Google. Вы специально соглашаетесь не получать доступ (или пытаться получить доступ) к любым из Сервисов с помощью любых автоматизированных средств (включая использование скриптов или веб-сканеров) и должны обеспечивать соблюдение инструкций, изложенных в любом файле robots.txt, присутствующем в Сервисах.
Итак, я думаю, что ответ следующий. SOAP API больше не доступен
Ответ 3
Для поиска в Google с помощью API вы должны использовать пользовательский поиск Google, очистка веб-страницы запрещена
В Java вы можете использовать CustomSearch API Client Library для 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 хотел бы поделиться своей прибылью.
Ответ 4
В апреле 2014 года Google TOS немного расслабился. Теперь он утверждает:
"Не злоупотребляйте нашими Сервисами. Например, не вмешивайтесь в наши Службы или пытайтесь получить к ним доступ, используя метод, отличный от интерфейса и инструкций, которые мы предоставляем".
Итак, переход про "автоматизированные средства" и скрипты ушел сейчас. Очевидно, что все еще не является желаемым (по Google) способом доступа к их услугам, но я думаю, что теперь формально открыта интерпретация того, что такое "интерфейс", и независимо от того, имеет ли какое-либо значение то, как обрабатывается точно возвращенный HTML ( визуализируется или анализируется). Во всяком случае, я написал библиотеку удобства Java, и вам решать, использовать ее или нет:
Ответ 5
Действительно, есть API для поиска в Google программно. API называется Google Custom Search. Для использования этого API вам потребуется ключ API разработчика Google и ключ cx. В моем блоге объясняется простая процедура доступа к поиску Google из Java-программы.
Теперь мертв, вот ссылка на Wayback Machine.
Ответ 6
Как альтернатива 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
Ответ 7
В свете этих изменений TOS в прошлом году мы создали API, который дает доступ к поиску Google. Это было для нашего собственного использования, но после некоторых запросов мы решили открыть его. В будущем мы планируем добавить дополнительные поисковые системы!
Если кто-то ищет простой способ реализовать/получить результаты поиска, вы можете зарегистрироваться и дать REST API попробовать: https://searchapi.io
Он возвращает результаты JSON и должен быть достаточно простым для реализации с подробными документами.
Позор, что Bing и Yahoo в этом отношении на много впереди в Google. Их API не являются дешевыми, но, по крайней мере, доступны.
Ответ 8
Просто альтернатива. Поиск в результатах поиска Google также можно выполнить с помощью любого HTML-анализатора, такого как Jsoup в Java. Ниже приведена ссылка на пример.
https://www.codeforeach.com/java/example-how-to-search-google-using-java