Google Calendar API 사용하기 #1

Google Calendar API를 조금 만지기를 원했습니다.



여러 분야로 눈을 옮겨 조금 만져보고 싶어지는 나쁜 버릇입니다.
크라우드소싱 부업을 찾고 있다면 Gooogle Calendar에 일정을 넣어/업데이트할 수 있는 기회가 있습니다.
왠지 그것 계기로 무성하게 API를 부르고 싶어졌기 때문에, 시험해 보았습니다.
※덧붙여서 안건은 받지 않습니다 w

시리즈



Google Calendar API 사용하기 #2
Google Calendar API 사용하기 #3

환경



IDE: VisualStudio2019
응용 프로그램: 콘솔 앱
프레임워크: .NET Core 3.1

Google Calendar API 시작



공식적으로 입문이 있었습니다.
Get Started with the Calendar API

분명히 API를 사용하려면 자격 증명을 만들어야합니다.
다음 세 가지 방법이 있다는 것입니다.


OAuth 클라이언트 ID를 이용하는 방법으로는, 곧바로 인증 정보를 작성할 수 있습니다만, 「oauth 동의 화면」의 설정을 실시하지 않으면 프라이빗 데이터에의 액세스가 100회까지로 제한된다고 해

또한 "oauth 동의 화면"의 설정이 번거롭기 때문에 "서비스 계정"을 사용하는 방법을 시도하고 싶습니다.

서비스 계정 만들기



이하에 입력을 실시해 작성.


완성된 서비스 계정 링크를 클릭


키 만들기를 클릭


JSON 선택


여기에서 다운로드한 Json 내용의 정보를 사용하여 GoogleAPI를 호출합니다.

클라이언트 라이브러리를 사용하여 약속 얻기



Nuget에서 캘린더 용 DLL을 다운로드합니다.


그런 다음 생성한 서비스 계정을 조작할 캘린더를 게시합니다.
대상 캘린더 설정에서 특정 사용자와 공유할 때 추가합니다.

이메일 주소에 서비스 계정의 이메일 주소를 입력합니다.
※다운로드한 JSON의 client_email에도 있습니다.

샘플 코드 구현
이하 .Net의 샘플이 공식적으로 있었으므로, 그쪽을 참고로 해 보겠습니다.
.Net Sample

우선 고피하고, 환경에 의존하는 곳은 변경.
또, 서비스 어카운트로 인증할 필요가 있기 때문에 이하를 참고로 해, credential를 작성하는 곳은 재작성했다.
Google Calendar API ServiceAccountCredential
using Google.Apis.Auth.OAuth2;
using Google.Apis.Calendar.v3;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Threading;

namespace GoogleAPITest
{
    public class Program
    {
        // If modifying these scopes, delete your previously saved credentials
        // at ~/.credentials/calendar-dotnet-quickstart.json
        private static string[] Scopes = { CalendarService.Scope.CalendarReadonly };
        private static string ApplicationName = "Google Calendar API .NET Quickstart";

        public static void Main(string[] args)
        {
            var jObject = JObject.Parse(File.ReadAllText(
                @"C:\job\TestProject\GoogleAPITest\testproject-269217-813bf9be17a5.json"));
            var serviceAccountEmail = jObject["client_email"].ToString();
            var certificate = jObject["private_key"].ToString();

            var credential = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(serviceAccountEmail)
            {
                Scopes = new[] { CalendarService.Scope.Calendar }
            }.FromPrivateKey(certificate));

            // Create Google Calendar API service.
            var service = new CalendarService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

            // おそらく不必要
            // Define parameters of request.
            //var request = service.Events.List("primary");
            //request.TimeMin = DateTime.Now;
            //request.ShowDeleted = false;
            //request.SingleEvents = true;
            //request.MaxResults = 10;
            //request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;

            // ここで第2引数にサービスアカウントに公開したカレンダーIDを指定する
            var request = new EventsResource.ListRequest(service, "公開したカレンダーのカレンダーID");

            // List events.
            var events = request.Execute();
            Console.WriteLine("Upcoming events:");
            if (events.Items != null && events.Items.Count > 0)
            {
                foreach (var eventItem in events.Items)
                {
                    string when = eventItem.Start.DateTime.ToString();
                    if (String.IsNullOrEmpty(when))
                    {
                        when = eventItem.Start.Date;
                    }

                    Console.WriteLine("{0} start:({1}) end:({2})", eventItem.Summary, when, eventItem.End.DateTime.ToString());
                }
            }
            else
            {
                Console.WriteLine("No upcoming events found.");
            }

            Console.Read();
        }
    }
}

게시한 캘린더의 최근


실행 결과


성공적으로 얻은 것 같습니다. (옛날의 이벤트는 무시로···)

이번은 여기까지 합니다.
다음 번에는 캘린더 업데이트를 시도해 보겠습니다.
다음 번

좋은 웹페이지 즐겨찾기