@Amir1807

Как с консоли считывать поисковый запрос, и выводить результат поиска по Википедии?

Объясните задачу, так как являюсь еще новичком в Java, не могу понять суть задачи. Прочитал про HttpURLConnection и немного поработал с его методами и сделал get, put запросы.

Задача:

Напишите программу, которая с консоли считывает поисковый запрос, и выводит результат поиска по Википедии. Задача разбивается на 4 этапа:
Считать запрос
Сделать запрос к серверу
Распарсить ответ
Вывести результат

Первый и четвертый пункт не сильно нуждаются в пояснении, остановимся на запросе к серверу.

Эту задачу тоже можно разбить на несколько этапов:

Генерация запроса
Запрос к серверу
Подготовка к обработке ответа
Обработка ответа

Рассмотрим это подробнее:

Генерация запроса
API предоставляет возможность делать поисковые запросы, без ключей. Вот таким, примерно, образом:

Вы можете открыть эту ссылку в браузере, и посмотреть на результат запроса.
Однако, чтобы запрос прошел удачно, следует убрать из ссылки недопустимые символы, то есть сделать Percent-encoding, он же URL Encoding.
Для этого в Java можно воспользоваться статическим методом encode в классе URLEncoder, вот так:
street = URLEncoder.encode(street, "UTF-8");
Вот и всё, URL готов! Осталось теперь сделать запрос к серверу…

Запрос к серверу
Для GET и POST запросов можно воспользоваться классом HttpURLConnection. Это самое простое. Просто создать, открыть соединение и получить InputStream. Нам его даже не надо читать, за нас это сделает Gson.
Ещё можно использовать retrofit, или что-то подобное.

Подготовка к обработке ответа
Сервер возвращает данные в формате JSON.
Но нам его не надо парсить вручную, для этого есть библиотека Gson от Google.
Примеры есть тут:
https://github.com/google/gson
https://habrahabr.ru/company/naumen/blog/228279/

Если остаётся время, можно написать получение статьи, выбранной при поиске и так далее.


То есть я сделал такой get запрос, а дальше что?
String urlAddress = "https://ru.wikipedia.org/w/api.php?action=query&list=search&utf8=&format=json&srsearch=\"Java\"";
        HttpURLConnection connection = null;

        URL url = null;
        InputStreamReader isR = null;
        BufferedReader bfR = null;
        try {
            url = new URL(urlAddress);
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(200);
            connection.setReadTimeout(200);
            connection.connect();

            if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) {
                isR = new InputStreamReader(connection.getInputStream());
                bfR = new BufferedReader(isR);
                String line;
                while ((line = bfR.readLine()) != null) {
                    System.out.println(line);
                }
            } else {
                System.out.printf("Fail %s", connection.getResponseCode());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                isR.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                bfR.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
  • Вопрос задан
  • 788 просмотров
Пригласить эксперта
Ответы на вопрос 1
xez
@xez Куратор тега Java
TL Junior Roo
Срочно читайте про try-with-resources!

Ваша задача должна состоять из таких вот методов:
// Считать запрос
String request = getRequest();

// Сделать запрос к серверу
String response = getResponseFromWiki(request);

// Распарсить ответ
(?) result = parseResponse(response);

// Вывести результат
showResult(result);

С запросом к серверу вы, видимо, справились.
Нужно это все сделать отдельным методом (типа getResponseFromWiki), который будет возвращать полученную строку (или что там у вас вернется)
Ну и дальше по схеме.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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