Azure 기능을 사용하여 YouTube 리뷰 알림

본문은 #ServerlessSeptember의 일부분이다.이 allthings Serverless 내용에 집중하면 다른 유용한 글, 상세한 강좌, 동영상을 발견할 수 있습니다.월요일부터 목요일부터 9월까지 매주 지역사회 구성원과 클라우드 창도자들의 새로운 글이 발표된다.
클릭 https://docs.microsoft.com/azure/azure-functions/ Microsoft Azure에서 서버 없는 기능을 활성화하는 방법에 대한 자세한 내용을 확인하십시오.
만약 우리 조직에 유튜브 영상 채널이 하나 있다면, 사용자는 그것에 대해 의문이나 의심을 제기할 수 있다.만약 한 사람만 통로를 검사한다면, 정기적으로 통지하면 충분할 것이다.그러나 만약 우리가 사용자가 우리의 동영상에 댓글을 올릴 때 다른 사람에게 통지하고 싶다면 무슨 일이 일어날까요?
본고에서 우리는 Azure Functions 및 두 개의 제3자 API를 사용하여 JavaScript 서버 없는 응용 프로그램을 만들어서 유튜브 채널의 모든 동영상에 새로운 댓글을 추가할 때 이메일을 보낼 것이다.어플리케이션에서 호출하여 Google Developer Project 를 사용하여 API 키를 가져옵니다.
알림을 자동으로 가져오는 유사한 기능이 없기 때문에, 이 점을 실현하기 위해 서버 없는 프로그램을 만들 것입니다.이것은 시간표(초, 분 또는 시간)에 따라 실행되며, 특정 채널의 모든 동영상에 새로운 댓글이 있는지 검증할 것입니다.이를 위해 YouTube API를 호출합니다.새 의견을 받으면 이 응용 프로그램은 SendGrid API 을 사용하는 사용자 목록에 알림 이메일을 보냅니다.
최종 소스 코드를 보려면 에서 저장소를 볼 수 있습니다.
이 프레젠테이션에 필요한 의존 항목을 Node's package manager 로 설치합니다.

