AtCoderNoviSteps icon indicating copy to clipboard operation
AtCoderNoviSteps copied to clipboard

問題の一覧をProblemsのAPIから取得できるようにしましょう

Open KATO-Hiro opened this issue 2 years ago • 9 comments

https://kenkoooo.com/atcoder/resources/problems.json

...
{
    "id":"abc319_a",
    "contest_id":"abc319",
    "problem_index":"A",
    "name":"Legendary Players",
    "title":"A. Legendary Players"
},
...

KATO-Hiro avatar Sep 14 '23 08:09 KATO-Hiro

RatedとなったABC42以降

KATO-Hiro avatar Sep 27 '23 13:09 KATO-Hiro

@KATO-Hiro こちら、着手していて、 jsonを取得して、登録されていない問題に「インポート」ボタンをつける形にしようとしていました。

ですが、APIから取得できる量が多くて見せ方に工夫が必要そうです。 6000件超です。 記載いただいている、ABCxxx以降、という指定は、開催日データがないため(多分別のデータをJOINすればできるのかも)難しそう。

ABCxxxごとにアコーディオンにして、(それでも1/6くらいにかならない?🤣) インポートも、ABCxxxごとにまとめてインポートできるほうがよいのではと思っています。 (細かい問題を出さなくてもcontest_idから指定してインポートでもいいのかも。)

prettyhappycatty avatar Jan 06 '24 10:01 prettyhappycatty

現在、問題ごとのAPIを利用しているのですが、コンテストごとのほうでしたら、APIに時間があるので可能な気がします。

コンテストごとのAPI→ https://kenkoooo.com/atcoder/resources/contests.json

問題のAPI→ https://kenkoooo.com/atcoder/resources/problems.json

画面から、コンテストを指定してインポートボタンを押すと、問題のAPIから検索をして必要なデータを流し込む感じがいいかなあと思っています。 ご意見あればいただけると嬉しいです。

prettyhappycatty avatar Jan 06 '24 10:01 prettyhappycatty

スクリーンショット 2024-01-06 20 19 40 スクリーンショット 2024-01-06 20 20 24

prettyhappycatty avatar Jan 06 '24 11:01 prettyhappycatty

@prettyhappycatty ありがとうございます!!

コンテスト単位でインポートができる方が私もいいと思います。 以下のような操作ができると管理者としては使いやすいと思いますが、実装が大変そうでしょうか? (コンテストを指定したらDBに未登録の問題をそのまま登録する方が楽であるのことは認識しているつもりです)

あるコンテストを選択→該当するコンテストのうち、DBに未登録の問題がモーダルに表示される→各問題でインポートするかどうかを判断→登録したい問題のみインポートボタン(もしくはチェックボックス)を押す or キャンセルできる

https://flowbite-svelte.com/docs/components/modal

KATO-Hiro avatar Jan 06 '24 13:01 KATO-Hiro

@prettyhappycatty 多分、モーダルのUI作るまではできると思うのですが、 登録してモーダルに戻ってくるのがちょっとしんどそうかなあと思いました。

2ndリリース以降でいいのかな?と。

もし、コンテストごとのインポートで何がインポートされるか知りたい、であればすぐに対応できると思います。(あくまでもタスク単位のインポートがちょっとしんどいかなという感じ。)

また、今はページを開くたびに、API見に行ってるのですが、 DBにどこかのタイミングで落として(例えば、APIから取得みたいなボタンを押したときに、未登録タスクDBにいれて)、 登録するときにはそちらを見に行ける方が良いなあと思っています。

あ、でもそれなら、Taskに、表示非表示のフラグをつけて、それを有効化するUIを作れば良いのですかね。

prettyhappycatty avatar Jan 06 '24 14:01 prettyhappycatty

ちなみに、ABC直前にContestのAPIまで行きました。(ヘッダ間違えていますが) スクリーンショット 2024-01-06 23 12 51

prettyhappycatty avatar Jan 06 '24 14:01 prettyhappycatty

@prettyhappycatty ご返信いただき、ありがとうございます!

登録してモーダルに戻ってくるのがちょっとしんどそうかなあと思いました。

2ndリリース以降でいいのかな?と。

もし、コンテストごとのインポートで何がインポートされるか知りたい、であればすぐに対応できると思います。(あくまでもタスク単> 位のインポートがちょっとしんどいかなという感じ。)

各コンテストでどの問題がインポートされるかを知りたいと思っていまして、モーダルは2ndリリース以降にした方が良さそうですね。

Taskに、表示非表示のフラグをつけて、それを有効化するUIを作れば良いのですかね。

一旦、DBに保存しておくことでAPIを叩く回数を抑えられそうですね。

Taskにis_published相当の属性(デフォルトをFalse)を付与し、UIでOn / Offするようなイメージでしょうか?

KATO-Hiro avatar Jan 06 '24 14:01 KATO-Hiro

Taskにis_published相当の属性(デフォルトをFalse)を付与し、UIでOn / Offするようなイメージでしょうか?

そんな感じのイメージです😊

prettyhappycatty avatar Jan 06 '24 15:01 prettyhappycatty