FFⅦ 리메이크 완전히 사는 것을 잊었기 때문에 감시 프로그램을 배치했다

소개



어제 FFⅦ 리메이크가 나왔다!

FFⅦ라고 하면 자신이 학생의 무렵에 발매되어 큰 화제성이 있었으므로, 완전한 미하 마음으로 샀습니다.
수수하게 처음 구입한 FF 시리즈입니다. 좋은 추억입니다.
당시는 에어리스를 좋아했습니다 (지금은 티파입니다).

그런 추억이 있었기 때문에, 발매되는 것 자체는 알고 있었습니다만,
마카사 어제 나왔다니 전혀 알았고, 예약하는 것도 잊었다···.

집에서 말했는데 아내도 FFⅦ를 상당히 하고 있었으므로, 부부로 토론한 결과 사자는 이야기가 되었습니다.

하지만 원래 PS4가 없어 ...

그냥 좋은 발견!



조금 살펴보면 PS4+FFⅦ 리메이크 세트가 있잖아요! !
패키지판이지만, 소프트비가 실질 없는 초절한 세트.
이것은 살 수밖에 없다! !

막상 구입! ? 이런 시세이고 실제 점포보다 넷에서 사려고 여러가지 찾았지만, 어디의 사이트도 품절···. 애초에 수량 한정인 것 같고 FFⅦ 자체 인기가 있고 그렇다면···. 아마존이나 라쿠텐 시장 등의 주요 사촌에서는 팔고 있지만, 이미 가격이 상승하고 있다. 뭐라고 해도 좋고, 하지만 고가 따위로 사고 싶지 않다. 입고될 가능성을 믿고 각 점포의 상황을 보면, 일부 사이트에서 입하 대기나 품절의 문자가. 꽤 절망적인 상황입니다만, 어쩌면 어딘가의 타이밍에 입하되어 살 수 있게 되는 것은! ? 라는 창백한 기대를 가지면서, 여가 시간에 점포 사이트를 조금 체크하고 있었습니다. 자동화하자 여가 시간에 체크하면, 타이밍에 따라서는 입하해도 놓쳐 버려 살 수 없게 될 가능성도 있고, 원래 귀찮게・・・. 일단 엔지니어이므로, 자동화하려고 생각하고 프로그래밍하기로 했습니다. Let's 프로그래밍 실현하는데 있어서, 일부러 돈 걸고 싶지 않고, 익숙하지 않은 언어를 지금부터 공부하는 것도 조금 시간 걸릴 것 같다. 그래서 이전에 조금만 했던 적이 있습니다. GoogleAppsScript(GAS) 를 사용하기로 했습니다.

GAS란?



아시는 분도 있을지도 모릅니다만, GAS란 Google이 제공하는 스크립트 언어로, JavaScript 쓸 수 있는 사람이라면 아마 읽을 수 있어 쓸 수 있다고 생각합니다.
Google이 제공하고 있는 것도 있어 Gmail이나 스프레드시트 등 Google이 제공하는 서비스와의 친화성이 좋습니다.
그 이외에도 WebAPI 공개나 스케줄 실행 등 서버 구축 불필요로 실현할 수 있으므로 서버리스같다.
그리고, 뭐니뭐니해도 기쁜 것이 환경면이라든지 여러가지 포함해 무상으로 사용할 수 있다고 하는 것! 정말 Google 님입니다.
  • JavaScript로 할 수있는 일은 거의 할 수 있습니다
  • Google 서비스를 다양하게 조작 할 수 있습니다
  • Google 계정만 있으면 무료로 즉시 사용할 수 있습니다
  • 만든 코드는 WebAPI로 게시할 수 있습니다
  • 스케줄 등의 트리거로 Job 실행이 가능

  • 만든 것



    매우 간단하고, GAS 프로그램에서 정기적으로 점포 사이트를 찾아 가서, 입고하고 있으면 LINE 통지한다고 하는 것뿐입니다.



    프로그램은 이런 느낌. 먼저 말할 때입니다만, 스크래핑의 부분이라든지 상당히 잡잡합니다.
    그리고, 대상의 점포 사이트는 우선 3개 뿐입니다.
    그 밖에도 몇가지 시도했지만, 프로그램으로부터의 액세스라고 연주되기도 했기 때문에 단념했습니다.
    
    /*********************
    各ショップで在庫をチェックし入荷されたらLINE通知する
    *********************/
    function check_zaiko(shop) {
      var msg = "";
      var html = UrlFetchApp.fetch(shop.url,{muteHttpExceptions:true}).getContentText(shop.charset);
      var parser = Parser.data(html).from(shop.tag_start).to(shop.tag_end).build();
      var result = String(parser);
    
      if(result.indexOf(shop.word) === -1) {
        msg = shop.name + "で入荷された!!\n" + shop.url;
        console.log(msg);
        sendLine(msg);
      } else {
        msg = shop.name + "品切れ中...";
        console.log(msg);
      }
    }
    
    
    /*********************
    LINEにメッセージ送信する
    *********************/
    function sendLine(strMessage){ 
      //Lineに送信するためのトークン
      var strToken = "xxx";
    
      var options = {
         "method"  : "post",
         "payload" : "message=" + strMessage,
         "headers" : {"Authorization" : "Bearer "+ strToken}
       };
    
       UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
    }
    
    
    /*********************
    メイン
    *********************/
    function main() {  
      var sony = {
        name : "SONYストア",
        url : "https://pur.store.sony.jp/ps4/products/ps4_ss_original/CUHJ-10035_product/",
        word : "入荷待ち",
        charset : "",
        tag_start : '<a class="s5-shippingLabel s5-shippingLabel--2"',
        tag_end : "</a>"
      };
    
      var sevennet = {
        name : "7net",
        url : "https://7net.omni7.jp/detail/2110615455",
        word : "在庫切れ",
        charset : "",
        tag_start : '<input class="linkBtn js-pressTwice"',
        tag_end : "</p>"
      };
    
      var rakuten = {
        name : "楽天ブックス",
        url : "https://books.rakuten.co.jp/rb/16256849/",
        word : "ご注文できない商品",
        charset : "euc-jp",
        tag_start : '<span class="status">',
        tag_end : "</span>"
      };
    
      var shop_list = [];
      shop_list.push(sony);
      shop_list.push(sevennet);
      shop_list.push(rakuten);
    
      shop_list.forEach(check_zaiko);
    }
    

    만약 입고되면, 이런 느낌으로 URL 첨부로 LINE 통지가 옵니다.



    어제부터 정기 실행시키고 있습니다만, GAS의 관리 화면에서는 상황을 볼 수 있습니다.
    디버그용으로 출력된 로그 확인도 할 수 있어요.


    사이고에게



    잠시 프로그램을 돌리면서 입하를 기다리고 싶습니다.
    라고 할까 원래 입하되는지 의문입니다만···.
    만약 무사히 구입할 수 있었을 때는 이 기사를 갱신할까.

    참고



    스크래핑은 Parser 라이브러리를 사용합니다. 사용법 등은 아래 페이지 등을 참고해 보세요.
  • Google Apps Script로 스크래핑하여 Slack에 정기 포스트하는 bot를 순살로 만들었다(Qiita)
  • htps : // 코 m / 후레오 wl11 / ms / 703 35073b600528 7c

  • 좋은 웹페이지 즐겨찾기