Сравните с теми же Суперджобом, Job.ru или Rabota.ru, где все значительно проще... не, как хотите, а неудобно. Явно заказчик сэкономил на бюджете, а прогеры оперативно просекли ситуацию и недопилили; что же, дело знакомое. Причем явно недопил это не единственный: я почему-то был уверен, что, коль скоро страничка резюме на hh.ru содержит переключатель - с русского на английский - то и механизм создания двуязычного резюме явно обязан здесь присутствовать... ан нет, опять облом. Ох уж эти мне программисты, что за люди, а? - дикий народ. Дети гор.
"Ну, рисовать картины не сподобил меня создатель...", т.е. разработку многоязычного резюме HeadHunter придется оставить, видимо, для будущих поколений, когда нас с вами, уважаемый читатель, никакая работа явно уже волновать не будет: будем день-денькой греть спинку на солнышке, наслаждаясь заслуженным отдыхом и роскошной пенсией (какой к тому времени по счету будет президентский срок у ВВ, даже гадать не хочу); - ну, а пока суть да дело, обновлять ваши многочисленные резюме одним-двумя кликами мышки я вас научу. Не забывайте, на дворе 21 век, и у нас с вами есть относительно новый HeadHunter API, использующий для авторизации протокол OAuth2; вот с ними и поработаем. Черт с ней, с пенсией, где там наша не пропадала.
Update 04.04.2022. Все, кто хотел бы, используя описанную логику кода или любую иную, поэкспериментировать с API HeadHunter, примите добрый совет: не пробуйте этого делать на праздниках и уикендах, в такие дни API HeadHunter, случается, или лежит, или возвращает голимую херню вместо обусловленного докой JSON. На прошедших выходных имел случай в *дцатый раз убедиться в справедливости данного тезиса; подробно не анализировал, ибо не вижу в данном случае ни малейшего смысла терять свое время. А внешняя фабула такова: ранним утречком в понедельник, часиков эдак в 11 или 12, появляются, видимо, на работе гениальные российские прогеры/девопсы HeadHunter и поднимают свой API, т.е. плюс-минус к полудню все начинает, как ни в чем ни бывало, работать. Обращаться в саппорт с этим бесполезно, последует обычное русское #ихтамнет и #авотнедокажете, посему просто примите к сведению сказанное: ну вот так люди здесь живут и работают, иначе не умеют, въелось у них в плоть и кровь... подробно развивать данный тезис в контексте происходящих невеселых событий в данный момент не стану, по вполне понятным причинам, но вы меня поняли.
Итак, поехали. Все описанные далее действия визуально исчерпаны всего лишь одним-единственным кликом по ссылке.. но для начала неплохо бы открыть личный кабинет на 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'
);
Снова 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);
}
}
Если в ответ придет "description":"Can't publish resume: too often" - уверен, вы и без моих комментариев поймете, в чем тут дело. Все получилось, не правда ли?