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.