Qiita のマイページを見てたら、いつの間にか Contribution っていう値が出てた。(いつの間にかじゃない)
これって何だろうと思うと同時に、意外と使えるんじゃないかと。
私は「インプットを増やすならアウトプットしないといけない」と思っている。アウトプットしてアウトプットして、自分の中が空っぽになってもアウトプットして、アプトプットするために勉強して初めてインプットが出来ると。
なので、例えばチームの中でみんなで Qiita にアウトプットして、その Contribution の値で競えば、アウトプットの促進、ひいてはインプットの促進になるんじゃないかと。
そのための射幸心を煽るツールとして、Contribution って使えるんじゃないかと。
多分 Contribution って、Qiita の中の人が「その人の活動の具合」を測るために色んなパラメータを上手い具合に計算して、いい感じの値になるように絶妙に調整された値なんじゃないかと。(煽りすぎ)
決して自分が適当に好きなことを Qiita に吐き出してるのを正当化してる訳では無いです。
Qiita API v2
で、多分 Contribution って自分の投稿数とか計算してるんだろうと。
じゃあそれを取ってくるにはどうしたら良いかと探すと、Qiita API v2 ってのがあった。これこれ。
GET を投げると JSON で返ってくるってことは、requests でパッパと書けるな。
API トークンってのが必要らしいけど、このベージから、「個人用アクセストークン」ってのを作れば良い。
トークンが無いと1時間あたり60回までしかAPIを叩け無いけど、トークンを付ければ1時間あたり1000回までになる。
Contribution とは
じゃあ Contribution って実際どうやって計算してるのかと調べると、まさしくContributionとはというページが有った。
すげぇちゃんと計算してる。
しっかり計算してみるかと、ここに挙がっている値を全部 Qiita API v2 で取ってこようと思ったのだが、
全然取れない。
もちろん投稿数とか LGTM 数とか取れるんだけど、例えば「編集リクエストが承認される」なんて全然無理っぽい。
じゃあ、Qiita API v2 で取れる範囲で計算しようじゃないかと。ということで、「なんちゃって Contribution」というのを、以下で定義した。
なんちゃってContribution = 投稿数 + LGTM数 + 0.5 * ストック数
この 0.5
ってのが、LGTM とストックの重要度を比較するのに丁度良い塩梅なんじゃないかと。
作ってみた
ということで、作っております。
特徴
- 複数ユーザーの情報を取ってきて、ランキング形式で出力(射幸心!)
- 念の為、API を余分に発行しない限り、Contribution 以外にも取れる情報を出力
- 一定の期間に作られた投稿だけをカウントすることが可能
- 特定の期間だけで競い合いたい、という場合に
- 最終更新日が start 以降、作成日が end 以前という甘い設定だけど
- 作成日が start 以前であっても、最終更新日が start 以降だったらカウント
- 作成日が end 以前であれば、最終更新日が end 以降であろうともカウント
- LGTM, ストックは上記でカウントする投稿に対して行われたものだけを合計
- Contribution は最終的に四捨五入してるっぽいので、四捨五入してる
- 浮動小数点の誤差とか考えんのメンドイんで、適当
- Python の round() は偶数丸めなんだよ
作ってみた感想(Qiita API v2 への愚痴)
作ってはみたものの、すげー重い。
ちゃんと調べてないけど、たぶん記事一覧とか持ってっくる時に、本文まで全部持ってきちゃうから。
1回のAPIでの通信量が多すぎることが怖いので、pagenation あたりの記事数もそんなに増やせない。
通信量も通信回数も多くて、全然速くならない。
たぶん Qiita API って、こういう目的では作って無くて、普段の Qiita でやることを API で済ますことが出来るように、って考えて作られたからだと思う。
なので要望(愚痴)を書き記しておく。
(いえ〜い、Qiita の中の人、見てる〜?)(見てない)
-
GET /api/v2/users/:user_id/items
とGET /api/v2/item/:item_id
に「本文とか要らないからメタ情報だけくれ」っていうパラメータが欲しい -
GET /api/v2/users/:user_id/items
に、created_at
もしくはupdated_at
で絞り込みが出来るパラメータが欲しい
まとめ
アウトプット!射幸心!