Search
Write a publication
Pull to refresh

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

Level of difficultyMedium

Так как документация к 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

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

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.