Closed OiR-ptr closed 1 year ago
エントリ登録がうまくいかない問題に対処中 一旦、filterでレース2件分の登録だけに短くしてやってみるが、だめそう
for ofで順繰り対応することで問題解決できると思うので、ちょっと手を入れてみて確認する
Array.forEachでは、順次実効性が担保できる(らしい)ので、それで試してみる
forEachにasync関数渡すと終了待ってくれないんですけど
forEachでasyncの待ち合わせするの難しすぎたのでfor ofで書き直します
エントリも登録完了しました ただし、1Rあたり40sほどかかってます
計算量を考えると、ちょっとやばいかも。。。
12 [R] 3 [会場] 16 [頭] * 40s なので、23040 [s] 384分 6h近くかかってしまうおそれが無きにしもあらずって感じ
ループ中でやってるpuppeteerのnewpage closeが遅いんだろうと勘案。 どうせ一回開いたページは二度と使わないので、同じページ内でgoto繰り返したほうがお得だよね
pageの使い回しをしたが、30秒程度までにしか短縮できない やっぱり何かが重いっぽいな
page.gotoが大部分だった これは高速化しようがないね
一応、ページに引き渡すオプションの最適化とかで粘れるけども。。。
imageだけ切って高速化できるか試す 今動かしているけど、多分レスポンス返さない影響でスクリプト実行に問題が出てるっぽい
やたら時間かかっているので、もう高速化は諦めることにする
本当ならmedia系のリソースには1x1イメージみたいなダミーを返すように変更してあげればいいんだろうけども。。。
一応、1024MBに変更したところ、2倍以上の速度で完了することが確認できた 512MB→1024MBだと時間あたり使用料金が2倍になっているので、これ以降真っ当に実行するのであれば1024のがお得。
とりあえず出走馬とレースは先頭2行の情報だけ抽出するようにしたので、残りの処理を作り込んでいくことにする
馬の登録とエントリの登録を同時に行うクエリもかけた
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 } } } }
同じ馬に対しての複数エントリ登録も問題ないので、これを使えば過去の結果登録もうまくできるはず。 具体的には、 初回時: hrefだけ埋める、後のクエリにて過去の出走記録を登録する それ以降: 水曜あたりに実施する出走結果登録から、最新結果1件をエントリから更新するためのフラグを立てる
初回登録フラグと水曜の最新結果抽出はそれぞれ異なる方法で行われる必要があるので、持たせるフラグ項目はそれぞれ別。 せっかくなら初回登録日付と最終エントリ日付、みたいな形で持たせてやればきれいにできるかも。
GraphQLの項目として計算結果も渡すことができるので、計算してT/Fに落し込んでもよし
page.evaluateでDate型渡せない問題があった 起動プロセス⇔PuppeteerプロセスはJSONでやり取りするので、JSONで表せないデータ型は引き渡せないらしい Date型はまさにそれに該当するので空オブジェクトとして扱われてしまっていた
出馬表から馬単体のページまで行って登録完了 ただ、Entry、Race、Holdそれぞれに登録している内容をもう少し加工する必要がありそう
一旦必要最低限の量は登録できるようにしたので、土日の自動実行を待つ 自動実行が完了したら一旦クローズしようと思う
あと、走行結果はEntryに登録してない 本当は初回実施のときには順位とか通過とかを登録するようにしないといけない
走行結果も登録できたのでこれで出走情報登録は完了 ただし、出走登録したばかりのものについて結果取得はまだなので、それをどうするかは未定
Horseと同じように追加日を入れておいて、水曜日に1週間以内の競走成績を反映させる予定
やりたいことはできたので一旦クローズ