PS5の抽選販売の申し込みが始まったら通知する


今週頭にビックカメラで抽選販売の申し込みがあったようなんですが、気付いた時には〆切を過ぎていて申し込めませんでした。

そこで、抽選販売の最新情報をまとめたページが更新されたら通知するようにしよう、というお話です。

--

※結局ソニーストアの繰り上げ当選で当たりました。

もくじ

IFTTTでは無理

こういうのは IFTTT だろーと思ったんですが、無理でした。
RSSの更新チェックは出来ますが、既存のページの更新は追えず。。。

かわりにコチラのサービス(VisualPing)を使おうと思ったんですが、ただでさえPS5買うために色んなショップのアカウントを作っているのにさらに増やすのか、ということで見送り。

DOS + VBScript

困ったときはこいつらの出番ですね。PS5の抽選の通知を受け取るだけのために時間かけてもしょうがないし、自宅のPCは基本的に電源を落とさないし、ということで。

(PowerShell なら単体でダイアログを出せそうですが、あまり触る機会もなく)

--

方法は curl でページの HTML を取得して <time datetime= という文字列を探して変更があったらメッセージボックスを出すだけです。

※ 送られてくる HTML が minified されてると上手く動かないかも

@echo off


:::  Settings  :::

set TARGET_URL="https://gamewith.jp/ps5/article/show/1255"
set TARGET_STRING="<time datetime="

set DIALOG_TITLE="PlayStation 5"
set DIALOG_MSG="Press OK to see PlayStation 5 Lottery Details."

set INTERVAL_SEC=1200



:::  Do it  :::

set UPDATED="NULL"
set LAST_UPDATED=%UPDATED%
set VBS_FILENAME=%TEMP%\%~n0_MsgBox.vbs


goto :MAIN
pause
goto :EOF



:MAIN

   for /f "delims=" %%I in ('curl %TARGET_URL% ^| find /i %TARGET_STRING%')  do  set UPDATED="%%I"
   echo.
   echo %UPDATED%

   if "" equ "%UPDATED:"=%" (
      echo Target String is not found in specified URL...
      pause
      goto :EOF
   )


   if "%LAST_UPDATED:"=%" neq "%UPDATED:"=%" (

      set LAST_UPDATED=%UPDATED%

      echo if 1 = msgbox^(%DIALOG_MSG%,vbOkCancel+vbExclamation+vbApplicationModal,%DIALOG_TITLE%^) then  > "%VBS_FILENAME%"
      echo WScript.CreateObject^("Shell.Application"^).ShellExecute^(%TARGET_URL%^)  >> "%VBS_FILENAME%"
      echo end if >> "%VBS_FILENAME%"

      "%VBS_FILENAME%"

   )


   goto :INTERVAL



:INTERVAL

   timeout %INTERVAL_SEC%  >nul
   goto :MAIN

<time> タグとかなんやねん細かいなって思ってましたが、こういう時には便利ですね。GameWith のページもこのあたりシッカリ作られていて助かります。

おわりに

ローカルにコンテナ?を建てて似たようなものを作る → コンテナのホスティングサービスに出来たものを乗っける。

て感じで簡単にウェブサービス化できたりするんですかねー? 気が向いたら調べたいところです。

以上です。お疲れ様でした。