Qiitaへの連続投稿数を取得する(Qiita Posting Streak)
はじめに
この人はどのくらい連続でQiitaに投稿しているのだろう?ということを気軽に知りたいと思いました。
作ったもの
Qiita API v2のAPIを、Python 3.6.3で呼び出して整形・出力しています。
質素ですみません。
使い方
qiita_streak.py
を実行すると、入力を要求されますのでユーザー名を入力してください。
私の場合ですと、aki-nasu
です(@
は要りません)。
current streak
が、最新の連続投稿数です。
most streak
が、今までで一番長かった連続投稿数です(longestのほうがよかったか)。
解説
非常に簡単にですが、一部解説です。
-
使用したライブラリ
-
requests
: HTTPライブラリ -
datetime
: 日付型、時間型のPython標準ライブラリ
-
年月日が一致してるかどうかを返します(日付型の扱いが調べてもわからなかったので自前で無理やりです)。
def compareYMD(d1, d2):
return d1.year == d2.year and d1.month == d2.month and d1.day == d2.day
- Qiita APIの呼び出し部分です。今回使用したAPIのレスポンスは、記事の作成日時降順です。
r = qiita_request.get_user_items(input('username : '))
↓ qiita_request.py
import requests
URL = "https://qiita.com/api/v2/"
def get_user_items(user_id):
return requests.get(URL + "users/" + user_id + "/items").json()
- 1つ目のデータ(その人の最新記事)の作成日時(
created_at
)が、今日もしくは昨日だったらcurrent_streak+=1
してます。 - 2つ目以降のデータは、1つ手前の作成日時と1日違いかどうかでstreakしてるか判断しています。
if compareYMD(pre_date, r_created_at[0]) or compareYMD(pre_date, r_created_at[0] + inc_day): current_streak += 1
most_tmp += 1
most_streak = max(most_streak, most_tmp)
pre_date = r_created_at[0]
for i in range(1,n):
if compareYMD(pre_date, r_created_at[i]): continue
if compareYMD(pre_date, r_created_at[i] + inc_day):
if current_streak > 0: current_streak += 1
most_tmp += 1
else:
if current_streak > 0: current_streak *= -1
most_streak = max(most_streak, most_tmp)
most_tmp = 1
pre_date = r_created_at[i]
most_streak = max(most_streak, most_tmp)
if current_streak < 0: current_streak *= -1
おわりに
datetimeの扱いがよくわからず無理やりになっていると思います。
出来れば、ネイティブアプリにしてもっと手軽にStreakチェックしたかったですね。
ちなみに、最初の実行例は私のではありません。私は下記の通り連続投稿などしたことがありません。
ですが、今日からGW改めステイホームウィークですし、その間だけでも毎日投稿に挑戦してみます(4月25日~5月6日まで)。結果は最終日に追記します。出来ない気しかしません。
参考
2020/05/01 追記
毎日投稿することに価値を感じなくなったので、Qiita連続投稿を引退します。
Author And Source
この問題について(Qiitaへの連続投稿数を取得する(Qiita Posting Streak)), 我々は、より多くの情報をここで見つけました https://qiita.com/aki-nasu/items/7dd38c891ea7be4dc194著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .