Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
25bc4cc
делает аутентификацию через oauth2 и сохранение токена
fovendor Oct 8, 2025
86d3867
добавляет флаг переаутентификации, чтобы залогиниться в другой аккаунт
fovendor Oct 8, 2025
8064aec
добавляет sqlalchemy и меняет логику приложения на работу с БД
fovendor Oct 8, 2025
cecdd4e
добавляет профили пользователей в БД + таблицу app_state с активным п…
fovendor Oct 8, 2025
238ba6a
добавляет переключение между профилями, добавляет TUI
fovendor Oct 8, 2025
fcf359e
исправляет поведение TUI, биндит q и й
fovendor Oct 8, 2025
6f633f6
исправляет отображение таблицы и загрузку данных + стили
fovendor Oct 9, 2025
ef383b2
меняет схему БД для новой архитектуры
fovendor Oct 9, 2025
1c26a7d
добавляет логирование, синхронизацию откликов
fovendor Oct 9, 2025
89f21a8
починяет биндинги
fovendor Oct 9, 2025
d845e1e
чинит эндпоинт откликов и логи
fovendor Oct 10, 2025
2117a74
Ignore Python caches
fovendor Oct 10, 2025
4cf993f
рефакторит схему бд, добавляет кэш описания вакансий, меняет shedule …
fovendor Oct 10, 2025
be2c7bd
делает markdown-форматирование в выводе описания вакансий, красивое
fovendor Oct 10, 2025
59409f5
рефакторит tui чтобы работал мультиселект + мелкие улучшения
fovendor Oct 10, 2025
139bb25
чинит экран выбора профиля, улучшает тайминги UX, чинит даблтап для в…
fovendor Oct 10, 2025
ed6b5a6
добавляет возможность менять конфигурацию для каждого профиля прямо и…
fovendor Oct 14, 2025
020bb9a
Убирает ридми, ибо не актуально для этой ветки
fovendor Oct 14, 2025
2aad6db
Мощно рефакторит внешний вид, добавляет стили, делает UX/UI консистен…
fovendor Oct 15, 2025
2079cd4
рефакторит стили
fovendor Oct 16, 2025
81897c2
исправляет стили у экрана конфигурации
fovendor Oct 16, 2025
85bb6ba
расширяет схему БД для справочников areas и professional_roles, созда…
fovendor Oct 16, 2025
60b1c3c
добавляет мегафичу по интерактивному выбору регионов/городов и профес…
fovendor Oct 16, 2025
96f076f
исправляет багу и кривой UX, когда нельзя было очистить выбранный город
fovendor Oct 16, 2025
dc54f60
чинит выбор null в work-format
fovendor Oct 16, 2025
c049c75
Update README.md
fovendor Oct 16, 2025
c0d7f40
Исправляет исключения в gitignore
fovendor Oct 17, 2025
8d6281e
Починяет отправку откликов и правильное их логирование
fovendor Oct 17, 2025
6d6da40
Добавляет пагинацию (без стилей)
fovendor Oct 17, 2025
14a4c82
убирает поле с id резюме на экране выбора резюме внутри профиля
fovendor Oct 18, 2025
5009637
Исправляет недочёты в стилях и выводит уровень ЗП всегда
fovendor Oct 18, 2025
38a9fe4
Дорабатывает злоеб***ю пагинацию, теперь работает
fovendor Oct 18, 2025
825b8fd
Улучшает стили пагинации, добавляет обновление списков резюме после и…
fovendor Oct 19, 2025
9668a7d
выносит нужные переменные в константы, рефакторит код и убирает много…
fovendor Oct 20, 2025
519e49e
Рефакторит стили
fovendor Oct 20, 2025
6d552b3
Изменяет компоновку на экране конфигурации, рефакторит кодстайл стиле…
fovendor Oct 20, 2025
4cd6d10
улучшает стиль в списке вакансий
fovendor Oct 21, 2025
e209a75
Использует grid-gutter-horizontal для вывода колонок в настройках
fovendor Oct 21, 2025
c29e785
Чинит давний баг с ошибками в определении событий мыши
fovendor Oct 21, 2025
26de9aa
Чинит баг, при котором нельзя покинуть экран подтверждения отклика
fovendor Oct 21, 2025
61d1c99
Добавляет модалку в окно конфига
fovendor Oct 21, 2025
eee1ee2
Поправляет стили модалки
fovendor Oct 21, 2025
74e697e
Поправляет стили, добавляет компонент decline
fovendor Oct 22, 2025
e81478f
Заменяет экран отправки откликов на красивую модалку
fovendor Oct 22, 2025
34c1e2c
Добавляет экран просмотра истории откликов
fovendor Oct 22, 2025
a7e41b2
Добавляет настройки отображения воркспейсов на экран конфига
fovendor Oct 23, 2025
38582d6
Исправляет стили нового блока настроек
fovendor Oct 23, 2025
9809310
Меняет единицы измерения настроек ширины колонок
fovendor Oct 23, 2025
c5d28e6
Фиксит мелкую неточность стилей
fovendor Oct 23, 2025
0eae4cc
Рефакторит базу и переписывает маппинги статусов откликов, добавляет …
fovendor Oct 23, 2025
d8487b7
Исправляет поведение прелоадера в воркспейсе деталей вакансии на экра…
fovendor Oct 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/publish-to-pypi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# заглушка
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Python cache
**/__pycache__/
*.py[cod]
*.pyo

