Google Apps Scriptで占いをデータベース化

プログラミング系

個人的(私的利用の範囲内で)に、めざましテレビの占いをLibreOfficeのCalcを使い、簡易的なデータベースとしてまとめ始めたが、月~土にめざましテレビの占いページを見て移していく作業は、若干面倒だったり、忘れてしまったりで、あまりよろしくない感じがしていました。

以前からGoogle Apps Script(以下GAS)は気になっていたが、使ってこなかったので、GASでデータベース化する事にしました。

今回はPuppeteerを利用して、めざましテレビの占いページから情報を取得します。
PuppeteerはそのままではGASでは利用できないため、Google Cloud Functionsを利用して使用するか、自前の環境で使用するかになりますが、折角VPSをレンタルしているので、WindowsサーバーのVPSを利用して構築していきます。

構築作業

まずは、Googleドライブでめざましテレビの占い用のスプレッドシートを作成。

次に、拡張機能からApps Scriptを選択し、コードエディタを開きます。

JavaScriptベースのコードを書く。
最終的に出来上がったコード例

Windowsサーバーでの作業

Windowsサーバーでプロジェクトフォルダを作成し、Puppeteerをインストール

スクレイピングをするためのgetFortune.jsを作成

次に、Node.jsを使ってPuppeteerスクリプトを呼び出すための簡単なAPIサーバー、Expressのインストール

また、ExpressアプリケーションでCORSを有効にするためにCORSをインストール

APIサーバーのコード(app.js)を作成

IISのリバースプロキシ設定

IISでURL RewriteモジュールApplication Request Routing (ARR)をインストール

IISマネージャーから設置するサイトのドメインを選択、URL 書き換えをダブルクリック、規則の追加をクリックして開き、リバースプロキシを選択してOK

受信規則HTTP 要求が転送されるサーバー名または IP アドレスを入力してください:localhost:3000と入力、OKをクリック。

出来上がった受信規則をダブルクリックして開くか、選択して編集をクリックして開き、URL の一致パターン^get-fortune$アクションのプロパティURL の書き換えhttp://localhost:3000/get-fortuneを入力して適用をクリック。

Winserを使用して永続化

Winserを使用して、WindowsサービスとしてNode.jsアプリケーションを登録し、システム起動時やシステムが動作している間、確実にアプリケーションが実行され続けるように設定する

Winserをグローバルにインストールする

アプリケーションのルートディレクトリにあるpackage.jsonファイルにstartスクリプトを追加

管理者としてコマンドプロンプトまたはPowerShellを開き、サービスを登録する

Winserで作成したサービスを起動するユーザーを自分に指定

サービスのプロパティから、ログオンタブを選択し、アカウントを選択し、ユーザーとパスワードを指定してOK

ファイアウォールでポート3000を許可

セキュリティが強化された Windows Defender ファイアウォールを開き、受信の規則ポートを選択、TCPを選択、特定のローカルポートを選択、3000を入力し次へ接続を許可するを選択し次へ、ドメイン、プライベート、パブリックにチェックを入れて次へ、名前を入力して完了。

ブラウザで確認

一旦、ブラウザでhttp://example.com/get-fortuneにアクセスして、JSON形式で文字列が表示されたら大丈夫でしょう。

末尾に/を付けてアクセスして、末尾に/付きにリダイレクトされて403エラーが出る場合は、ブラウザのキャッシュをクリアする事でアクセスできるようになる場合もあります。

GASで実行とスケジュール設定

GASのApps Scriptエディタで実行し、エラーが無く無事にスプレッドシートまで更新されたら、トリガーの追加からトリガーを追加します。

月~金までは午前7時に更新されるので、各曜日、週ベースのタイマーで午前8~9時を設定します。
土曜日は放送後の更新になるので、週ベースのタイマーで午前9時~10時を設定します。

指定した時間帯にタイマーが作動し、エラーが無く更新出来たらOKです。

まとめ

毎回、PCを起動してCalcに転記する必要が無いので、今後の集計が楽になりそうです。

Webスクレイピングをする時は、各サイトのポリシーに従ってください。
私的利用の範囲を超えて使用したい場合は、必ず権利者の許可を取ってください。

コメント

タイトルとURLをコピーしました