2017. 5. 18. 15:30

전 포스팅에서 생성하는 방법을 해봤으니 이번에는 구글 도서(Google books, 북스)를 이용하여 간단한 테스트 프로그램을 만들어 API를 호출하여 봅시다.

 

연관글 영역

 

 

0. 준비

테스트를 위해 '구글 도서 API'와 공개된 '서가'가 세팅되어 있어야 합니다.

아랫글을 참고해서 세팅하시면 됩니다.

참고 : 구글 클라우드 플랫폼 API 기초 - 3. 테스트 환경 만들기

 

프로젝트는 C#, Winform으로 생성합니다.

1. API Key 사용하기

구글 API Key는 공개된 정보를 가지고 올 때 주로 사용합니다.

'APIKey_Test' 클래스를 추가하고 다음 내용을 넣습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
using Google.Apis.Books.v1;
using Google.Apis.Books.v1.Data;
using Google.Apis.Services;
 
namespace GoogleCredentials_Test
{
    public class APIKey_Test
    {
        public async Task<string> Run()
        {
            StringBuilder sbReturn = new StringBuilder();
            sbReturn.Append("*** API key test ***" + Environment.NewLine);
            sbReturn.Append("- 공개 서가 리스트 -" + Environment.NewLine);
 
            //북서비스생성
            //API Key 타입으로 생성한다.
            var service = new BooksService(new BaseClientService.Initializer()
            {
                ApplicationName = GlobalData.ProgramTitle,
                ApiKey = "[생성한 API Key]",
            });
 
            //조회할 사용자 정보 입력
            var result = await service.Bookshelves.List("[조회할 User Key]").ExecuteAsync();
 
            if (null != result)
            {//결과가 있다.
                //결과 정보를 출력한다.
                foreach (Bookshelf book in result.Items)
                {
                    sbReturn.Append(string.Format( "{0}({1})", book.Title, book.Id) + Environment.NewLine);
                }
            }
 
            sbReturn.Append(string.Format("- 총 {0}개 서가 -", result.Items.Count) + Environment.NewLine);
 
            return sbReturn.ToString();
        }
    }
}
 
cs

 

 

이 코드를 실행하면 다음 결과가 나옵니다.

 

 

공개된 서가만 조회된 것을 알 수 있습니다.

 

2. OAuth2 사용하기

REST 방식을 사용하는 표준적인 인증방법입니다.

인증이 시작되면 사용자에게 로그인과 권한 설정을 위한 별도의 페이지가 표시됩니다.

이런 내용은 사용자 인증정보를 생성할 때 미리 설정해야 합니다.

 

'OAuth2_Test' 클래스를 추가하고 아래 코드를 넣습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
using Google.Apis.Auth.OAuth2;
using Google.Apis.Books.v1;
using Google.Apis.Books.v1.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
 
 
namespace GoogleCredentials_Test
{
    public class OAuth2_Test
    {
        public async Task<string> Run()
        {
            StringBuilder sbReturn = new StringBuilder();
            sbReturn.Append("*** API key test ***" + Environment.NewLine);
            sbReturn.Append("- 모든 서가 리스트 -" + Environment.NewLine);
 
            //인증 정보 가지고 오기 
            UserCredential credential;
            using (var stream = new FileStream("[다운 받은 Client Secrets 파일].json", FileMode.Open, FileAccess.Read))
            {
                credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    new[] { BooksService.Scope.Books },
                    "user", CancellationToken.None, new FileDataStore("Books.ListMyLibrary"));
            }
 
            //OAuth 2.0 서비스 생성
            var service = new BooksService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "Books API Sample",
            });
 
            //클라이언트 시크릿의 정보를 토대로 데이터를 받아 온다.
            var result = await service.Bookshelves.List("[조회할 User Key]").ExecuteAsync();
 
 
            if (null != result)
            {//결과가 있다.
             //결과 정보를 출력한다.
                foreach (Bookshelf book in result.Items)
                {
                    sbReturn.Append(string.Format("{0}({1})", book.Title, book.Id) + Environment.NewLine);
                }
            }
 
            sbReturn.Append(string.Format("- 총 {0}개 서가 -", result.Items.Count) + Environment.NewLine);
 
            return sbReturn.ToString();
        }
    }
}
cs

 

 

실행하면 인증을 위한 웹페이지가 표시되고 인증이 완료되면 자동으로 닫칩니다.

인증이 완료되었으면 다음과 같이 모든 서가의 정보가 표시됩니다.

 

 

 

3. Service Account Key

서비스 어카운트 키는 사용자가 접속을 끊은 경우에도 API를 호출하기 위해 사용합니다.

그래서 접근수준이 API Key와 비슷하죠.

 

'ServiceAccount_Test' 클래스를 생성하고 아래 코드를 넣습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Text;
using System.Threading.Tasks;
 
using Google.Apis.Books.v1;
using Google.Apis.Books.v1.Data;
using Google.Apis.Services;
using Google.Apis.Auth.OAuth2;
using System.Security.Cryptography.X509Certificates;
 
namespace GoogleCredentials_Test
{
    public class ServiceAccount_Test
    {
        public async Task<string> Run()
        {
            StringBuilder sbReturn = new StringBuilder();
            sbReturn.Append("*** API key test ***" + Environment.NewLine);
            sbReturn.Append("- 모든 서가 리스트 -" + Environment.NewLine);
 
            //loading the Key file
            var certificate = new X509Certificate2(@"[다운받은 서비스 계정 키 파일].p12""notasecret", X509KeyStorageFlags.Exportable);
            var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer("[서비스 계정 키를 생성할 때 넣었던 ]")
            {
                Scopes = new string[] { BooksService.Scope.Books },
            }.FromCertificate(certificate));
 
            //북서비스생성
            //OAuth 2.0 서비스 생성
            var service = new BooksService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "Books API Sample",
            });
 
            //조회할 사용자 정보 입력
            var result = await service.Bookshelves.List("[조회할 유저 키]").ExecuteAsync();
 
            if (null != result)
            {//결과가 있다.
             //결과 정보를 출력한다.
                foreach (Bookshelf book in result.Items)
                {
                    sbReturn.Append(string.Format("{0}({1})", book.Title, book.Id) + Environment.NewLine);
                }
            }
 
            sbReturn.Append(string.Format("- 총 {0}개 서가 -", result.Items.Count) + Environment.NewLine);
 
            return sbReturn.ToString();
        }
    }
}
cs

 

 

만약 이미 만들어진 'Compute Engine default service account'로 키를 생성했다면

이메일은 '52209880742-compute@developer.gserviceaccount.com'으로 되어 있습니다.

 

 

 

공개된 서가만 표시됩니다.

 

 

마무리

샘플 프로젝트 :

GoogleCredentials_Public.zip
다운로드

 

이렇게 간단하게 구글에서 제공하는 라이브러리를 이용하여 API를 호출해 보았습니다.

라이브러리 자체에서 키 관리나 호출 같은 것들을 자동으로 관리해주니 편리합니다.

라이브러리가 잘돼 있는 편이라 사용하기 좋습니다.