Работа с API HH

  • Автор записи:
  • Запись опубликована:05.11.2023
  • Рубрика записи:HR analytics / Python

HeadHunter предоставляет API для доступа к обширной базе данных вакансий, компаний и резюме кандидатов. В этой статье мы рассмотрим, как использовать API HH для получения списка активных вакансий и откликов через библиотеку requests в python.

Получение токена доступа

Первым шагом для работы с API HH является получение токена. Токен является ключом, который используется для аутентификации и авторизации запросов к API. Чтобы получить этот токен, вам необходимо зарегистрироваться в качестве разработчика на сайте HH и создать приложение API.

  • Зарегистрируйтесь на сайте HH в качестве разработчика и войдите в аккаунт.
  • Зарегистрируйте новое приложение, заполнив необходимую информацию: название, описание, URL-адрес обратного вызова (если для личных нужд, то можно просто указать localhost) и т.д. Создание приложения может длиться до 2-3 недель.
  • После создания приложения вы получите идентификатор клиента (client_ID) и секретный ключ (client_secret), которые будут использоваться для получения токена доступа.

Авторизация и получение токена доступа

Теперь, когда у вас есть client_ID и client_secret, вы можете использовать их для получения токена доступа. Установите библиотеку requests и выполните следующий код:

import requests

client_ID = 'CLIENT_ID'
client_secret = 'CLIENT_SECRET'
token_url = 'https://hh.ru/oauth/token'
data={'grant_type': 'client_credentials',
      'client_id': client_ID,
      'client_secret': client_secret}

response = requests.post(token_url, data=data)
access_token = response.json()['access_token']

В результате выполнения кода в переменную access_token будет помещен полученный токен доступа.

Получение информации об активных вакансиях работодателя

Так как API HH поддерживает постраничный просмотр вакансий, пройдемся мы можем пройтись по каждому листу и просмотреть все вакансии на листах. Для этого воспользуемся следующим url = f'https://api.hh.ru/vacancies?employer_id={employer_id}&per_page=50'

После этого создадим функцию get_vacancies_list, где укажем следующие переменные: access_token, employer_id, url.
Employer_id вы можете просмотреть на этой странице.

def get_vacancies_list(access_token, employer_id, url):
  vacancies_list = []
  headers = {
        'Authorization': 'Bearer ' + access_token
  }
# Для примера возьмем первые две страницы - range(1, 3)
  for page in range(1, 3):
    vacancies_url = url + f'&page={str(page)}'
    vacancies_response = requests.get(vacancies_url, headers=headers)
    vacancies_json = vacancies_response.json()
    vacancies = vacancies_json.get("items", [])
    for vacancy in vacancies:
      vacancy_id = vacancy.get('id')
      vacancy_name = vacancy.get('name')
      vacancy_info = {
        'vacancy_id': vacancy_id,
        'vacancy_name': vacancy_name
      }
      vacancies_list.append(vacancy_info)
  return vacancies_list

В результате мы получим список, состоящий из id активной вакансии и ее наименования. Это лишь малая часть информации, которую мы можем вытянуть, более подробно читайте здесь.

Получение информации об откликах

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

def get_negotiations(id_vacancies_list):
  negotiation_list = []
  headers = {
      'Authorization': 'Bearer ' + access_token
  }
  for vacancy_id in id_vacancies_list:
    get_negotiations_url = f"https://api.hh.ru/negotiations/response?vacancy_id={vacancy_id}"
        
    negotiations_response = requests.get(get_negotiations_url, headers=headers)
    negotiations_json = negotiations_response.json()
    negotiations = negotiations_json.get("items", [])
    
    for negotiation in negotiations:
      resume = negotiation.get('resume', {})
      negotiation_id = negotiation.get('id')
      negotiation_last_name = resume.get('last_name') if resume is not None else None
      negotiation_first_name = resume.get('first_name') if resume is not None else None
      negotiation_middle_name = resume.get('middle_name') if resume is not None else None
      negotiation_info = {
        'vacancy_id': vacancy_id, 
        'negotiation_id': negotiation_id,
        'negotiation_last_name': negotiation_last_name,
        'negotiation_first_name': negotiation_first_name,
        'negotiation_middle_name': negotiation_middle_name
      }
      negotiation_list.append(negotiation_info)
  return negotiation_list

В результате мы получим список, состоящий из идентификаторов вакансии и отклика, а также о ФИО откликнувшегося. Вы также можете добавить и иные поля. Более подробно читайте здесь.

В качестве заключения

Это был очень краткий обзор работы с API HeadHunter (HH) для получения информации об активных вакансиях и об откликах. Вся основная информация об API находится в документации на github.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.