YouTube API 키를 얻기 위한 구글 개발자 프로젝트 만들기

  • https://developers.google.com/로 이동하여 구글 계정으로 로그인하거나 필요할 경우 계정을 만듭니다.
  • https://console.developers.google.com/project 로 이동하고 항목 만들기 를 클릭합니다.네가 좋아하는 항목의 세부 사항을
  • 방금 만든 프로젝트로 이동하여 Enable API and Services 를 클릭하고 YouTube Data API v3 을 찾습니다.선택하고 활성화 를 클릭합니다.
  • 자격 증명으로 이동하여 자격 증명 생성 -> API 키를 클릭합니다.생성된 키를 저장합니다.Azure 기능 응용 프로그램에서 사용해야 합니다.

  • API 키를 얻기 위해 SendGrid 계정 만들기


    SendGrid는 전자 메일을 보내는 데 사용되는 강력한 도구이지만 사용자의 상호작용을 추적할 수도 있다.마케팅 활동을 작성하고 보고서를 생성하며 다양한 유형의 통계를 볼 수 있습니다.

  • Sign Up on SendGrid . 계정을 만들려면 신용카드가 필요 없습니다.무료층은 본 강좌를 완성하기에 충분하다.
  • 로 이동하여 API 키 생성을 클릭합니다.이름을 설정하고 전체 액세스 권한을 부여합니다.
  • 생성 및 보기를 클릭합니다.생성된 키를 다시 표시하지 않기 때문에 안전한 곳으로 복사합니다.
  • https://app.sendgrid.com/settings/api_keys
    이후 필요한 경우 우리는 우리가 나중에 응용 프로그램에서 어떤 전자 우편 계정을 우리가 통지한 발신자로 사용할 것인지, 그리고 이 계정과 관련된 상세한 정보를 밝히기 위해 정보를 추가해야 한다.
    Verify a Single Sender

    Azure 계정 만들기


    는 응용 프로그램의 구축, 테스트, 배치와 관리에 사용되는 클라우드 컴퓨팅 서비스이다.그것은 우리의 응용 프로그램을 돕기 위해 서로 다른 제품을 제공한다.우리의 프로젝트에 대해 우리는 Microsoft Azure, Azure의 서버 없는 응용 프로그램 서비스를 사용할 것이다.이 함수를 만들기 위해 다른 언어를 지원합니다.우리는 JavaScript를 사용할 것입니다.

  • Azure Functions . 제공된 많은 서비스는 모두 무료층이 있고 다른 기능도 시용 기간이 있다.너는 이 시범을 위해 어떤 비용도 지불할 필요가 없다.
  • 계정을 설정한 후 Sign Up on Microsoft Azure 을 만듭니다.이것은 당신이 이 활동을 주관하는 공간이 될 것입니다.
  • Azure Storage account
  • 스토리지 계정을 선택하고 설정에서 액세스 키를 선택한 다음 첫 번째 접속 문자열을 복사합니다.우리는 잠시 후에 그것을 필요로 할 것이다.

  • Azure 기능 확장 설치


    내가 사용하는 IDE는 입니다.이것은 기능이 강한 편집기로, 많은 플러그인과 사용자 정의 항목이 있다.이 프레젠테이션에서 사용할 것을 권장합니다. Visual Studio Code 이 프레젠테이션은 우리의 업무를 더욱 쉽게 할 뿐만 아니라, 이 기능을 만들고 배치하는 데 도움을 줄 것입니다.
    Azure Functions Extension
    설치 확장 후 왼쪽 메뉴에 Azure 아이콘이 있어야 합니다.이것을 클릭하고 Azure 계정으로 로그인하면 IDE가 개인 계정으로 연결됩니다.

    마지막으로 로컬 디버깅을 사용하기 위해서는 설치가 필요합니다.
    이제 인코딩할 때가 됐어!

    Azure 기능 핵심 도구 새로운 Azure 기능 항목 만들기


    Visual Studio 코드의 동일한 메뉴에 로그인하여 Azure 구독을 볼 수 있습니다.폴더가 있는 아이콘과'새 항목 만들기'라고 쓰여진thunder를 누르고 다음 절차를 따르십시오.
  • 당신의 프로젝트를 말해 보세요.
  • 우리가 사용할 언어는 JavaScript입니다.
  • 템플릿 타이머 트리거를 선택해야 합니다.
  • 저는 제 함수가 5시간에 한 번씩 실행되기를 바랍니다. 따라서 시간 간격cron을 "0*/5***"로 설정합니다.cron 형식에 대한 더 많은 정보를 읽을 수 있습니다 .나중에 함수에서 이것을 변경할 수 있습니다.json 파일.
  • 이 절차를 마친 후에 우리는 Azure 기능 프로젝트의 모든 초기 파일을 생성해야 한다.

    여기 있다 NPM 패키지 설치


    YouTube API를 호출하려면 를 사용합니다.Azure 기능을 사용할 수 있도록 터미널에서 npm install --save googleapis 패키지를 설치해야 합니다.
    SendGrid API의 경우 전자 메일을 보낼 수 있는 NPM 패키지도 제공합니다.npm install --save @sendgrid/mail를 실행하여 Google APIs Node.js Client [메일 서비스]를 설치합니다.

    SendGrid v3 Web API 환경 변수 정의


    우리는 일부 키 값을 환경 변수로 저장해야 한다.local.settings.json 파일로 이동하여 이 키를 값에 추가합니다.
    "YouTubeAPIKey": "[YOUTUBE_API_KEY]", // The API Key generated in your Google Developer Project.
    "YouTubeChannelID": "[YOUTUBE_CHANNEL_ID]", // The ID of the YouTube channel you want to watch.
    "SendGridAPIKey": "[SENDGRID_API_KEY]", // SendGrid API Key.
    "EmailFrom": "[SENDER_EMAIL]", // The sender email for the notifications.
    "EmailTo": "[RECEIVER_EMAIL]" // The receiver email for the notifications.
    
    채널 ID는 추적하려는 YouTube 채널의 식별자입니다.보시면 채널의 URL이 https://www.youtube.com/channel/[ChannelID] 처럼 보입니다."EmailTo" 여러 전자 메일 주소를 포함할 수 있습니다.쉼표 ","로 구분해야 합니다.
    또한 Azure 스토리지 계정에 대한 연결을 설정해야 합니다.이렇게 하려면 이전에 생성된 연결 문자열을 키의 값AzureWebJobsStorage으로 붙여넣으십시오.

    함수


    이제 프로젝트 디렉토리의 index.js 파일로 이동합니다.우리는 응용 프로그램을 작성하기 시작할 것이다.
    우선 YouTube와 SendGrid API 클라이언트를 초기화합니다.우리는 이전 절에 설치된 NPM 패키지와 우리가 정의한 환경 변수를 사용할 것이다.함수의 코드는 다음과 같습니다.
      const { google } = require("googleapis");
      const sendGridClient = require("@sendgrid/mail");
    
      const youtubeClient = google.youtube({
        version: "v3",
        auth: process.env["YouTubeAPIKey"],
      });
    
      sendGridClient.setApiKey(process.env["SendGridAPIKey"]);
    
    그 후에 특정 채널의 모든 동영상에 게시된 마지막 댓글 목록을 얻기 위해 유튜브 API를 호출할 것입니다.
      const response = await youtubeClient.commentThreads.list({
        part: "snippet,replies",
        allThreadsRelatedToChannelId: process.env["YouTubeChannelID"],
        maxResults: 100,
        order: "time",
      });
    
    여기에서는 다음 사항을 고려해야 합니다.
  • 우리가 endpoint를 호출하는 것은 우리가 모든 평론과 회답을 검색하고 싶기 때문이다.
  • 우리는 이전에 설정한 환경 변수와 채널 ID를 사용합니다.
  • API는 최대 100개의 결과를 지원합니다.이것은 우리가 가져올 결과의 수량이므로 평가할 수 없다.
  • order: "time" 최신의 순서에서 최신의 순서로 설정합니다.
  • YouTube API 문서를 읽어 YouTube API에서 얻은 결과에 대한 자세한 내용을 확인할 수 있습니다.이것은 코드의 아래 부분에 도움이 될 것이다.
      if (response.data) {
        const lastRun = new Date(myTimer.scheduleStatus.last);
    
        response.data.items.forEach(function (comment) {
          const topLevelComment = comment.snippet.topLevelComment.snippet;
          const topLevelCommentDate = new Date(topLevelComment.publishedAt);
    
          if (topLevelCommentDate.getTime() > lastRun.getTime()) {
            sendEmail(
              topLevelComment.authorDisplayName,
              topLevelComment.textDisplay,
              `https://www.youtube.com/watch?v=${topLevelComment.videoId}&lc=${comment.id}`
            );
          }
    
          if (comment.snippet.totalReplyCount > 0) {
            comment.replies.comments.forEach(function (reply) {
              const replyDate = new Date(reply.snippet.publishedAt);
    
              if (replyDate.getTime() > lastRun.getTime()) {
                sendEmail(
                  reply.snippet.authorDisplayName,
                  reply.snippet.textDisplay,
                  `https://www.youtube.com/watch?v=${reply.snippet.videoId}&lc=${reply.id}`
                );
              }
            });
          }
        });
      }
    
    분석을 해보겠습니다.
      if (response.data) {
    
    우리가 어떤 결과를 얻었을 때만 우리는 이 함수를 계속 집행할 수 있다.
        const lastRun = new Date(myTimer.scheduleStatus.last);
    
    Azure 함수는 timerTrigger 함수의 실행과 관련된 데이터를 포함하는 를 공개했다.우리는 그것을 사용하여 마지막 실행 시간을 얻고 주석 날짜/시간과 비교할 수 있다.만약 평론이 비교적 새롭다면, 우리는 사용자에게 통지하지 않았다고 가정하기 때문에, 우리는 이메일을 보낼 것이다.API에서 얻은 모든 의견을 비교해야 합니다.
        response.data.items.forEach(function (comment) {
          const topLevelComment = comment.snippet.topLevelComment.snippet;
          const topLevelCommentDate = new Date(topLevelComment.publishedAt);
    
          if (topLevelCommentDate.getTime() > lastRun.getTime()) {
            sendEmail(
              topLevelComment.authorDisplayName,
              topLevelComment.textDisplay,
              `https://www.youtube.com/watch?v=${topLevelComment.videoId}&lc=${comment.id}`
            );
          }
    
    댓글에 대한 답변도 있고요.
          if (comment.snippet.totalReplyCount > 0) {
            comment.replies.comments.forEach(function (reply) {
              const replyDate = new Date(reply.snippet.publishedAt);
    
              if (replyDate.getTime() > lastRun.getTime()) {
                sendEmail(
                  reply.snippet.authorDisplayName,
                  reply.snippet.textDisplay,
                  `https://www.youtube.com/watch?v=${reply.snippet.videoId}&lc=${reply.id}`
                );
              }
            });
          }
    
    우리는 sendEmail라는 함수를 두 번 호출하여 주석의 사용자, 본문, 직접 URL을 매개 변수로 보냈다는 것을 알아야 합니다.전자 메일을 보내기 위해 SendGrid API를 호출하는 함수를 만듭니다.주 함수에서 함수를 작성하는 코드입니다.
      function sendEmail(user, comment, url) {
        let body = "There is a new comment in one of your videos\n";
        body += `User: ${user}\n`;
        body += `Comment: ${comment}\n`;
        body += `Url: ${url}`;
    
        const msg = {
          to: process.env["EmailTo"],
          from: process.env["EmailFrom"],
          subject: "There is a new comment in your YouTube Channel",
          text: body,
        };
    
        sendGridClient
          .send(msg)
          .then(() => {
            console.log("Email sent");
          })
          .catch((error) => {
            console.log(error.response.body);
          });
      }
    
    우리가 말한 바와 같이 sendEmail 사용자, 의견 및 URL을 수신합니다.그런 다음 전자 메일 본문을 만들고 모든 전자 메일 세부 정보를 포함하는 msg 을 실례화합니다.그런 다음 초기화된 클라이언트를 사용하여 SendGrid API를 호출하여 사용자에게 이메일을 보냅니다.
    이것이 바로 Azure 기능의 모든 코드입니다.로컬에서 실행하고 통합 디버거를 사용하여 Visual Studio 코드에서 직접 디버깅할 수 있습니다(F5 키를 눌러 디버깅).로컬 디버깅을 할 때에도timerTrigger를 만들었다고 가정하면 지정한 시간 간격을 따를 것입니다.따라서 더 좋은 방식으로 디버깅을 하려면 함수를 더 자주 실행할 수 있는 비교적 작은 시간 간격을 정의해야 할 수도 있습니다.

    타이머 객체 Azure에 기능 배포


    Azure 기능 확장을 사용하면 Visual Studio 코드에서 쉽게 배포할 수 있습니다.
  • Azure 로고를 클릭하여 Azure Explorer를 엽니다.함수에서 파란색 위쪽 화살표를 클릭합니다.
  • 프롬프트에서 Azure에서 새 기능 응용 프로그램을 만듭니다.
  • 함수의 전역 고유 이름을 입력합니다.
  • 노드를 선택합니다.js 버전/실행 중.
  • 원하는 Azure 영역을 선택합니다.
  • 이 절차를 따르고 한동안 기다린 후에 기능이 Azure에서 시작되고 실행됩니다.

    마지막 한마디


    이 프레젠테이션에서 우리는 자바스크립트와 Visual Studio 코드를 사용하여 Azure 함수 (시간 트리거) 를 만들고, 디버깅하고, 배치하는 방법을 배웠다.우리는 YouTube와 SendGrid API와의 기본적인 통합을 개발했다.
    다음 단계는 함수에 소모된 자원을 분석하고 Azure에서 작업할 때 평가 하는 것이다.이 기능을 보존하고 싶지 않으면 자원을 정리할 수 있습니다.Azure: Functions explorer의 Function App을 마우스 오른쪽 단추로 클릭하고 Delete Function App을 선택하십시오.

    좋은 웹페이지 즐겨찾기