Так как документация к api HH на мой взгляд ужасная и непонятная, а статье о быстром старте для получения доступа к аккаунту соискателя миллион лет, то я решил написать свою статью, как супер быстро получить все нужные токены для работы с hh со стороны соискателя.
Быстрый старт состоит из 3 шагов:
Зарегистрировать приложение
Получение токенов авторизации
Получение токенов доступа
Получение токена вашего приложения
Летим на https://dev.hh.ru/, регистрируемся, нажимаем "личный кабинет" -> "создание нового приложения". Заполняем все поля. Над redirect url можете не заморачиваться, его можно будет указать через квери. Регистрация занимает обычно 4 дня.
Ждем когда нам придет письмо на почту, заходим на https://dev.hh.ru/admin видим нужные токены - Client ID и Client Secret.
Получение токена авторизации аккаунта юзера
Для начала работы с аккаунтом юзера нам нужно получить токен доступа. Все достаточно просто! Я приведу пример на python.
HH_CLIENT_ID = 'ваш_client_id'
REDIRECT_URI = 'ваш_redirect_uri' # нужен ваш эндпоинт на домене, который будет принимать токен авторизации и стейт, обязательно на https
state_value = 'user_state_value' # Например, ID пользователя из Telegram
url = f"https://hh.ru/oauth/authorize?response_type=code&client_id={HH_CLIENT_ID}&state={state_value}&redirect_uri={REDIRECT_URI}"
После того, как юзер перейдет по ссылке, ему предложат авторизоваться на сервисе HH. После успешной авторизации, он попадает на ваш редирект, где в квери указывается стейт и полученный токен авторизации.
Получение acsess token для начала работы
Теперь нам нужно получить пару access token и refresh token. Срок жизни acsess token 1 час, после его истечения необходимо заново производить это запрос, но использовать refresh token вместо токена авторизации. Но вроде можно использовать и то и то, мне проще было использовать токен авторизации, т. к. у меня таймауты стояли на 24 часа и смысла хранить рефреш токен не было.
Пример на python:
import requests
client_id = "ваш_client_id"
client_secret = "ваш_client_secret"
auth_code = "AUTHORIZATION_CODE" # измените на фактически полученный код
redirect_uri = "https://example.com/id"
url = "https://hh.ru/oauth/token"
body = {
'grant_type': 'authorization_code',
'client_id': client_id,
'client_secret': client_secret,
'code': auth_code,
'redirect_uri': redirect_uri }
response = requests.post(url, data=body)
tokens = response.json()print(tokens)
Примечание - можно и не использовать редирет, просто не указывайте его в теле запроса и тогда в респонсе получите нужные токены. Ответ будет выглядеть так:
{
"access_token": "токен доступа",
"token_type": "bearer",
"refresh_token": "рефреш токен",
"expires_in": 1209628 #изменено
}
Примеры использования
Получаем информацию о юзере и json с подходящими для отклика вакансиями с помощью python.
import requests
def get_resumes(access_token):
url = "https://api.hh.ru/resumes/mine"
headers = {
"Authorization": f"Bearer {access_token}"
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
content = response.json()
return content
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return None
def get_similar_vacancies(access_token, resume_id, page=0, per_page=10):
url = f"https://api.hh.ru/resumes/{resume_id}/similar_vacancies?page={page}&per_page={per_page}"
headers = {
"Authorization": f"Bearer {access_token}"
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
content = response.json()
return content
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return None
# Пример использования
access_token = "ваш токен"
resume_id = "айди резюме юзера"
# Получить резюме
resumes = get_resumes(access_token)
if resumes:
print("Resumes:", resumes)
# Получить похожие вакансии
similar_vacancies = get_similar_vacancies(access_token, resume_id)
if similar_vacancies:
print("Similar Vacancies:", similar_vacancies)
Ссылка на полную документацию:
https://api.hh.ru/openapi/redoc#section/Avtorizaciya
Надеюсь я чем то помог. Если какие то еще вопросы будут, то пишите в комментарии, по возможности постараюсь помочь. Всем удачи!