kotでKingOfTimeの打刻や勤務時間を確認してみた

2023.02.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

KingOfTimeで出勤打刻をした時に、たまにネットワークエラー等で正常に打刻されていないことがあります。管理画面から確認すれば即わかりますが、毎回開くのも中々面倒です。

KingOfTimeのAPIは一般向け公開となっておらず、APIを経由してのステータス取得はハードルが高めです。普段使っているMyレコーダーChromeアシスタントも公式提供のレコードページをアドオンとして扱っている仕組みで、直接APIキーに触れることはありません。

故に手段はなさそうだと思っていましたが、全くないわけでもありません。

パッケージネームは紛らわしいなとは思いますが、使い勝手は十分です。KingOfTimeのドメインによっては修正が必要ですが、正常に動作すると以下のような出力となります。

修正箇所も合わせて記載しました。

セットアップ

ソースコードをcloneします。

git clone https://github.com/takaiyuk/kot.git
cd kot
cp ./config.yaml.example ./config.yaml

そのままセットアップするとwebdriver-managerが最新のheadless Chromeを正常に取得できないため、fixされている版以降に差し替えます。

requirements.txt

-webdriver-manager==3.7.0
+webdriver-manager==3.8.5

依存ライブラリをインストールします。poetryが使われているものの、依存の解決でスタックしてすすまなかったためpipenvを利用しました。

pipenv install -r requirements.txt

次にs2.kingtime.jpを使っている場合は修正をいれます。

kot/scrapekot/crawl.py

--- a/kot/scrapekot/crawl.py
+++ b/kot/scrapekot/crawl.py
@@ -5 +5 @@ from kot.common.crawl import BaseCrawler
-TOP_URL = "https://s3.kingtime.jp/admin"
+TOP_URL = "https://s2.kingtime.jp/admin"

kot/scrapekot/scrape.py

--- a/kot/scrapekot/scrape.py
+++ b/kot/scrapekot/scrape.py
@@ -115 +117 @@ class Scraper:
-        work_hours = self._clean_text(self.soup.find("td", class_="custom3").string)
+        work_hours = self._clean_text(self.soup.find("td", class_="custom1").string)
@@ -128,3 +130 @@ class Scraper:
-            st_string_dirty = self.soup.find_all("td", class_="start_end_timerecord specific-uncomplete")[
-                -2
-            ].text
+            st_string_dirty = [x.text for x in self.soup.find_all("td", class_="start_end_timerecord") if self._clean_text(x.text) != ''][-1]
+            if st_string_dirty[:4] == 'C(L)':
+                st_string_dirty = 'C' + st_string_dirty[4:]

このkot自体もコマンドの一部として利用するため、ローカルインストールします。

pipenv install .

config.yamlのaccount設定にKoTのアカウント及びパスを書き入れて準備完了です。

実行する

% pipenv run python -m kot scrape --console
ScrapeKOTParams(is_amazon_linux=False, browser_kind=<BrowserKind.chrome: 'chrome'>, is_headless=True, is_console=True)

    残りXX.0営業日: (X.0/XX.0 日)

    あとXX時間XX分必要: (XX時間XX分/XXX時間)

    貯金: 0時間XX分

    貯金を元に残り営業日の必要勤務時間数を算出すると: X時間XX分

    2023-02-13の出勤・定時
        出勤: 10:XX
        定時: 19:XX

Unknown label foundと出力された場合はkot/scrapekot/scrape.pyに有給及び欠勤用のラベル一覧に追加しておきます。

あとがき

Dockerイメージとしても設定可能となっているはずですが、ファイルパスの取り扱い等でエラーが発生したためにローカルでの実行を採用しました。

King Of Timeの打刻確認は勿論のこと、一日の所定勤務時間余剰もすぐに分かるのでSpreadsheetで計算する手間が省けて便利です。流石にスケジュール申請等は不可能ですが、現状での累積時間確認を楽に行いたい場合はおすすめです。