# Частые кэши инструментов
.pytest_cache/
.mypy_cache/
.ruff_cache/
*.cache/

# Кэш приложения
/cache-dir/
Empty file added LICENSE
Empty file.
128 changes: 9 additions & 119 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,125 +1,15 @@
# hhcli

Консольная интерактивная утилита для удобного поиска вакансий и откликов на hh.ru. Программа использует [hh-applicant-tool](https://github.com/s3rgeym/hh-applicant-tool) в качестве бэкенда для взаимодействия с API.
Консольная интерактивная утилита для удобного поиска вакансий и откликов на hh.ru.

![gif of hh-cli](img/review.gif "A short demo CLI TUI interface").
## Темы оформления

## Ключевые возможности
- TUI теперь поддерживает палитру по мотивам dooit.
- Смена темы доступна в экране настроек (`c` на экране выбора режима).
- Выбор применяется мгновенно и сохраняется для профиля.

* **Два режима поиска:** Автоматический (на основе рекомендаций hh.ru для вашего резюме) и ручной (гибкий поиск по ключевым словам, городу, формату работы и другим критериям).
* **Интерактивный интерфейс:** Удобный TUI-интерфейс на базе `fzf` для просмотра, фильтрации и выбора вакансий.
* **Предпросмотр без браузера:** Встроенный просмотр полного описания вакансии, включая требуемые навыки и контакты.
* **Множественная отправка откликов:** Выберите десятки вакансий и откликнитесь на все одной командой.
* **Умная защита от дублей:** Скрипт проверяет полную историю ваших откликов и позволяет (при желании) не отправлять отклик в компанию, куда уже откликались ранее.
* **Локальные отчеты:** Все ваши действия по откликам сохраняются в локальные CSV-файлы для последующего анализа.
* **Темы оформления:** Настройте оформление утилиты под ваши предпочтения через переменные в конфиге.
## TO DO

## Установка и обновление

Установка производится одной командой в терминале. Инсталлятор автоматически проверит зависимости, установит нужные компоненты, создаст файл конфигурации и нужные для работы программы системные каталоги.

```bash
bash <(curl -sSL -H "Cache-Control: no-cache" https://raw.githubusercontent.com/fovendor/hhcli/master/install.sh) install
```

## Удаление

Для полного удаления программы, ее конфигурационных файлов, кэша и бэкенда выполните команду:

```bash
bash <(curl -sSL https://raw.githubusercontent.com/fovendor/hhcli/master/install.sh) uninstall
```

## Первый запуск и настройка

После установки необходимо выполнить три простых шага:

#### 1. Авторизация

Запустите команду аутентификации. Она откроет браузер для входа в ваш аккаунт на hh.ru.

```bash
hhcli --auth
```

#### 2. Настройка поиска

При установке создаётся файл конфигурации. Откройте его в текстовом редакторе и настройте параметры ручного поиска (ключевые слова, исключения, проф. роли и т.д.).

```bash
nano ~/.config/hhcli/config.sh
```

#### 3. Запуск

После настройки конфига вы готовы к поиску. Запустите главный скрипт и следуйте интерактивным подсказкам:

```bash
hhcli
```

## Использование

Вот основные команды для работы с `hhcli`:

| Команда | Описание |
| :--- | :--- |
| `hhcli -h` | Помощь по основным командам. |
| `hhcli -p` | Показывает справочник профессиональных ролей (чтобы выйти из списка ролей нажмите `q`) |
| `hhcli` | Запускает основной интерактивный режим поиска. |
| `hhcli --auth` | Выполняет аутентификацию или обновляет токен доступа. |
| `hhcli --list-resumes` | Показывает список ваших резюме и их ID. |
| `hhcli --find-city` | Помогает найти ID города для файла конфигурации. |
| `hhcli --clear-cache` | Удаляет локальный кэш (города, словари и т.д.). |
| `hhcli proxy [cmd]` | Передает команду [cmd] напрямую бэкенду. Чтобы узнать подробнее выполните: `hh-applicant-tool -h`. |

## Обработка ошибок API и ограничений платформы

Скрипт умеет обрабатывать криворукость разработчиков некоторые странности в ответах API hh.ru:

- Пустое описание: Выводится заглушка [ Описание ... недоступно через API ].
- "Битые" JSON: Скрипт удалит поврежденный файл из кэша и предложит просмотреть вакансию еще раз.
- Вакансии с вопросами: Отклики на вакансии, требующие ответов на вопросы, будут автоматически пропущены, но появятся в итоговом CSV-отчете, чтобы вы могли откликнуться на них вручную.

## TODO

Изначально hhcli не планировался как большой и долго поддерживаемый проект. Но текущая ситуация на рынке труда: глупые алгоритмы отбора, фейковые вакансии, некомпетентные HR'ы и в целом низкая эффективность ручного поиска мотивируют меня развивать этот инструмент дальше.

Чтобы иметь возможность это делать, нужно будет "выйти и зайти нормально". Становится трудно поддерживать Bash-код и огромные регулярные выражения, думаю про перенос всей кодовой базы на Python. К тому же я упёрся в потолок костылей с `w3m` и `fzf` в плане UX.

План примерно такой:

### Рефакторинг

1. Написать собственный цикл аутентификации через OAuth2 без `hh-applicant-tool`. Уже получены официальные `Client Id` и `Client Secret` от официального API hh.ru. Нужно будет поднять веб-сервер для колбэка, обработать токены, сделать логику refresh_token.
2. Сделать собственный API-клиент и отказаться от проксирования вызовов через `hh-applicant-tool`. Написать с нуля все эндпоинты:

- `/resumes/mine` (получение резюме)
- `/vacancies` (поиск вакансий)
- `/resumes/{resume_id}/similar_vacancies` (рекомендованные вакансии)
- `/negotiations` (история откликов)
- POST `/negotiations` (отправка отклика)
- `/dictionaries, /areas` (справочники)

#### ФТ

1. Сделать поддержку нескольких профилей поиска (`hhcli --profile <name>`). Сейчас приходится костылить и хранить в комментах конфига пути к разным сопроводительным письмам, разные параметры поиска и т.д.
2. Обезопасить конфиг через интерактивную настройку (`hhcli --configure`). Сам часто получаю ошибки при запуске, когда редактирую конфиг в `nano` и стираю какую-нибудь скобку не в том месте.

#### НФТ

1. Отказаться от кэша в `.json` и отчётов в `.csv` в пользу единой базы данных **SQLite**. Там хранить всё: историю откликов, кэш откликов, кэш описания вакансий и вот это всё. Получаем защиту от кривого сохранения файлов, отсутствие надобности парсить строки, чтобы вытягивать аналитику, да и вообще это удобно. Конфиги хранить там же и переключать их флагом `--profile <name>` (решение [проблемы №8](https://github.com/fovendor/hhcli/issues/8)).
2. Заменить `fzf` + `w3m` на нативный TUI (думаю про [Textual](https://github.com/textualize/textual/)).
3. Сделать кроссплатформенную установку на разные оси (Linux, macOS, Windows).

## Оговорка

Вся работа с API делегирована утилите hh-applicant-tool. Если в ней произойдут критические изменения или она перестанет работать из-за изменений на стороне hh.ru, этот скрипт также перестанет работать.

## Лицензия

[MIT](https://choosealicense.com/licenses/mit/)

## Благодарности

- Огромная благодарность **Сергею ([s3rgeym](https://github.com/s3rgeym))** за создание и поддержку [hh-applicant-tool](https://github.com/s3rgeym/hh-applicant-tool).
- Добавить эндпоинт отправки отклика.
- Добавить пагинацию в списке найденных вакансий (сейчас максимум 50).
- Убрать выделение вакансий на ЛКМ, жутко бесит.
61 changes: 0 additions & 61 deletions config.sh

This file was deleted.

Loading