2016-05-22 1 views
0

Я несколько потерял связь с пользовательскими поисковыми системами с тех пор, как Google переключился с более старой системы поиска api в пользу пользовательского поиска Google. Я надеюсь, что кто-то сможет сказать мне, может ли быть достигнута (довольно простая) цель с новой структурой, и, возможно, любая стартовая помощь будет отличной.Google Custom Search API - Результаты поиска

В частности, я ищу, чтобы написать программу, которая будет читаться в тексте из текстового файла, а затем использовать пять слов из указанного документа в поиске в Google - точка заключается в определении количества результатов, полученных от указанного поиска.

Пример ввода/вывода будет:

Входной сигнал: «Это мой термин поиска» - котировки включены в поиске!

Выход: было 7 Итоговые результаты

спасибо так много, все, за время/помощь

ответ

1

Сначала вам нужно создать проект Google Custom Search внутри вас нет аккаунта Google. Из этого проекта вы должны получить идентификатор пользовательской поисковой системы, известный как параметр cx. Вы также должны получить параметр ключа API. Оба они доступны из вашего проекта API пользовательского поиска в вашей учетной записи google.

Затем, если вы предпочитаете Java, вот рабочий пример:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 


public class GoogleCustonSearchAPI { 

public static void main(String[] args) throws Exception { 

String key="your_key"; 
String qry="your_query"; 
String cx = "your_cx"; 

//Fetch urls 
URL url = new URL(
"https://www.googleapis.com/customsearch/v1?key="+key+"&cx="+cx+"&q="+ qry +"&alt=json&queriefields=queries(request(totalResults))"); 

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestMethod("GET"); 
conn.setRequestProperty("Accept", "application/json"); 
BufferedReader br = new BufferedReader(new InputStreamReader(
     (conn.getInputStream()))); 
//Remove comments if you need to output in JSON format 
/*String output; 
System.out.println("Output from Server .... \n"); 
while ((output = br.readLine()) != null) { 
    System.out.println(output); 
}*/ 
//Print the urls and domains from Google Custom Search                    String searchResult;   
    while ((searchResult = output.readLine()) != null) { 
     int startPos=searchResult.indexOf("\"link\": \"")+("\"link\": \"").length(); 
     int endPos=searchResult.indexOf("\","); 
     if(searchResult.contains("\"link\": \"") && (endPos>startPos)){ 
      String link=searchResult.substring(startPos,endPos); 
      if(link.contains(",")){ 
       String tempLink = "\""; 
       tempLink+=link; 
       tempLink+="\""; 
       System.out.println(tempLink); 
      } 
      else{ 
       System.out.println(link);     
      } 
      System.out.println(getDomainName(link)); 
     }  
    } 
conn.disconnect();     
} 

public static String getDomainName(String url) throws URISyntaxException { 
    URI uri = new URI(url); 
    String domain = uri.getHost(); 
    return domain.startsWith("www.") ? domain.substring(4) : domain; 
} 

"& queriefields = запросы (запрос (totalResults))" является то, что делает разницу, и дает гроша, что вам нужно. Но имейте в виду, что вы можете бесплатно выполнять только 100 запросов в день и что результаты API пользовательского поиска иногда сильно отличаются от тех, которые были возвращены из поиска Google.com.

+0

Вы не возражаете, как "конкретно" получим 'cx'? – lonesome

+0

Здесь вы можете найти cx id: http://www.google.com/cse/manage/all. Затем найдите «Мои поисковые системы», затем выберите из списка. Когда вы выбираете свой движок, есть кнопка «Идентификатор поисковой системы» справа от Детали. Это cx. Надеюсь, я помог! –

+0

Это было полезно. Но у меня проблема. Я хотел бы знать результаты, которые Google возвращает для любого случайного запроса. Поскольку Googled убил ajax api, я пытаюсь использовать CSE. Но я не знаю, как его использовать. Я выбираю Google.com для создания пользовательской поисковой системы, но он возвращает результаты услуг Google. Как я могу создать пользовательский механизм поиска, который показывает результаты, которые Google делает? – lonesome

0

Если кому-то еще понадобится пример CSE (Google Custom Search Engine) API, это работает метод

public static List<Result> search(String keyword){ 
    Customsearch customsearch= null; 


    try { 
     customsearch = new Customsearch(new NetHttpTransport(),new JacksonFactory(), new HttpRequestInitializer() { 
      public void initialize(HttpRequest httpRequest) { 
       try { 
        // set connect and read timeouts 
        httpRequest.setConnectTimeout(HTTP_REQUEST_TIMEOUT); 
        httpRequest.setReadTimeout(HTTP_REQUEST_TIMEOUT); 

       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 
      } 
     }); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    List<Result> resultList=null; 
    try { 
     Customsearch.Cse.List list=customsearch.cse().list(keyword); 
     list.setKey(GOOGLE_API_KEY); 
     list.setCx(SEARCH_ENGINE_ID); 
     Search results=list.execute(); 
     resultList=results.getItems(); 
    } 
    catch ( Exception e) { 
     e.printStackTrace(); 
    } 
    return resultList; 
} 

Этот метод возвращает список объектов результатов, так что вы можете перемещаться через него

List<Result> results = new ArrayList<>(); 

    try { 
     results = search(QUERY); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    for(Result result : results){ 
     System.out.println(result.getDisplayLink()); 
     System.out.println(result.getTitle()); 
     // all attributes 
     System.out.println(result.toString()); 
    } 

я использую Gradle зависимостей

dependencies { 
compile 'com.google.apis:google-api-services-customsearch:v1-rev57-1.23.0' 
} 

Не забудьте определить свой собственный GOOGLE_API_KEY, SEARCH_ENGINE_ID (сх), QUERY и HTTP_REQUEST_TIMEOUT (т.е. частных статических окончательное ИНТ HTTP_REQUEST_TIMEOUT = 3 * 600000;)

Смежные вопросы