atcoder-submit-statusのご紹介です!
この記事は呉高専 Advent Calendar 2022 6日目用に書かれた記事です
これは何?
hr.icon
https://github.com/ngng628/atcoder-submit-status/raw/main/screenshot/demo.gif?raw=true
AtCoderの提出結果がacss abc280などとすることで取得できます。
インストールは pip install atcoder-submit-statusで行えます。
推しポイント
hr.icon
んぐ.icon 自動提出スクリプト(oj)を使っている人は、その提出がACしたか見に行くのが面倒というのがあると思います
デフォルトだと自動で提出ページがデフォルトで開くようになっているけど、結果が出るまでずっと張り付くのは時間的にも無駄です
んぐ.iconこれは余談ですが、oj s --no-openとするとブラウザで開かなくなります
そこでこのスクリプトを画面下の方で常時走らせておくと、いつでも提出結果が確認できます。
これで、提出結果を待っている間も問題文を見たり、ファイルをエディタで開いたり…などという操作が行えます。
んぐ.icon特にタイル型wmと相性が良いです
リッチなCUIを採用したので視認性にも優れています
どうやって作ったの?
hr.icon
Pythonのrequestsを使って提出結果のHTMLをスクレイピングして、ほしい部分をprintしているだけです。
HTMLからスクレイピングするのはBeautifulSoup使えばできます
んぐ.iconログイン関係に必要なcsrf_tokenもBeautifulSoupを使えば2行で取ってこれます。構文解析しなくていいんだね、便利
自分しか見れない提出一覧(コンテスト中の提出など)を確認するために、ログイン機構が必要ですが、Cookieとrequests.Sessionを使えば実現できます
んぐ.icon仕組み的な部分はここが一番たいへんだった
もう少し詳しく話したいけど、書いたのが結構前なので覚えていなかった…
んぐ.icon これはAtCoderスクレイピングテクなのですが、https://atcoder.jp/contests/dummydummydummy/submitなど存在しないコンテストのURLにアクセスすると、ログイン状態では404ページに飛ぶのですが、ログアウト状態ではログインページに飛ぶので、これを利用すると自分がログインできているかできていないかが確認できます。
データの整形にはrichというライブラリを使っています
んぐ.iconCLIツール大好き人間にはぜひおすすめしたいライブラリで、あらゆる出力をリッチにできます
https://gyazo.com/8112cbf80c791276ad1cfd16f90e3bf9
テーブルやらMarkdownやらコードブロックやら
PyPIにアップロードだ!!!
hr.icon
自作のツールをどうやってデプロイしてもらうかはいつも悩みの種ですが、今回はpipでインストールできるようにしました。
実は、pipで配信されているパッケージは PyPI が管理していて、誰でも自由に投稿できます。 print('Hello')するだけのパッケージも公開できます。
普段お世話になっている場所に、自分のツールがあると思うとなんだかテンションが上がって、モチベにもつながるのでおすすめです。
んぐ.icon一つ罠があって、一度公開したバージョンは基本残り続ける上に、上書きすることができないので注意です。僕のacssコマンドもlatestは0.0.4なのに、0.0.9がアップロードされている謎な状態になっています
終わりに
hr.icon
CLIツール、黒い画面に白い文字いっぱい出てきてかっけ〜
みなさんもCLI沼にハマりましょう