草体にぼ日記

だらだらと

開発日誌 ~公開できなくて草 編~

こんにちは~、帝京平成大学の皆さん!Fooomily Mart です!!

昨日やったこと

これを見て

こうなって

こう。

で、

これをしたくなって、コードを書いた 。

結果

nibosea
灰で過ごした期間: 
195 days, 1:00:00
茶で過ごした期間: 
126 days, 23:00:00
緑で過ごした期間: 
147 days, 0:00:00
水で過ごした期間: 
90 days, 1:00:00
緑で過ごした期間: 
35 days, 23:00:00
水で過ごした期間: 
69 days, 1:00:00
緑で過ごした期間: 
20 days, 23:00:00
水で過ごした期間: 
7 days, 1:00:00
緑で過ごした期間: 
8 days, 0:00:00
水で過ごした期間: 
167 days, 23:00:00
緑で過ごした期間: 
117 days, 0:00:00
水で過ごした期間: 
8 days, 0:00:00
緑で過ごした期間: 
14 days, 0:00:00
水で過ごした期間: 
50 days, 1:00:00
緑で過ごした期間: 
6 days, 23:00:00
水で過ごした期間: 
7 days, 1:00:00
緑で過ごした期間: 
5 days, 23:00:00
水で過ごした期間: 
14 days, 1:00:00
緑で過ごした期間: 
23:00:00
水で過ごした期間: 
48 days, 2:00:00
緑で過ごした期間: 
6 days, 22:00:00
水で過ごした期間: 
1 day, 1:00:00
緑で過ごした期間: 
1 day, 15:19:08.177570
灰:
195 days, 1:00:00
茶:
126 days, 23:00:00
緑:
365 days, 8:19:08.177570
水:
462 days, 8:00:00
青:
0:00:00
黄:
0:00:00
橙:
0:00:00
赤:
0:00:00

使いたい人へ

Paiza.ioのリンクシェアします。使ってください。 Online PHP/Java/C++... editor and compiler | paiza.IO

入力に自身のAtCoder usernameを入れれば動作します。
バグってたら勝手に直してください

開発日誌

ようわからん。

nibosea's Competition History - AtCoder このページから日付と新Ratingのところ引っ張ってきたらいいんだろう? HTMLとったりをPythonでやろうとする。

Ryuki「jsonあるよ」

よくわからんが、HTMLとかしなくても楽になるらしい

https://atcoder.jp/users/nibosea/history/json

あった。 jsonは辞書の配列形式になっているらしい。 data[1]["NewRating"]みたいに書くと(0-indexed)1回目のコンテスト後のレートが得られる。

で、出きたコードが Online PHP/Java/C++... editor and compiler | paiza.IO

import requests, json
import re
from datetime import datetime as dt
from datetime import timedelta

def get_color(x):
    if x == 0:
        return 0
    x = min(2800,x)
    x = x + 1
    return (x+399) // 400

username = input()
#対象のurl
target_url = "https://atcoder.jp/users/"
target_url += username
target_url += "/history/json"

#サイト管理者に分かるように自身の連絡先などをUser-Agentに記載する
headers = {
    'User-Agent': "nibosea"
}

#対象ページのhtml
html = requests.get(target_url, headers=headers).text

url = requests.get(target_url)
text = url.text

data = json.loads(text)
color = list("黒灰茶緑水青黄橙赤")

color_mae = 0;
zero = timedelta(0)
color_day = [zero] * 9 
date = dt.strptime(data[0]["EndTime"][0:13], '%Y-%m-%dT%H')

date_sum = timedelta(0)
print(username)
for row in data:
    now_date = dt.strptime(row["EndTime"][0:13], '%Y-%m-%dT%H')
    #前回のコンテスト終了からの日数を算出する
    date_delta = now_date - date
    date = now_date
    ind = get_color(row["NewRating"])
    color_day[color_mae] = color_day[color_mae] + date_delta
    #色変したら、〜色で過ごした期間を出力する
    date_sum += date_delta
    if ind != color_mae:
        if color_mae == 0:
            color_mae = ind
            continue
        print(color[color_mae]+"で過ごした期間: ")
        print(date_sum)
        date_sum = timedelta(0)
    color_mae = ind
# 今の日付も考える
now_date = dt.now()
#前回のコンテスト終了からの日数を算出する
date_delta = now_date - date
color_day[color_mae] = color_day[color_mae] + date_delta
date_sum += date_delta
print(color[color_mae]+"で過ごした期間: ")
print(date_sum)
date_sum = timedelta(0)
color_mae = ind
for i, _ in enumerate(color_day): 
    if i == 0: continue
    print(color[i] +":")
    print(_)

本当は AtCoder Rating Simulator みたいな感じで公開したかったのですが…

このコードを書いている途中 Ryukiら「Pythonで書いたら公開できなくない?JavaScriptとかなら…云々」
にぼし「草、まぁ、ブログで『Pythonで書いたのでWebアプリにできませんでした(終わり)』って書けば実質公開できたことになるっしょ。」 って感じで、まあ実質公開ということでokにしました。

誰かへ

これをWebページにしてくれ(投げやり)

遺書

pythonはWebアプリに向かないらしい?知らんけど
適当にコード書いてもそれを全人類が使えるようにするのは難しい