diff --git a/README.md b/README.md index b61e586..be5d5ad 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ ![サンプル画像](https://imgur.com/9T2Tg7W.png) * ↑のような感じで、AtCoderの質問(Clarification)が来たらSlackに通知します。 -* owner権限を持っている前提のコンテスト管理者用のツールのため、コンテスタントだと使えません。 -* AtCoder Beta版には対応していません。 +* Manager権限を持っている前提のコンテスト管理者用のツールのため、Contestantだと使えません。 +* 旧サイト(`https://xxx.contest.atcoder.jp`)の廃止に伴い、新サイト(`https://atcoder.jp/contests/xxx`)に対応しました。 ## 使い方 @@ -19,7 +19,7 @@ cp config_sample config 2. configファイルを以下の例に従って編集。 ``` -CONTEST_URL=https://jag2017autumn.contest.atcoder.jp # クラー通知したいコンテストのURL(Beta版には対応していません) +CONTEST_URL=https://atcoder.jp/contests/jag2017autumn/ # クラー通知したいコンテストのURL ATCODER_ID=username # コンテストの管理権限を所持しているユーザのID ATCODER_PASS=password # ユーザのパスワード SLACK_HOOK_URL=https://hooks.slack.com/services/XXXX/XXXX/XXXX # slackのincoming webhook url ※1 diff --git a/config_sample b/config_sample index f6b2484..132c2dd 100644 --- a/config_sample +++ b/config_sample @@ -1,4 +1,4 @@ -CONTEST_URL=https://hogehoge.contest.atcoder.jp +CONTEST_URL=https://atcoder.jp/contests// ATCODER_ID= ATCODER_PASS= SLACK_HOOK_URL= diff --git a/login.sh b/login.sh index 25f46fd..8368895 100755 --- a/login.sh +++ b/login.sh @@ -1,3 +1,5 @@ set -e source ./config -curl -c ./cookiejar -F "name=${ATCODER_ID}" -F "password=${ATCODER_PASS}" "${CONTEST_URL}/login" +LOGIN_URL='https://atcoder.jp/login' +CSRF_TOKEN=$(curl -c ./cookiejar -s ${LOGIN_URL} | grep 'csrfToken' | cut -f 2 -d '"') +curl -b ./cookiejar -c ./cookiejar -X POST -F "csrf_token=${CSRF_TOKEN}" -F "username=${ATCODER_ID}" -F "password=${ATCODER_PASS}" "${LOGIN_URL}" diff --git a/main.sh b/main.sh index f832547..c8abff3 100755 --- a/main.sh +++ b/main.sh @@ -1,7 +1,7 @@ set -e source ./config -curl -s -b ./cookiejar "${CONTEST_URL}/clarifications" > ./clar.html -python3 ./read_clar.py ./clar.html ${CONTEST_URL} ./clar1.json +curl -s -b ./cookiejar "${CONTEST_URL%/}/clarifications" > ./clar.html +python3 ./read_clar.py ./clar.html ./clar1.json if [[ -e ./clar0.json ]]; then python3 ./diff_clar.py ./clar0.json ./clar1.json ./slack.sh fi diff --git a/read_clar.py b/read_clar.py index 4f7714b..3d6b807 100644 --- a/read_clar.py +++ b/read_clar.py @@ -2,32 +2,36 @@ import re import sys -CONTEST_URL = sys.argv[2] -SAVE_PATH = sys.argv[3] - -def func(s): - m = re.search(r"(.*)", s) - return "<%s%s|%s>" % (CONTEST_URL, m.group(1), m.group(2)) +SAVE_PATH = sys.argv[2] data = [] with open(sys.argv[1], encoding="utf-8") as f: - a = re.findall(r".*?", f.read(), re.S) - if not a: + tbody = re.findall(r".*?", f.read(), re.S) + if not tbody: print(" not found") else: - assert len(a) == 1 - a = re.findall(r".*?", a[0], re.S) - for x in a: - b = re.findall(r"", x, re.S) - title = func(b[0]) - user_name = func(b[1]) - assert re.fullmatch(r".*", b[2], re.S) - assert re.fullmatch(r".*", b[3], re.S) - question = re.sub(r"<.*?>", "", b[2][4:-5]).replace("'", "'") - response = re.sub(r"<.*?>", "", b[3][4:-5]).replace("'", "'") - public = re.sub(r"<.*?>", "", b[4]) - update_url = CONTEST_URL + re.search(r"", b[7]).group(1) + assert len(tbody) == 1 + rows = re.findall(r"", tbody[0], re.S) + for row in rows: + columns = re.findall(r"", row, re.S) + + title = re.sub(r"\s+", " ", columns[0])[4:-5].strip() + if title == "": + title = "(指定なし)" + else: + m = re.search(r"(.*)", title) + title = "<%s|%s>" % ("https://atcoder.jp" + m.group(1), m.group(2).strip()) + + m = re.search(r"(.*).*.*", columns[2], re.S) + assert re.fullmatch(r".*", columns[3], re.S) + question = re.sub(r"<.*?>", "", columns[2][55:-11]).replace("'", "'") + response = re.sub(r"<.*?>", "", columns[3][55:-11]).replace("'", "'") + public = re.sub(r"<.*?>", "", columns[4][4:-5]) + update_url = "https://atcoder.jp" + re.search(r"", columns[7]).group(1) data.append({ "title": title,