Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

API HeadHunter: скрипт для обновления резюме

Не знаю, ребята, как у вас с этим обстоят дела, а вот меня всегда изрядно раздражало безмерное количество кликов мышкой, которые необходимо сделать в учетке HeadHunter.ru, чтобы обновить резюме... резюме у вас может быть целый десяток, причем на разных языках: каждое из них приходится открывать, чтобы републиковать.

Сравните с теми же Суперджобом, Job.ru или Rabota.ru, где все значительно проще... не, как хотите, а неудобно. Явно заказчик сэкономил на бюджете, а прогеры оперативно просекли ситуацию и недопилили; что же, дело знакомое. Причем явно недопил это не единственный: я почему-то был уверен, что, коль скоро страничка резюме на hh.ru содержит переключатель - с русского на английский - то и механизм создания двуязычного резюме явно обязан здесь присутствовать... ан нет, с снова облом. Ох уж эти мне программисты, что за люди, а? - дикий народ. Дети гор.

 

 

"Ну, рисовать картины не сподобил меня создатель...", т.е. разработку многоязычного резюме HeadHunter придется оставить, видимо, для будущих поколений, когда нас с вами, уважаемый читатель, никакая работа явно уже волновать не будет: будем день-денькой греть спинку на солнышке, наслаждаясь заслуженным отдыхом и роскошной пенсией (какой к тому времени по счету будет президентский срок у ВВ, даже гадать не хочу); - ну, а пока суть да дело, обновлять ваши многочисленные резюме одним-двумя кликами мышки я вас научу. Не забывайте, на дворе 21 век, и у нас с вами есть относительно новый HeadHunter API, использующий для авторизации протокол OAuth2; вот с ними и поработаем. Черт с ней, с пенсией, где наша не пропадала.

Итак, поехали. Все описанные далее действия визуально исчерпаны всего лишь одним-единственным кликом по ссылке.. но для начала неплохо бы открыть личный кабинет на HeadHunter и создать приложение, содержащее Client ID и Client Secret, а также Redirect URI, являющийся url-адресом скрипта, который прямо сейчас можно запросто скопипастить со странички форума: если вы психологически устойчивый, с нормальной и здоровой психикой человек и вас особо не тянет на программирование - уверен, вы так и сделаете. Это было бы вполне адекватно: закидываем скрипт куда-нибудь с глаз долой подальше на web-сервер, вбиваем свои данные API, открываем в браузере и начисто забываем про чьи-то там умные разглагольствования. Для всех же остальных, гм... продолжим.

Прежде всего, проверяем ассоциативный массив параметров url, если скрипт только начинает работать - показываем линк на HeadHunter "Обновить резюме", содержащий Client ID. После того, как вы кликнете по нему и API hh.ru перенаправит вас обратно (т.е. в этот же самый скрипт; еще не забыли, что указали redirect URI, регистрируя приложение?) - url уже содержит code (не верите - взгляните на адресную строку браузера), и скрипт продолжит работу:

 

<?
if (empty($_GET['code'])) {
echo '<p><a href="https://hh.ru/oauth/authorize?response_type=code&client_id=' . $client_id . '">Обновить резюме</a></p>';
} else {

 

На этом этапе, если вы не залогинены на hh.ru в вашем браузере, вы увидите окошко авторизации. Отлично, теперь следующий шаг: вытаскиваем из url код и передаем его вместе с Client ID и Client Secret обратно к API hh.ru, сделав POST-запрос посредством curl. В качестве ответа приходит уже JSON, содержащий токен доступа (поле access_token), вот его-то нам и надо. Не поленитесь, взгляните, что там такое содержит дамп var_dump($out) ? Помещаем токен в массив $headers, который и будем теперь использовать в ходе дальнейших запросов к API hh.ru:

 

if ($curl = curl_init()) {
curl_setopt($curl, CURLOPT_URL, 'https://hh.ru/oauth/token');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "grant_type=authorization_code&client_id=" . $client_id . "&client_secret=" . $client_secret . "&code=" . $_GET['code']);
$out = curl_exec($curl);
curl_close($curl);
}
$token_json = json_decode($out);
$headers = array(
'Authorization: Bearer ' . $token_json->access_token,
'User-Agent: Masterpro'
);

 

Комментируемый в статье код является лишь примером, хотя и полностью рабочим; используя полученный токен (заголовок Authorization: Bearer your_access_token) - вы получаете доступ к любым, предусмотренным разработчиками API, запросам, сделанным под учетной записью соискателя или работодателя; подробности см. в документации API HeadHunter.

 

Снова curl, но теперь уже GET-запрос к API, причем заголовок запроса на этот раз содержит полученный token. Взглянув на этом шаге дамп вернувшегося $out - обнаружим длинный-предлинный JSON, содержащий, пожалуй, всю информацию наших с вами резюме. И все, что нам теперь осталось сделать - это обработать полученные данные циклом foreach, выудив из вороха инфы идентификаторы резюме, а затем отправить через curl последний POST, результатом которого окажется републикация (обновление) всех резюме учетной записи:

 

if ($curl = curl_init()) {
curl_setopt($curl, CURLOPT_URL, 'https://api.hh.ru/resumes/mine');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$out = curl_exec($curl);
curl_close($curl);
}
$resumes = json_decode($out);
foreach ($resumes->{'items'} as $item) {
if ($curl = curl_init()) {
curl_setopt($curl, CURLOPT_URL, 'https://api.hh.ru/resumes/' . $item->id . '/publish');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$out = curl_exec($curl);
echo $out;
curl_close($curl);
}
}

 

Порт php-скрипта на ruby on rails: HeadHunter resume updater on Ruby on Rails.

 

Если в ответ придет "description":"Can't publish resume: too often" - уверен, вы и без моих комментариев поймете, в чем тут дело. Все получилось, не правда ли?

4 комментарии

  • Aleksej

    написал Aleksej

    Суббота, 19 августа 2017 21:56

    Сделал для разнообразия на ruby аналогичный скрипт под API SuperJob, кому надо: https://masterpro.ws/superjob-resume-updater-on-ruby-on-rails

  • Aleksej

    написал Aleksej

    Четверг, 03 августа 2017 08:45

    Сложно или нет - все относительно, как известно; но линк на нерабочий скрипт здесь точно не нужен, удаляю. Что касается суперджоба - обращайтесь ежели что, напишу.

  • Данила

    написал Данила

    Среда, 02 августа 2017 18:03

    Здравствуйте!

    Подскажите пожалуйста, сложно ли написать подобный скрипт для superjob.ru?

    В интернете нашел только один такой скрипт на powershell и тот не рабочий. Тут

  • HR

    написал HR

    Четверг, 20 июля 2017 07:36

    Стоит опубликовать телефон на hh.ru, тут же начинают названивать спамеры с телефона +78126037632, задолбали. Мой совет этот номер сразу в блэклист все, кто ищет работу на headhunter.

Оставить комментарий

Добавьте ваш комментарий