API.hh.ruを使用した最初の経験

バージョン1.03 //はい、Habréに関する記事のバージョン管理が不十分です。コメントは、記事を改善するのに役立ちます。



こんにちは。



数年前、ヘッドハンターのサポート(hh.ru)で、利用可能な3つのスキル(役職、会社名、仕事の説明)に加えて、主要なスキルの追加検索オプションを作成する提案を投げました。暗闇よりもサービスを改善するための提案が多いと言われたので、dosvidos。結果はこの研究です...



私はapi.hh.ruについて知り、Excelでパーサーの作成を開始することにしました。これにより、結果を視覚的に分析しやすくなりました。github.com/hhru/apiのAPIドックは問題ないので、作業できます。まず、Key Skills Reference(key_skills)を分析することにしました。彼がストレッチしている間、最初の千年半がデフォルトで導入された標準であることが判明しました。そして、残りの混乱とぐらつき、私は13,000で停止し、負荷を落としました。明らかに、パーサーに行く必要があります。



私は次のようにデータの最初の結論を出しました:



画像



私はそれをどのように使用するかを考えていませんでした。そのため、RDBMSのように実行してから、フィルタリング用のピボットテーブルを作成することにしました。そして今、結論は次のとおり



画像



です。コードをすぐに順番にレイアウトします。



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
    url0 = "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", url0
    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_ = url0 & "&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リクエストは、Cyrillicと、Option(2)プロパティのActivexコンポーネントWinHttp.WinHttpRequest(utf-8コードページ(65001))で受け入れられるため、「リクエストにロシア語の文字が含まれていないのはなぜですか?」に時間を費やしました。--0に置き換えられ



ました。出力に空席へのリンクが追加されました-一意のようです。



ピボットテーブルを作成しました。



そして、あなたが理解しているように、1000の欠員のうちのユニークなスキルのセットは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。外国語を中級レベルまですばやく習得することはできず、APIによって発行される空席の最大数はデフォルトで2,000、1ページあたり20であるため、コード内の要求によってこれが行われました。



jsonコンバーターはここからgithub.com/VBA-tools/VBA-JSONを取得しました



JSONコンバーターを機能させるには:

Excelを開き、[開発者]タブの表示をオンにします([開発者]

> [Visual Basic]リボン内)[Visual BasicEditor]に移動します

参照のリストを開きます:[ツール]> [参照...]で

「MicrosoftScriptingRuntime」と「MicrosoftVBScriptRegularExpressions5.5」を確認してください。[OK]をクリックします。



すべて。世界は変化しています-私は適応しています。そして、あなたは病気になりません。



PS:

一般的に、この記事は求人検索の側面ほど技術的ではありません。hhのようなポータルがいくつかのポイントの使用をどのように改善できるかについてのコメントを見てみたいです。

たとえば、この記事で説明されている主要なスキルは次のとおりです。

欠員/再開が各スキルの習熟度(初級、中級、上級)を示している場合、これは検索結果での関連性の表示を改善するのに役立ちます。



All Articles