OiR-ptr / keiba-scraper

0 stars 0 forks source link

当日のレース開催予定表から条件・出走馬情報などを作成する(toHasura) #10

Closed OiR-ptr closed 1 year ago

OiR-ptr commented 1 year ago
OiR-ptr commented 1 year ago

エントリ登録がうまくいかない問題に対処中 一旦、filterでレース2件分の登録だけに短くしてやってみるが、だめそう

for ofで順繰り対応することで問題解決できると思うので、ちょっと手を入れてみて確認する

OiR-ptr commented 1 year ago

Array.forEachでは、順次実効性が担保できる(らしい)ので、それで試してみる

OiR-ptr commented 1 year ago

forEachにasync関数渡すと終了待ってくれないんですけど

OiR-ptr commented 1 year ago

forEachでasyncの待ち合わせするの難しすぎたのでfor ofで書き直します

OiR-ptr commented 1 year ago

エントリも登録完了しました ただし、1Rあたり40sほどかかってます

計算量を考えると、ちょっとやばいかも。。。

12 [R] 3 [会場] 16 [頭] * 40s なので、23040 [s] 384分 6h近くかかってしまうおそれが無きにしもあらずって感じ

OiR-ptr commented 1 year ago

ループ中でやってるpuppeteerのnewpage closeが遅いんだろうと勘案。 どうせ一回開いたページは二度と使わないので、同じページ内でgoto繰り返したほうがお得だよね

OiR-ptr commented 1 year ago

pageの使い回しをしたが、30秒程度までにしか短縮できない やっぱり何かが重いっぽいな

OiR-ptr commented 1 year ago

page.gotoが大部分だった これは高速化しようがないね

一応、ページに引き渡すオプションの最適化とかで粘れるけども。。。

OiR-ptr commented 1 year ago

imageだけ切って高速化できるか試す 今動かしているけど、多分レスポンス返さない影響でスクリプト実行に問題が出てるっぽい

やたら時間かかっているので、もう高速化は諦めることにする

OiR-ptr commented 1 year ago

本当ならmedia系のリソースには1x1イメージみたいなダミーを返すように変更してあげればいいんだろうけども。。。

OiR-ptr commented 1 year ago

一応、1024MBに変更したところ、2倍以上の速度で完了することが確認できた 512MB→1024MBだと時間あたり使用料金が2倍になっているので、これ以降真っ当に実行するのであれば1024のがお得。

OiR-ptr commented 1 year ago

とりあえず出走馬とレースは先頭2行の情報だけ抽出するようにしたので、残りの処理を作り込んでいくことにする

OiR-ptr commented 1 year ago

馬の登録とエントリの登録を同時に行うクエリもかけた

mutation MyMutation { insert_Horse(objects: {href: "https://www.horse.test/exam_horse", id: "exam_horse", Entries: {data: {Jockey: "俺", Popular: "1", race_id: "eb4fc9f1-a98c-4b3c-a270-1e5eac2ac704"}}, name: "例馬"}, on_conflict: {constraint: Horse_pkey, update_columns: id}) { returning { id Entries { id } } } }

OiR-ptr commented 1 year ago

同じ馬に対しての複数エントリ登録も問題ないので、これを使えば過去の結果登録もうまくできるはず。 具体的には、 初回時: hrefだけ埋める、後のクエリにて過去の出走記録を登録する それ以降: 水曜あたりに実施する出走結果登録から、最新結果1件をエントリから更新するためのフラグを立てる

OiR-ptr commented 1 year ago

初回登録フラグと水曜の最新結果抽出はそれぞれ異なる方法で行われる必要があるので、持たせるフラグ項目はそれぞれ別。 せっかくなら初回登録日付と最終エントリ日付、みたいな形で持たせてやればきれいにできるかも。

GraphQLの項目として計算結果も渡すことができるので、計算してT/Fに落し込んでもよし

OiR-ptr commented 1 year ago

page.evaluateでDate型渡せない問題があった 起動プロセス⇔PuppeteerプロセスはJSONでやり取りするので、JSONで表せないデータ型は引き渡せないらしい Date型はまさにそれに該当するので空オブジェクトとして扱われてしまっていた

OiR-ptr commented 1 year ago

出馬表から馬単体のページまで行って登録完了 ただ、Entry、Race、Holdそれぞれに登録している内容をもう少し加工する必要がありそう

一旦必要最低限の量は登録できるようにしたので、土日の自動実行を待つ 自動実行が完了したら一旦クローズしようと思う

OiR-ptr commented 1 year ago

あと、走行結果はEntryに登録してない 本当は初回実施のときには順位とか通過とかを登録するようにしないといけない

OiR-ptr commented 1 year ago

走行結果も登録できたのでこれで出走情報登録は完了 ただし、出走登録したばかりのものについて結果取得はまだなので、それをどうするかは未定

Horseと同じように追加日を入れておいて、水曜日に1週間以内の競走成績を反映させる予定

やりたいことはできたので一旦クローズ