Код Java для использования API пользовательского поиска Google

Может ли кто-нибудь поделиться некоторыми кодами java для начала работы с api поиска Google. Я искал в Интернете, но не нашел ни надлежащей документации, ни хороших примеров кодов. Коды, которые я нашел, похоже, не работают. Буду признателен, если кто-нибудь может мне помочь (я получил ключ API и идентификатор системы пользовательского поиска).

Спасибо.


person dark_shadow    schedule 21.04.2012    source источник
comment
Возможный дубликат stackoverflow.com/q/3727662/776084   -  person RanRag    schedule 21.04.2012
comment
@RanRag: Я не думаю, что это дубликат, так как здесь я знаю об API пользовательского поиска Google. Единственное, о чем я прошу, - это несколько хороших кодов Java, чтобы начать с ним.   -  person dark_shadow    schedule 21.04.2012


Ответы (3)


Я изменил while loop в коде, предоставленном @Zakaria выше. Возможно, это не лучший способ решить эту проблему, но он дает вам ссылки на результаты поиска Google. Вам просто нужно проанализировать вывод. Посмотреть здесь,

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

    String key="YOUR KEY";
    String qry="Android";
    URL url = new URL(
            "https://www.googleapis.com/customsearch/v1?key="+key+ "&cx=013036536707430787589:_pqjad5hr1a&q="+ qry + "&alt=json");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    conn.setRequestProperty("Accept", "application/json");
    BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));

    String output;
    System.out.println("Output from Server .... \n");
    while ((output = br.readLine()) != null) {

        if(output.contains("\"link\": \"")){                
            String link=output.substring(output.indexOf("\"link\": \"")+("\"link\": \"").length(), output.indexOf("\","));
            System.out.println(link);       //Will print the google search links
        }     
    }
    conn.disconnect();                              
}

Надеюсь, это сработает и для вас.

person Pargat    schedule 27.06.2012
comment
Я получаю сведения о ссылках, но знаете ли вы, как получить сведения о веб-страницах, которые открываются по этим ссылкам. - person Aniket; 30.03.2013
comment
Это дает мне код ошибки HTTP 400. Есть ли ограничение на количество запросов, которые вы можете делать в день? Если да, то каков этот предел? - person Mike Warren; 17.10.2014
comment
@Pargat, я получаю java.io.IOException: Server returned HTTP response code: 403, помогите мне решить эту проблему, я использовал только приведенный выше код - person Selva; 20.08.2015
comment
Как получить следующую страницу по этому запросу? - person Nobody; 09.08.2017

Для тех, кому нужен рабочий пример API пользовательского поиска с использованием библиотеки Google, вы можете использовать этот метод:

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;
}

Этот метод возвращает список объектов Result, поэтому вы можете перебирать его.

    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());
    }

Как вы заметили, вы должны определить свои собственные GOOGLE_API_KEY, SEARCH_ENGINE_ID, QUERY и HTTP_REQUEST_TIMEOUT, т. Е.

private static final int HTTP_REQUEST_TIMEOUT = 3 * 600000;

Я использую зависимости Gradle:

dependencies {
compile 'com.google.apis:google-api-services-customsearch:v1-rev57-1.23.0'
}
person Martino    schedule 30.10.2017
comment
Спасибо за ответ! Я прямо сейчас занимаюсь этим и считаю ваш код полезным. Мне нравится, как вы устанавливаете ключ API и идентификатор поисковой системы, а не используете строку URL-адреса, как в других ответах. - person evaldeslacasa; 31.10.2017

Что ж, я думаю, что нет ничего особенного в том смысле, что вы можете использовать Java RESTFUL-клиент.

Я пробовал настраиваемый API, используя , который Код Java и основанный на документации Google:

public static void main(String[] args) throws IOException {
        URL url = new URL(
                "https://www.googleapis.com/customsearch/v1?key=YOUR-KEY&cx=013036536707430787589:_pqjad5hr1a&q=flowers&alt=json");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/json");
        BufferedReader br = new BufferedReader(new InputStreamReader(
                (conn.getInputStream())));

        String output;
        System.out.println("Output from Server .... \n");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }

        conn.disconnect();
    }

Вы должны заменить «YOUR-KEY» на ключ, найденный в консоли API Google.

person Zakaria    schedule 21.04.2012
comment
Я запускаю код, но результат не соответствует моим ожиданиям. Я думал, что получу несколько основных ссылок из кода. Не могли бы вы сказать мне, как я могу добиться этого с помощью этого кода? - person dark_shadow; 21.04.2012
comment
@Zakaria Я получаю подробные сведения о ссылках, но знаете ли вы, как получить сведения о веб-страницах, которые открываются по этим ссылкам. - person Aniket; 30.03.2013