なるべく自動でやってほしい。
こんにちは、ベアーです。
普段からプログラムの資料や情報を集めるにあたって、自分で全部見ていたら時間がいくらあっても足りません。
そこで、Google Apps Script で収集を自動化しています。
ただ今月初め(2021/04)、スクリプトが実行エラーを大量に出力していました。
どうも、Google Apps Script の Quota に引っかかった模様です。
https://developers.google.com/apps-script/guides/services/quotas
1 回の実行あたり、6 分という制限が適応され、スクリプトがエラーを出していました。
そこで、スクリプトの改善を計ったのが今回のお話です。
原因は?
まずスクリプトの構成を見ます。
対象のスクリプトは RSS を取得して、そのタイトルから興味のありそうなものを抽出しています。
(抽出の方法は形態素分析とか一応やってます、が本題ではないのでスキップします。)
そして、興味のありそうな記事を全部フェッチしていました。
そうです。すでに処理済みの記事も処理していました。
このスクリプトは30分毎で動いているんですが、高々1時間で記事一覧が全部変わるとは思えません。
改善案
原因は RSS 全体を処理して無駄な処理が走っていることでした。
まぁ、この事実に実装当初から気づいていたので、いつかなるなということは自明でした。
個人のスクリプトだし、改善方法も当初から想定していました。
要は手抜きをしたわけです。
ただ、今回いよいよ改善しないとスクリプトが止まる事態になったので、重い腰を上げます。
まず、RSS には 公開日と更新日というパラメータがあります。
公開日は記事が最初に公に公開されたことを示すパラメータで、
更新日は記事が更新されたことを示すパラメータです。
今回、更新日をどう扱うかはバッサリと切り捨てます。
過去の傾向から、更新された記事はあまり読まなかったためです。
手法
さて、今回は公開日をベースに処理対象の記事を絞り込んでいくことにします。
スクリプトの処理の開始日時を最終実行日時としてどこかに保存し、
最終実行日時と公開日を比較していくことにしました。
結論
RSS 全部の記事を 6 分かけて処理していたものが、平均 1.89 秒まで短縮されました!
後書き
皆さんもデータを取得するようなことがある際には、
むやみに全部のデータを取得せず必要な対象だけ処理していきましょう。
欲しい答えが見つかる時間が大幅に減りますし、電気をその分使わないです。
ムダを減らしいていきましょう。