Первый опыт использования API.hh.ru

от автора

Версия 1.02//Да, на Хабре не хватает версионности статей. Комментарии помогают вносить улучшения в статью.

Добрый день.

Пару лет назад в support хедхантера(hh.ru) закинул предложение сделать дополнительную опцию поиска по ключевым навыкам помимо имеющихся трех(в названии вакансии, в названии компании, в описании вакансии). Мне ответили, что предложений по улучшению сервиса больше чем тьма, так что досвидос. Результат это исследование…

Узнал про api.hh.ru и решил начать делать парсер в Excel, чтобы результат как-то визуально легче анализировать. Дока по API на github.com/hhru/api нормальная, так что можно работать. В первую очередь я решил проанализировать справочник ключевых навыков(key_skills). Пока он вытягивался выяснилось, что первые тысячи полторы — это стандарт введенные по умолчанию. А остальные разброд и шатание, я остановился на 13000 и бросил загрузку. Понятно, надо переходить к парсеру.

Первый вывод данных я сделал таким:

image

Как его применить я не придумал. Поэтому решил сделать как в РСУБД и потом сделать сводную таблицу для фильтраци. И теперь вывод такой:

image

Сразу выложу код и по порядку.

Sub vvv()     Dim http     Set http = CreateObject("WinHttp.WinHttpRequest.5.1")     timeout = 2000 'milliseconds     http.setTimeouts timeout, timeout, timeout, timeout     http.Option(2) = 0 'Замена дефолтного значения 65001 для отмены преобразования в utf-8     Dim url_ As String     url_ = "https://api.hh.ru/vacancies?text=NAME:(Программист) and DESCRIPTION:(NOT intermediate)&area=1&only_with_salary=true&no_magic=true&salary=100000&currency_code=RUR&period=30&label=not_from_agency&order_by=publication_time"     http.Open "get", url_     http.send     text = http.responseText     If InStr(text, "errors") > 0 Then         Debug.Print text         Stop     Else         If text <> "" Then             Set qwe = JsonConverter.ParseJson(text)         End If     End If     CountV = qwe("found")     CountP = qwe("pages")     isk = 1 On Error GoTo AfterSk     For pg = 1 To CountP         If pg > 1 Then             url_ = "https://api.hh.ru/vacancies?text=NAME:(Программист) and DESCRIPTION:(NOT intermediate)&area=1&only_with_salary=true&no_magic=true&salary=100000&currency_code=RUR&period=30&label=not_from_agency&order_by=publication_time&page=" & pg             http.Open "get", url_             http.send             text = http.responseText             Set qwe = JsonConverter.ParseJson(text)         End If         For i = 1 To 20             ii = (pg - 1) * 20 + i             Set Item = qwe("items")(i)             url1 = Item("alternate_url")             ThisWorkbook.Worksheets(2).Cells(ii + isk, 1) = Item("name")             ThisWorkbook.Worksheets(2).Cells(ii + isk, 3) = url1             ThisWorkbook.Worksheets(2).Cells(ii + isk, 1).Font.Bold = True             ThisWorkbook.Worksheets(2).Cells(ii + isk, 1).Font.Size = 14             ThisWorkbook.Worksheets(2).Cells(ii + isk, 3).Font.Bold = True             url_ = Item("url")             url_ = Replace(url_, "?host=hh.ru", "")             http.Open "get", url_             http.send             text = http.responseText             Set vak = JsonConverter.ParseJson(text)             Set keySkills = vak("key_skills")             CountSk = keySkills.Count             If CountSk > 0 Then                 For jj = 1 To CountSk                     If jj <> 1 Then isk = isk + 1                     ThisWorkbook.Worksheets(2).Cells(ii + isk, 1) = Item("name")                     ThisWorkbook.Worksheets(2).Cells(ii + isk, 2) = keySkills(jj)("name")                     ThisWorkbook.Worksheets(2).Cells(ii + isk, 2).Font.Italic = True                     ThisWorkbook.Worksheets(2).Cells(ii + isk, 3) = url1                 Next jj '            Else '                ThisWorkbook.Worksheets(2).Cells(2 + (ii - 1) * 3, 1) = vak("description") '                ThisWorkbook.Worksheets(2).Cells(2 + (ii - 1) * 3, 1).Select '                Rows("2 + (ii - 1) * 3:2 + (ii - 1) * 3").EntireRow.AutoFit             End If AfterSk:         If Err.Number <> 0 Then             'Stop             Resume Next             Err.Clear         End If             DoEvents         Next i     Next pg     Stop End Sub 

GET-запрос принимается в кириллице, а в Activex-контроле WinHttp.WinHttpRequest в свойстве Option(2) — кодовая страница utf-8(65001), поэтому потратил какое-то время на «почему русские буквы в запросе не находятся?» — заменил на 0.

Добавил в вывод ссылку на вакансию — она как бы уникальна.

Сделал сводную таблицу.

И как вы понимаете уникальный набор навыков из тысячи вакансий составил 1500, т.е. тот самый разброд и шатание, так что главная цель «подобрать вакансии максимально приближенные к навыкам, указанным у меня в резюме», вроде удалилась от меня.

Решил посчитать и выбрать любимые как-то так:

Заголовок спойлера

skill;count
Git;546
JavaScript;458
SQL;283
MySQL;255
PostgreSQL;251
ООП;197
Java;196
HTML;186
Linux;177
Python;164
C#;139
HTML5;131
MS SQL;120
REST;82
XML;61
.NET Framework;56
MVC;55
ASP.NET;51
MS SQL Server;49
.NET Core;24
Entity Framework;21
HTTP;20
MS Visual Studio;20
Rest API;18
TCP/IP;15
Cистемы управления базами данных;13
LINQ;12
SQLite;12
WCF;11

В общем добавлю в вывод зп и может что еще но продолжение автоматизации застопорилось. Дальше ручками Ctrl+C, поиск.

Если есть идеи и предложения, давайте обсудим и продолжим.

Прим.1. Освоить иностранный до уровня intermediate быстро не смогу и максимум вакансий, выдаваемых API = 2 тысячи по умолчанию по 20 на странице, поэтому запрос в коде сделал такой.

Конвертер json взял здесь github.com/VBA-tools/VBA-JSON.

Всё. Мир меняется — Адаптируюсь. И вам не болеть.

PS:
В общем-то статья не столько техническая, сколько об аспектах поиска работы. Хотелось бы увидеть комментарии о том как порталам типа hh улучшить использование некоторых моментов.
Вот, например, затронутые в статье ключевые навыки.
Если в вакансиях/резюме указывать для каждого навыка уровень владения(Начинающий, Средний, Сеньор) — это помогло бы увеличить вывод по релевантности в результатах поиска.

ссылка на оригинал статьи https://habr.com/ru/post/522096/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *