Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support yukicoder token #672

Closed
kmyk opened this issue Feb 7, 2020 · 5 comments
Closed

support yukicoder token #672

kmyk opened this issue Feb 7, 2020 · 5 comments

Comments

@kmyk
Copy link
Member

kmyk commented Feb 7, 2020

https://t.co/KXCa8x4WC1

ヘルプページに「ログインしてないと使えない機能をAPIとして使いたい」を追記しました

— yukicoder公式アカウント (@yukicoder) February 7, 2020

verify helper から yukicoder が利用できるとうれしいので対応したい。
実装は単に --yukicoder-token みたいなオプションを用意するのがよさそう。YUKICODER_TOKEN みたいな環境変数を設定させてそれを読むのは一般には自然だが、現状の online-judge-tools は他にはまったく環境変数を見ないので一貫性が損われる。

「token を発行して適切に設定する」をエンドユーザにやらせるのは要求が大きすぎて良くない (例: verify helper のドキュメント生成機能を使えている人は半数ぐらいしかいない) のだけど、妥協案としては妥当。いままではログイン方法が多すぎ (これ自体はとてもよいこと) なためログイン自動化も無理で詰んでたので、可能になっただけでもありがたい。

cc: @beet-aizu

@beet-aizu
Copy link
Contributor

大体調べ終わったのであとは実装すればできそうです

以下調べたことのメモ:
/problems/{問題ID}/file にpostでリクエストを投げる
結果がそれぞれjsonで帰ってくる

入力一覧
{"action" : "index", "which" : "in" }

出力一覧
{"action" : "index", "which" : "out" }

個別のファイル
{"action" : "get", "which" : "in", "file" : "00.txt" }

CSRF tokenはトップページにアクセスして var csrf_token = の行をパースするのが楽そう

@beet-aizu
Copy link
Contributor

抜けてた

problems/no/{問題No} と problems/{問題ID} の対応の取り方がよくわからん

@beet-aizu
Copy link
Contributor

main/body/content に data-problem-id として入ってた これも自動化した方がいいのかな

@beet-aizu
Copy link
Contributor

ツイートボタンの横に ProblemId: で書いてありますね(目がついてなかった)

@kmyk
Copy link
Member Author

kmyk commented Feb 10, 2020

実はダウンロード部分はすでに実装済みです。以下のように実行すれば (login には webdriver を追加でインストールする必要があるけど) システムケースは取れます。なので、HTTPリクエストヘッダーになにかを設定するあたりだけやれば終わるはず。

$ oj login https://yukicoder.me/
$ oj download --system https://yukicoder.me/problems/no/880

https://github.com/kmyk/online-judge-tools/blob/e311e7cf1ed6cfb91fa8cb381ad5cdb06a57ef33/onlinejudge/service/yukicoder.py#L259-L270

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants