JavaRush /Курсы /Java Collections /Большая задача: Агрегатор на Java

Большая задача: Агрегатор на Java

Java Collections
8 уровень , 15 лекция
Открыта

— Привет, боец!

— Поздравляю тебя с повышением уровня квалификации. Нам нужны отчаянные парни.

— Уверен, у тебя есть еще много нерешенных задач. Самое время решить парочку из них!

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 файл. Отформатируй его и найди теги с вакансиями. Почитай в Сообществе дополнительный материал к лекции про селекторы атрибута.
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 использует только одну стратегию сбора вакансий - с ХэдХантера.
10
Задача
Java Collections, 8 уровень, 15 лекция
Недоступна
Aggregator (17)
Что можешь сделать самостоятельно (тестов на этот пункт нет): 1. добавить еще 100500 других сайтов для агрегирования вакансий. Нужно всего лишь создать стратегию, а потом добавить в модель провайдер с этой стратегией. 2. отсортировать все вакансии, например, по дате создания (придется распарсить дат
Комментарии (92)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Zim4ik Уровень 51
13 сентября 2025
Ioanna Polyak Уровень 26
18 июля 2025
Чтобы получить доступ к задаче требуется решить предыдущую.
Denis Odesskiy Уровень 47
28 марта 2025
Вопрос на собеседовании: - Как вы нас нашли? - Я спарсил вашу вакансию на сайте https://hh.ru. - А почему просто не воспользовались поиском по сайту? - Многозначительное молчание...
safelogj Уровень 51
17 октября 2024
Крутая задача на MVC :) в контроллере у нас 1 метод прокладка, в модели 1 метод запуска стратегий, view пишет файлы :)
И. Ж. Уровень 41
29 июня 2024
Решил тоже эту задачу развить впоследствии, переделал потом под два других популярных сайта, один с использованием Jsoup, другой через Silenium парсить, поскольку Jsoup там просто не видит вакансии из за динамической страницы. Потом вбил это в Spring Boot и визуально оформил в виде поискового сайта, где ставлю галочки из каких сайов искать и ввожу название вакансии, также выпадающими списками критерии поиска, вроде какой город и т. д. Все найденные вакансии также паралельно записывается в базу данных через Hibernate и на сайте манипуляция с базой данных. Понравилась также идея в комментарии ниже использовать Chat GPT, также его внедрил в проект для генерации резюме при выборе какой либо вакансии. То есть на одной этой задаче протестировать как можно больше технологий, фреймворков, чтоб с нуля не придумывать какой проект, а на готовом каркасе уже все возможное впихнуть, так как сама задача шикарная для подобного. Дальше там сколько фантазий хватит...
Gans Electro Уровень 40
20 марта 2024
Задача понравилась. Спарсил оба реальных сайта в конце. Теги конечно другие немного, но если разобраться с 9 и 16 задачами подробно то можно за 30 мин переписать. Для начала можно парсить страницы которые в кэше, а потом перейти на реал сайты. Вся загвоздка в том что валидатор хочет видеть адреса реальных сайтов (Но теги там уже другие) но по факту мы пишем на страницы в кэше. Мелочь но путает многих
Mikhail Уровень 26
13 января 2024
К сожалению уже неактуальна. Помогло поразбираться, но не более
Tony Уровень 36
12 сентября 2023
Мне понравилась задача, когда я ее проходил, решил, что в ней что-то есть, несмотря на то что ее тут многие хаяли. Пришло свое время и я реализовал такой проект на базе 5 микросервисов: Web Service, который в связке с Chat GPT-3.5/4.0 делает следующее: 1. Можно искать сразу по раным регионам, названиям вакансий 2. Много фильтров 3. Можно оценить на сколько процентов ваше резюме подходит для вакансии 4. Выбрать одну или несколько вакансий и сгенерить сопроводительные письма исходя из резюме и описания вакансии по отработанному шаблону 5. Дорабатывает резюме, добавляя нужные скилы под подходящие вакансии 6. Можно залогиниться по Гугл Почте Все уже развернул на серверах в облаке, и протестировал на 60-ти пользователях, собираю обратную связь. Кому интересно: https://web.careerbooster.online/ В тестовой среде у меня само собой и HH работает и Indeed Worldwide. Но они пока заблокированы в проде, так как использую VPS Digital Ocean, но я решу эту проблему. Было прикольно парсить страницы и обходить блокировки Jsoup 429, блокировки Cloudflare, да еще все это реализовать в многопоточности c CompletableFuture, использовать библиотеки Selenium Driver и тп. В общем каждый сам решает, что можно вынести из задачи: жаловаться на условия, или вдохновиться на что-то большее.
Anonymous #3131362 Уровень 43
16 февраля 2024
Можешь скинуть ссылку на гитхаб на твой проект с микросервисами?
wokku Уровень 51
7 сентября 2023
Мда, хорошие оценки у задач🤡
milniy87 Уровень 41
9 июля 2023
задача хорошая, но не рабочая. Но + к пониманию добавило)))