Azure Functions 와 Twilio 에서 Nintendo Switch 가 마이닌텐도 스토어에 입고되면 전화가 걸려오도록 한다.

개요



마이닌텐도 스토어 에 Nintendo Switch 가 입하하면, 전화가 걸려 와 그것을 가르쳐 준다.
라는 것을 만들어 보고 싶습니다(`・ω・´)

Azure Functions와 Twilio를 사용하여 서버리스로 빨리 만들 수 있습니다.

사용할 서비스


  • Azure Functions
  • Twilio

  • 사용할 소프트웨어


  • Visual Studio 2017 Preview 4.0
  • Azure Function Tools for Visual Studio 2017

  • 흐름


  • 준비
  • 프로젝트 만들기 및 NuGet 패키지 추가
  • 코드 작성
  • Azure Functions에 배포 및 확인
  • 입하하면 전화가 온다! 어쩌면.

  • 1. 준비



    Azure Function Tools for Visual Studio 2017을 사용하지만,
    아직 Preview 버전의 Visual Studio 2017에서만 지원됩니다.

    그래서 Visual Studio 2017 Preview 4.0을 설치하고,
    Azure Function Tools for Visual Studio 2017을 설치합니다.
    ※Preview는 Release와 공존할 수 있습니다.

    또한 Azure 또는 Twilio를 사용할 수 있도록 계정을 가져옵니다.
    (여기에서는 생략합니다)

    또한 전화의 발신 내용을 정의한 TwiML을 어딘가 적당한 서버에 둡니다.
    이번은 아래에 두었습니다.
    htps //w w. 노라네코. 이. jp/ゔぉ이세. xml

    2. 프로젝트 생성 및 NuGet 패키지 추가




    새 프로젝트 만들기에서 Azure Functions를 선택하여 새 프로젝트를 만듭니다.


    NuGet 패키지 관리자에서 Twilio를 추가한 다음 기본 패키지를 최신 버전으로 만듭니다.


    프로젝트에 새 항목으로 Azure Function을 추가합니다.


    어떤 Function을 만들지 확인되므로 TimerTrigger를 선택합니다.
    Schedule은 기본값(5분마다 실행)으로 둡니다.

    이제 준비가 되었습니다.

    3. 코드 작성



    그래서 코드를 작성합니다.
    using System;
    using System.Net;
    using System.Text;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Twilio;
    using Twilio.Rest.Api.V2010.Account;
    using Twilio.Types;
    
    namespace GiveMeSwitch
    {
        public static class Function
        {
            [FunctionName("TimerTriggerCSharp")]
            public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, TraceWriter log)
            {
                string htmlData;
    
                try
                {
                    var webClient = new WebClient {Encoding = Encoding.UTF8};
                    //マイニンテンドーストアの Switch 販売ページを取得
                    htmlData = webClient.DownloadString("https://store.nintendo.co.jp/customize.html");
                    webClient.Dispose();
                }
                catch (WebException ecWebException)
                {
                    htmlData = "";
                    log.Info($"データ取得に失敗しました。{DateTime.UtcNow.AddHours(9)}");
                    log.Info(ecWebException.ToString());
                }
    
                //注文ボタンが無効になっているか確認(SOLD OUTになっているか確認)
                if (htmlData.Contains("btn btn__primary_soldout to_cart") || string.IsNullOrEmpty(htmlData))
                {
                    log.Info($"売り切れかエラーでした。{DateTime.UtcNow.AddHours(9)}");
                }
                else
                {
                    //Twilioの管理画面で、アカウントSIDと認証トークンを確認可能。
                    const string accountSid = "アカウントSID";
                    const string authToken = "SIDと認証トークン";
    
                    TwilioClient.Init(accountSid, authToken);
    
                    //発信先の電話番号(自分の電話番号)
                    var to = new PhoneNumber("+8190xxxxxxxx");
    
                    //Twilioで購入/設定した電話番号を設定
                    var from = new PhoneNumber("+8150xxxxxxxx");
    
                    //電話をかける
                    var call = CallResource.Create(
                        to,
                        from,
                        //適当な場所に置いたTwiMLのURL
                        url: new Uri("https://www.noraneko.co.jp/voice.xml"));
    
                    log.Info($"電話をしました!{DateTime.UtcNow.AddHours(9)}");
                    log.Info(call.Sid);
                }
            }
        }
    }
    

    4. Azure Functions에 배포 및 확인




    프로젝트 이름을 마우스 오른쪽 단추로 클릭하여 게시에서 Azure Functions에 직접 배포할 수 있습니다.


    App Service를 만듭니다.
    만들기 버튼을 누르면 배포까지 자동으로 수행됩니다.


    Azure Portal을 열면 이전에 배포한 Function이 추가되었습니다.


    사용 불가능 전환,


    설정 및 테스트가 가능합니다.
    실제로 실행하면 로그에 결과가 표시됩니다.

    5. 입하하면 전화가 온다! 어쩌면.




    입고되고 있을 때(SOLD OUT가 아닐 때)에는 전화가 걸려오는 하즈입니다(∩´∀`)∩

    결론



    Nintendo Switch가 들어오면 SOLD OUT이 아니면 전화가 걸립니다.
    라고 하는 구조가 매우 간단하게 만들 수 있었습니다—(∩´∀`)∩ 와이

    ※여기에서는 5분마다의 확인으로서 보았습니다만, 너무 단시간에 확인하는 것은 좋지 않다고 생각하므로, 조심해 주세요.

    좋은 웹페이지 즐겨찾기