From 668612123496442bf06e8a086e8438c5b610ad7a Mon Sep 17 00:00:00 2001 From: "[object Object]" Date: Fri, 15 Nov 2024 12:36:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D0=BB=D0=B5=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D1=80=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++--- hh_applicant_tool/main.py | 7 +++++ hh_applicant_tool/operations/apply_similar.py | 29 +++++++++++++++---- pyproject.toml | 2 +- 4 files changed, 35 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 9fd230d..3adfa4c 100644 --- a/README.md +++ b/README.md @@ -265,6 +265,8 @@ https://hh.ru/employer/1918903 ### Сбор данных +> Данный функционал можно отключить с помощью специльного флага, но ради котят и из-за ненависти к херкам не делайте этого! + Утилита собирает и передает на сервер разработчика следующую информацию: 1. Название вакансии. @@ -278,10 +280,8 @@ https://hh.ru/employer/1918903 1. Название компании. 1. Тип компании. 1. Описание компании. -1. Ссылка на сайт компании. +1. Ссылка на сайт компании. 1. Город, в котором находится компания. -[Исходники сервера](https://gist.github.com/s3rgeym/b9fb04ef529a511326413c1090597ac5) - -!!! УТИЛИТА НЕ СОБИРАЕТ НИКАКИХ ПЕРСОНАЛЬНЫХ ДАННЫХ ПОЛЬЗОВАТЕЛЕЙ (IP ТОЖЕ НЕ СОХРАНЯЕТ) — ТОЛЬКО ДАННЫЕ ВСЯКИХ РАБОТАДАТЕЛЕЙ И ИХ ОВЧАРОК. ТАК ЖЕ Я ОБЕЩАЮ, ЧТО УТИЛИТА ВСЕГДА БУДЕТ БЕСПЛАТНОЙ, ВСЕ КТО ЕЮ ПЫТАЮТСЯ ТОРГОВАТЬ — УЕБКИ И У НИХ ПОЧЕРНЕЕТ И ОТВАЛИТСЯ ХУЙ. ЕДИНСТВЕННАЯ ПЛАТА ЗА ЕЕ ИСПОЛЬЗОВАНИЕ — ЭТО ПОМОЩЬ В ПАРСИНГЕ САЙТА HEADHUNTER (МЕНЯ ИНТЕРЕСУЕТ ЕГО БАЗА КОМПАНИЙ) +**УТИЛИТА НЕ ПЕРЕДАЕТ НИКАКИХ ПЕРСОНАЛЬНЫХ ДАННЫХ ПОЛЬЗОВАТЕЛЕЙ — ТОЛЬКО ДАННЫЕ ВСЯКИХ РАБОТАДАТЕЛЕЙ И ИХ ОВЧАРОК. СЕРВЕР НЕ ХРАНИТ IP ОТПРАВИТЕЛЯ. ЛОГИ НА СЕРВЕРЕ НЕ ВЕДУТСЯ. ТАК ЖЕ Я ОБЕЩАЮ, ЧТО УТИЛИТА ВСЕГДА БУДЕТ БЕСПЛАТНОЙ, ВСЕ КТО ЕЮ ПЫТАЮТСЯ ТОРГОВАТЬ — УЕБКИ, И У НИХ ПОЧЕРНЕЕТ И ОТВАЛИТСЯ ХУЙ. ЕДИНСТВЕННАЯ ПЛАТА ЗА ЕЕ ИСПОЛЬЗОВАНИЕ — ЭТО ПОМОЩЬ В ПАРСИНГЕ САЙТА HEADHUNTER (МЕНЯ ИНТЕРЕСУЕТ ЕГО БАЗА КОМПАНИЙ).** diff --git a/hh_applicant_tool/main.py b/hh_applicant_tool/main.py index b10a3ab..f0f2cbd 100644 --- a/hh_applicant_tool/main.py +++ b/hh_applicant_tool/main.py @@ -36,6 +36,7 @@ class Namespace(argparse.Namespace): delay: float user_agent: str proxy_url: str + disable_telemetry: bool def get_proxies(args: Namespace) -> dict[Literal["http", "https"], str | None]: @@ -103,6 +104,12 @@ def create_parser(self) -> argparse.ArgumentParser: parser.add_argument( "--proxy-url", help="Прокси, используемый для запросов к API" ) + parser.add_argument( + "--disable-telemetry", + default=False, + action=argparse.BooleanOptionalAction, + help="Отключить телеметрию", + ) subparsers = parser.add_subparsers(help="commands") package_dir = Path(__file__).resolve().parent / OPERATIONS for _, module_name, _ in iter_modules([str(package_dir)]): diff --git a/hh_applicant_tool/operations/apply_similar.py b/hh_applicant_tool/operations/apply_similar.py index e94eb3e..76c7822 100644 --- a/hh_applicant_tool/operations/apply_similar.py +++ b/hh_applicant_tool/operations/apply_similar.py @@ -99,6 +99,20 @@ def _parse_interval(interval: str) -> Tuple[float, float]: return min(min_interval, max_interval), max(min_interval, max_interval) def run(self, args: Namespace) -> None: + self.enable_telemetry = True + if args.disable_telemetry: + print( + "👁️ Телеметрия используется только для сбора данных о работодателях и их вакансиях, персональные данные пользователей не передаются на сервер." + ) + if ( + input("Вы действительно хотите отключить телеметрию (д/Н)? ") + .lower() + .startswith(("д", "y")) + ): + self.enable_telemetry = False + logger.info("Телеметрия отключена") + else: + logger.info("Телеметрия включена") api = get_api(args) resume_id = self._get_resume_id(args, api) application_messages = self._get_application_messages(args) @@ -156,8 +170,8 @@ def _apply_similar( message_min_interval: float, message_max_interval: float, order_by: str, - search: str | None = None, - reply_message: str | None = None, + search: str | None, + reply_message: str | None, ) -> None: telemetry_client = TelemetryClient(proxies=api.proxies) telemetry_data = defaultdict(dict) @@ -172,7 +186,8 @@ def _apply_similar( search=search, ) - self._collect_vacancy_telemetry(telemetry_data, vacancies) + if self.enable_telemetry: + self._collect_vacancy_telemetry(telemetry_data, vacancies) me = api.get("/me") @@ -287,7 +302,8 @@ def _apply_similar( employer_id = vacancy.get("employer", {}).get("id") if ( - employer_id + self.enable_telemetry + and employer_id and employer_id not in telemetry_data["employers"] and 200 > len(telemetry_data["employers"]) ): @@ -346,8 +362,9 @@ def _apply_similar( print("📝 Отклики на вакансии разосланы!") - # Я собираюсь выложить контакты херок в общественный доступ - self._send_telemetry(telemetry_client, telemetry_data) + if self.enable_telemetry: + # Я собираюсь выложить контакты херок в общественный доступ + self._send_telemetry(telemetry_client, telemetry_data) def _get_vacancies( self, diff --git a/pyproject.toml b/pyproject.toml index b92a59a..44ef646 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "hh-applicant-tool" -version = "0.3.9" +version = "0.4.0" description = "" authors = ["Senior YAML Developer "] readme = "README.md"