Как стать автором
Обновить

API HH.ru Быстрый старт для работы с аккаунтом соискателя

Уровень сложностиСредний

Так как документация к api HH на мой взгляд ужасная и непонятная, а статье о быстром старте для получения доступа к аккаунту соискателя миллион лет, то я решил написать свою статью, как супер быстро получить все нужные токены для работы с hh со стороны соискателя.

Быстрый старт состоит из 3 шагов:

  1. Зарегистрировать приложение

  2. Получение токенов авторизации

  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

https://github.com/hhru/api

Надеюсь я чем то помог. Если какие то еще вопросы будут, то пишите в комментарии, по возможности постараюсь помочь. Всем удачи!

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.