— Привет, боец!
— Поздравляю тебя с повышением уровня квалификации. Нам нужны отчаянные парни.
— Уверен, у тебя есть еще много нерешенных задач. Самое время решить парочку из них!
10
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (1)
Пришло время немного поработать с информацией в инете. В этом задании ты будешь писать агрегатор java вакансий.
Что у нас должно быть?
Должен быть список сайтов, на которых мы ищем вакансии.
Для начала возьмем https://grc.ua/ и https://hh.ru/, потом уже добавим другие сайты поиска работы.
Это один и то
18
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (2)
1. Создай класс Controller, в нем будет содержаться бизнес логика.
2. В Controller добавь паблик конструктор, который будет принимать столько провайдеров, сколько в него передадут для обработки.
Сохрани их в приватное поле providers.
Помнишь, как это делать? Нужно нажать на аргументе конструктора A
18
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (3)
Начиная с этого задании ты начнешь писать логику получения данных с сайта.
Эта логика будет полностью сосредоточена в классах, реализующих интерфейс Strategy.
Провайдер в данном случае выступает в качестве контекста, если мы говорим о паттерне Стратегия.
В провайдере должен быть метод, который будет вызывать
18
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (4)
Открой сайт поиска работы - https://grc.ua/ и https://hh.ru/
В строке поиска набери "java Kiev", снизу перейди на вторую страницу, т.к. урлы часто отличаются на первой странице и далее.
У меня получилась такая ссылка:
https://grc.ua/search/vacancy?text=java+Kiev&page=1 и https://h
18
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (5)
1. Добавь в интерфейс Strategy метод getVacancies(String searchString), который будет возвращать список вакансий.
2. Поправь ошибки в классе HHStrategy.
3. Вернись в метод getJavaVacancies класса Provider, реализуй его логику из расчета, что всех данных хватает.
4. Давай попробуем запусти
36
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (6)
1. В папке куда ты скачал либу org.jsoup:jsoup:1.9.2 из maven репозитория, найди jar-архив jsoup-1.9.2.jar или jsoup-1.9.2-sources.jar.
В нем найди пакет examples, посмотри классы в этом пакете.
2. По аналогии с реализацией в примерах кода jsoup - реализуй коннекшен к урлу сайта поиска работы
18
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (7)
Чтобы сайт поиска работы знал, кто к нему коннектится, проставим Request Headers в наш запрос.
Для разработчиков созданы инструменты, которые показывают различную информацию про запросы.
Я расскажу тебе про два инструмента.
***Chrome****
1. В браузере Хром пойди в Меню - Инструменты - Инст
36
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (8)
Запусти снова программу в дебаг моде.
Скопируй полученное значение document.html() в созданный ранее html файл.
Отформатируй его и найди теги с вакансиями.
Почитай в Сообществе дополнительный материал к лекции про селекторы атрибута.
ВНИМАНИЕ: ОСОБЕННОСТИ ТЕСТИРОВАНИЯ!
HTML код странички ХэдХантер
18
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (9)
Пришло время чуток порефакторить код.
Почитай в инете про паттерн MVC(Model-View-Controller).
Кратко - используя View(вид) пользователь генерирует события, которые обрабатывает контроллер.
Контроллер принимает решение, какие данные ему нужны, и обращается к нужной модели.
Модель получает данные, нап
18
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (10)
У View есть метод update, в него передается список вакансий для отображения.
Очевидно, что этот метод будет вызываться моделью, т.к. только она получает данные.
Пришло время создать модель.
1. Создай класс Model в пакете model.
2. Добавь два приватных поля - 1) вью, 2) массив провайдеров.
10
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (11)
В Model есть метод selectCity, в него передается название города, для которого выбираются вакансии.
Очевидно, что этот метод будет вызываться контроллером, т.к. он принимает решение, какую модель использовать.
1. Добавь в Controller новое поле Model model.
2. Удали метод scan() из Controller, его
10
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (12)
Чтобы запустить приложение, нужно эмулировать событие пользователя:
1. В классе HtmlView создай публичный метод void userCitySelectEmulationMethod().
Пусть этот метод пробросит вызов в контроллер для города "Odessa".
2. Чтобы понять, что все работает, выведи что-то в консоль в методе update в HtmlV
18
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (13)
Смотри, в пакете view появились два новых файла:
vacancies.html - будешь в него записывать данные,
backup.html - дубликат vacancies.html для восстановления, вдруг данные в vacancies.html сотрутся.
Стань слева в дереве проекта на vacancies.html, нажми правой клавишей мыши, далее "Open in Browser".
Т
18
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (14)
В классе HtmlView остались два пустых метода.
В этом задании я опишу, что должен делать метод updateFile. А также расскажу, как можно дебажить.
Он принимает тело файла в виде строки. Нужно его записать в файл, который находится по пути filePath.
Ты это хорошо умеешь делать, поэтому подробностей тут
36
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (15)
В классе HtmlView остался один пустой метод getUpdatedFileContent. В этом задании я опишу, что он должен делать.
1. В HtmlView создай protected метод Document getDocument() throws IOException, в котором
распарси файл vacancies.html используя Jsoup. Кодировка файла "UTF-8", используй поле filePath.
36
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (16)
Ты молодец, большая работа позади! Теперь тебе легко будет мониторить вакансии для трудоустройства :)
Сейчас Aggregator использует только одну стратегию сбора вакансий - с ХэдХантера.
1. По аналогии с HHStrategy добавь стратегию для Хабр Карьеры.
Назови класс HabrCareerStrategy, реализуй мето
10
Задача
Java Collections,
8 уровень,
15 лекция
Недоступна
Aggregator (17)
Что можешь сделать самостоятельно (тестов на этот пункт нет):
1. добавить еще 100500 других сайтов для агрегирования вакансий.
Нужно всего лишь создать стратегию, а потом добавить в модель провайдер с этой стратегией.
2. отсортировать все вакансии, например, по дате создания (придется распарсить дат
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Почитал критику задачи. Решил делать параллельно свою стратегию, чтобы реально видеть, как обрабатывать сайт, а чтобы проходить валидацию, другую стратегию, с правильным названием и, потенциально списанным "правильным" решением. Сейчас 6ая задача. Походу решения постараюсь сюда добавлять подробностей.Задача наводит на мысли что почитать, как можно обрабатывать страницу, но в целом данная задача - фарс, а не обучение.