중요: 2024년 9월 30일부터 v2.0 Google Data API 지원이 중단됩니다. 기능을 계속 사용하려면 v2.0 Google Data API를 최신 API 버전으로 업데이트합니다. 최신 버전의 경우 왼쪽 탐색 메뉴의 링크를 사용하세요. 참고: 일부 GET 요청(예: 등록정보 게시물)은 계속해서 피드 URL로 지원되지만 동작에는 약간의 차이가 있습니다. 자세한 내용은 Blogger 도움말 문서를 참고하세요.
Blogger Data API를 사용하면 클라이언트 애플리케이션이 Google Data API 피드 형식으로 Blogger 콘텐츠를 보고 업데이트할 수 있습니다.
클라이언트 애플리케이션에서 Blogger 데이터 API를 사용하여 새 블로그를 만들 수 있습니다. 기존 블로그 게시물을 수정하거나 삭제하고, 일치하는 블로그 게시물을 검색 확인할 수 있습니다
이 문서에서는 Blogger Data API의 기능에 관한 배경 정보를 제공할 뿐만 아니라 .NET 클라이언트 라이브러리를 사용하는 기본 Data API 상호작용의 예시를 제공합니다. 만약 기본 프로토콜에 대해 더 많이 알고 싶다면 프로토콜 섹션을 참조하세요. 이 개발자 가이드를 참조하세요.
목차
잠재고객
이 문서는 .NET 클라이언트를 작성하려는 프로그래머를 위해 작성되었습니다. 애플리케이션입니다.
이 문서에서는 Google 데이터 API API에 대한 일반적인 개념을 이해하고 있다고 가정합니다. 프로토콜을 사용합니다.
클라이언트 라이브러리에서 제공하는 클래스 및 메서드에 관한 참조 정보는 .NET 클라이언트 라이브러리 API 참조를 참고하세요. 일반적인 Blogger 데이터 API 참조 정보는 프로토콜 참조 가이드를 참고하세요.
시작하기
클라이언트 라이브러리 설정에 대한 도움말은 시작 가이드를 참조하세요.
.NET 클라이언트 라이브러리를 사용하려면 .NET 1.1 런타임이 필요하며
또한 모든 패치에서 최신이어야 합니다. Google Maps JavaScript API v2를 다운로드한 후
클라이언트 라이브러리에서는 시작하는 데 필요한 DLL을
배포의 lib/Release
하위 디렉터리입니다.
Blogger 계정 만들기
Blogger 계정을 사용해야 합니다. Blogger는 Google 계정을 사용하므로 이미 Google 계정이 있으면 준비가 된 것입니다.
샘플 코드 실행
이 이 문서는 .NET 클라이언트 라이브러리 프로젝트에서 사용할 수 있습니다. 샘플은 SVN 저장소의 소스 탭에 있는 /trunk/clients/cs/samples/blogger/ConsoleSample.cs에 있습니다.
이 샘플을 컴파일하고 실행하기 전에 username
, password
, blogName
, postId
의 값을 적절한 값으로 업데이트합니다. username
및
password
값은 다음에 로그인하는 데 사용된 사용자 인증 정보를 나타냅니다.
Blogger blogName
값은 블로그의 blogspot URL의 시작 부분입니다.
샘플 클라이언트는 제공된 블로그에서 여러 작업을 수행하여 Blogger 데이터 API 사용 시연
이 문서의 예시를 자체 코드로 컴파일하려면 다음 using
문이 필요합니다.
using Google.GData.Client; using System.Net; using System.Xml; using System.Text.RegularExpressions;
Blogger 서비스에 인증
Blogger Data API를 사용하여 공개 및 비공개 피드에 모두 액세스할 수 있습니다. 공개 피드는 인증이 필요하지 않지만 읽기 전용입니다. 만약 블로그를 수정하려면 클라이언트가 인증한 후에 비공개 피드 AuthSub 프록시 인증 또는 ClientLogin 사용자 이름/비밀번호 인증이라는 두 가지 접근 방식 중 하나를 사용하여 인증할 수 있습니다.
Google 데이터 API를 사용한 인증에 대한 일반적인 정보는 인증 확인 문서를 참조하세요.
AuthSub 프록시 인증
AuthSub 프록시 인증은 Google 계정에 사용자를 인증해야 하는 웹 애플리케이션에서 사용됩니다. 웹사이트 운영자와 클라이언트 코드는 Blogger 사용자의 사용자 이름과 비밀번호에 액세스할 수 없습니다. 대신 클라이언트는 클라이언트가 특정 사용자를 대신하여 작업할 수 있는 특수한 AuthSub 토큰을 가져옵니다. 자세한 내용은 AuthSub 문서를 참조하세요.
사용자는 애플리케이션을 처음 방문할 때 아직 방문하지 않은 있습니다. 이 경우 블로그에 대한 액세스 요청을 인증하기 위해 사용자를 Google 페이지로 안내하는 링크와 일부 정보를 표시해야 합니다.
페이지에 다음 ASP 하이퍼링크가 정의되어 있다고 가정해 보겠습니다.
<asp:HyperLink ID="GotoAuthSubLink" runat="server"/>
그런 다음 애플리케이션의 AuthSubRequest URL을 생성하려면 .NET 다음과 같이 호출할 수 있습니다.
GotoAuthSubLink.Text = "Login to your Google Account"; GotoAuthSubLink.NavigateUrl = AuthSubUtil.getRequestUrl("http://www.example.com/RetrieveToken", "http://www.blogger.com/feeds/", false, true);
getRequestUrl
메서드에는 다음 매개변수가 사용됩니다(AuthSubRequest 핸들러에서 사용하는 쿼리 매개변수에 해당).
- 다음
- Google이 인증 후 사용자를 리디렉션해야 하는 페이지의 URL입니다.
- 범위
- 애플리케이션이 Blogger 피드에 액세스하기 위해 토큰을 요청하고 있음을 나타냅니다. 사용할 범위 문자열은
http://www.blogger.com/feeds/
입니다 (URL 인코딩됨). - 보안
- 클라이언트가 보안 토큰을 요청하는지 여부를 나타냅니다.
- 세션
- 반환된 토큰을 다회용 (세션) 토큰으로 교환할 수 있는지 여부를 나타냅니다.
위 예에서는 보안 토큰을 요청하지 않는 호출을 보여줍니다(secure
값은 false
). 결과 요청 URL은 다음과 같을 수 있습니다.
https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2FRetrieveToken
사용자가 Google 사이트로 연결되는 링크를 클릭하고 Google 계정을 인증합니다.
사용자가 인증하면 AuthSub 시스템은 AuthSubRequest URL의 next
쿼리 매개변수에 지정된 URL로 사용자를 리디렉션합니다. AuthSub 시스템은
token
쿼리 매개변수의 값 따라서 토큰은
ASP 페이지의 Request.QueryString
에서 변수로 액세스 가능
객체를 지정합니다. 사용자가 다음과 같은 URL로 리디렉션됩니다.
http://www.example.com/RetrieveToken?token=yourAuthToken
이 토큰 값은 일회용 AuthSub 토큰을 나타냅니다. 이 예에서
session = true
가 지정되었으므로 이 토큰을
AuthSub 세션 토큰을 생성합니다.
SessionsessionToken = AuthSubUtil.exchangeForSessionToken(Request.QueryStringtoken, null);
즉, 일회용 토큰을
exchangeForSessionToken
메서드(null
와 함께 제공)
(등록되지 않은 모드의 경우) 또는 비공개 키 (등록 모드의 경우) 및 AuthSub
인터페이스는 세션 토큰을 반환합니다. 등록된 애플리케이션 및 비공개 키에 관한 자세한 내용은 AuthSub 문서의 '요청 서명' 섹션을 참고하세요.
그러면 애플리케이션이 이후 단계에서 세션 토큰 값을 Blogger와 어떻게 상호작용하고 있는지 확인해 보세요. .NET 클라이언트 라이브러리에 자동으로 각 요청에서 승인 헤더 (세션 토큰 포함)를 다음과 같습니다.
GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("blogger", "BloggerSampleApp"); authFactory.Token = SessionsessionToken.ToString(); Service service = new Service(authFactory.ApplicationName); service.RequestFactory = authFactory;
ClientLogin 사용자 이름/비밀번호 인증
클라이언트가 독립형 단일 사용자인 경우 ClientLogin 인증 사용 '설치됨' 클라이언트 (예: 데스크톱 애플리케이션)에 연결할 수 있습니다. 다음과 같이 서비스 객체의 사용자 인증 정보를 설정합니다.
Service service = new Service("blogger", "exampleCo-exampleApp-1"); service.Credentials = new GDataCredentials("user@example.com", "secretPassword"); GDataGAuthRequestFactory factory = (GDataGAuthRequestFactory) service.RequestFactory; factory.AccountType = "GOOGLE";
위 스니펫에서는 두 매개변수를 Service
에 전달합니다.
생성자입니다. 첫 번째 매개변수는 상호작용할 서비스의 이름입니다. 두 번째 매개변수는 애플리케이션의 이름으로
companyName-applicationName-versionID 또한
GOOGLE
만 사용하도록 Service.RequestFactory
설정
계정 유형을 변경해야 G Suite 사용자가 올바르게 인증할 수 있습니다.
샘플 등 ClientLogin 인증에 대한 자세한 내용은 자세한 내용은 설치된 앱에 대한 인증 애플리케이션 문서를 참조하세요.
참고: 지정된 세션 각 Blogger 요청에 대해 새 토큰을 가져오지 않습니다.
참고: ClientLogin에 설명된 대로
문서에 표시된 경우 인증 요청이 실패하고 보안문자를 요청할 수 있습니다.
합니다. Google에서 보안문자 챌린지를 생성하고 처리하도록 하려면 ClientLogin 문서에 제공된 보안문자 처리 URL이 아닌 https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
로 사용자를 전송합니다.
블로그 목록 가져오기
Blogger 데이터 API는 특정 주제에 대한 블로그를 나열하는 피드를 제공합니다. user; '메타피드'라고 합니다.
다음 샘플 코드는 인증된 Service
객체를 사용하여 메타피드를 가져온 다음 각 블로그의 제목을 출력합니다.
query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs"); AtomFeed feed = null; try { feed = service.Query(query); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine("Blog Title: " + entry.Title.Text); } }
getFeed
메서드에서 사용하는 URL을 확인합니다. 기본 메타피드 URL입니다. 현재 인증된 사용자의 블로그 목록을 반환합니다.
다른 사용자의 피드에 액세스하려면 메타피드 URL에서 default
대신 사용자의 ID를 입력하면 됩니다. 사용자의 ID는 일련의 숫자입니다.
을 입력합니다.
게시물 만들기
Blogger Data API를 사용하면 새 블로그 항목을 만들고 게시할 뿐만 아니라 항목의 초안을 만들 수 있습니다.
다음 샘플에서는 모두 인증된
Service
객체.
참고: 게시물 맞춤 작성자 설정은 다음과 같습니다. 현재 지원되지 않습니다. 모든 새 게시물은 현재 인증된 사용자가 작성한 것처럼 표시됩니다.
블로그 게시물 게시
.NET 클라이언트 라이브러리를 사용하여 새 블로그 항목을 게시할 수 있습니다.
먼저 블로그 게시물을 나타내는 AtomEntry
객체를 만듭니다.
그런 다음 블로그 게시물의 제목, 콘텐츠, 기타 속성을 설정할 수 있습니다.
마지막으로 Service
객체를 사용하여 게시물을 삽입합니다. 다음은 새 블로그 게시물을 게시하는 방법의 예입니다.
AtomEntry newPost = new AtomEntry(); newPost.Title.Text = "Marriage!"; newPost.Content = new AtomContent(); newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" + "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" + "<p>He is the last man on earth I would ever desire to marry.</p>" + "<p>Whatever shall I do?</p>" + "</div>"; newPost.Content.Type = "xhtml"; Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);
Insert
메서드는 서비스의 게시물 URL을 매개변수로 사용합니다.
그런 다음 메서드는 Blogger에 저장된 항목을 반환합니다. 항목
보낸 항목과 동일하지만 추가된 다양한 요소도 포함되어 있습니다.
Blogger에서 검색(예: 게시물 ID)이 생성됩니다.
어떤 이유로든 요청에 실패하면 Blogger에서 다른 상태를 반환할 수도 있습니다. 생성합니다. 상태 코드에 관한 자세한 내용은 Google Data API 프로토콜 참조 문서를 참고하세요.
블로그 게시물 초안 만들기
초안 게시물은 공개 게시물과 동일한 방식으로 생성되지만 AtomEntry
객체의 draft
속성을 설정해야 합니다. 블로그
강조표시된 줄을 추가하여 위 게시물을 초안으로 만들 수 있습니다.
AtomEntry newPost = new AtomEntry(); newPost.Title.Text = "Marriage!"; newPost.Content = new AtomContent(); newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" + "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" + "<p>He is the last man on earth I would ever desire to marry.</p>" + "<p>Whatever shall I do?</p>" + "</div>"; newPost.Content.Type = "xhtml"; newPost.IsDraft = true; Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);
다음을 검색하여 기존 초안 블로그 게시물을 게시된 게시물로 전환할 수 있습니다. 초안 속성을 false로 설정한 다음 게시물 다음 두 섹션에서는 게시물 검색 및 업데이트를 다룹니다.
게시물 검색
다음 섹션에서는 블로그 게시물 목록을 검색하는 방법을 설명합니다. 쿼리 매개변수를 사용하지 않을 수 있습니다
인증 없이 Blogger 공개 피드를 쿼리할 수 있습니다. 따라서 가져오기 전에 사용자 인증 정보를 설정하거나 AuthSub 인증을 수행할 필요가 없습니다. 게시물을 볼 수 있습니다.
모든 블로그 게시물 검색
사용자의 게시물을 가져오려면 사용된 것과 동일한 getFeed
메서드를 호출합니다.
를 호출하여 블로그 메타피드를 가져오되 이번에는 블로그 게시물 피드 URL을 보냅니다.
query.Uri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); feed = service.Query(query); Console.WriteLine(feed.Title.Text); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine("Entry Title: " + entry.Title.Text); }
쿼리 매개변수를 사용하여 글 검색
Blogger 데이터 API를 사용하면 지정된 것과 일치하는 항목 집합을 요청할 수 있습니다.
특정 날짜에 게시 또는 업데이트된 블로그 게시물을 요청하는 등
범위입니다. 이렇게 하려면 FeedQuery
객체를 만들어
Service.Query()
메서드를 사용하여 지도 가장자리에
패딩을 추가할 수 있습니다.
예를 들어 기간 쿼리를 전송하려면 FeedQuery
객체의 MinPublication
및 MaxPublication
구성원을 설정합니다.
다음 코드 스니펫은
지정된 시작 시간과 종료 시간:
FeedQuery query = new FeedQuery(); query.Uri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); query.MinPublication = new DateTime(2006, 1, 1); query.MaxPublication = new DateTime(2007, 4, 12); AtomFeed feed = service.Query(query); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine(" Entry Title: " + entry.Title.Text); }
FeedQuery
객체는 게시물을 검색하는 데 사용된 것과 동일한 게시물 피드 URL을 사용하여 생성됩니다.
Blogger Data API는 다음 쿼리 매개변수를 지원합니다.
- alt
- 반환할 피드 유형입니다(예:
atom
(기본값) 또는rss
). - /category
- 피드 결과를 필터링할 카테고리(라벨이라고도 함)를 지정합니다. 예를 들어
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
는Fritz
및Laurie
라벨이 모두 있는 항목을 반환합니다. - 최대 결과
- 반환할 최대 항목 수입니다.
- Orderby
- 항목을 반환할 순서입니다(예:
lastmodified
(기본값),starttime
,updated
). - 게시된-최소, 게시된-최대
- 항목 게시일의 경계입니다.
- start-index
- 페이징을 위해 가져올 첫 번째 결과의 1부터 시작하는 색인입니다.
- updated-min, updated-max
- 항목 업데이트 날짜의 경계입니다.
orderby
매개변수가updated
로 설정되지 않으면 이러한 쿼리 매개변수는 무시됩니다.
쿼리 매개변수에 관한 자세한 내용은 Blogger Data API 참조 가이드 및 Google Data API 참조 가이드를 참고하세요.
게시물 업데이트
기존 블로그 게시물을 업데이트하려면 먼저 업데이트할 항목을 가져온 다음 수정한 후 항목의 Update()
메서드를 사용하여 Blogger로 전송합니다. 다음 코드 스니펫은 이미 서버에서 항목을 검색했다고 가정하고 블로그 항목의 제목을 수정합니다.
static AtomEntry EditEntry(AtomEntry toEdit) { // Edit the entry by changing the Title and calling Update(). if (toEdit != null) { toEdit.Title.Text = "Marriage Woes!"; toEdit = toEdit.Update(); } return toEdit; }
위의 코드는 새로 업데이트된 전체 게시물이 포함된 AtomEntry
를 반환합니다. 다른 속성을 업데이트하려면 간단히
AtomEntry
객체를 반환합니다.Update()
참고: 게시물은 현재 지원되지 않습니다.
게시물 삭제
게시물을 삭제하려면 기존 게시물에서 Delete
메서드를 호출합니다.
AtomEntry
객체입니다.
static void DeleteEntry(AtomEntry toDelete) { // Delete the edited entry if (toDelete != null) { toDelete.Delete(); } }
댓글
Blogger Data API를 사용하면 댓글을 만들고 검색하고 삭제할 수 있습니다. 댓글 업데이트는 지원되지 않으며 웹 인터페이스에서도 사용할 수 없습니다.
댓글 만들기
댓글을 게시하려면 AtomEntry
객체를 만들고 다음과 같이 삽입합니다.
AtomEntry comment; comment = new AtomEntry(); comment.Title.Text = "This is my first comment"; comment.Content.Content = "This is my first comment"; Uri commentPostUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/" + entryId + "/comments/default"); postedComment = service.Insert(commentPostUri, comment);
참고: 현재 인증된 사용자가 소유한 블로그에만 댓글을 게시할 수 있습니다.
참고: 댓글 작성자 맞춤 설정은 다음과 같습니다. 현재 지원되지 않습니다. 모든 새 댓글은 다음 사용자가 작성한 것처럼 표시됩니다. 사용자 인증 정보를 제공합니다
댓글 가져오기
게시물의 댓글 피드 URL에서 특정 게시물의 댓글을 검색할 수 있습니다.
static void ListEntryComments(Service service, Uri commentUri) { if (commentUri != null) { // Retrieve all comments on a blog entry FeedQuery query = new FeedQuery(); query.Uri = commentUri; AtomFeed feed = service.Query(query); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine(" Comment Title: " + entry.Title.Text); } } }
또는 블로그의 댓글 피드를 사용하여 모든 게시물의 댓글을 가져올 수 있습니다. URL:
http://www.blogger.com/feeds/blogID/comments/default
댓글 삭제 중
댓글을 삭제하려면 기존 댓글에서 Delete()
메서드를 호출합니다.
다음과 같이 AtomEntry
객체에 대한 댓글을 작성합니다.
static void DeleteComment(AtomEntry commentEntry) { if (commentEntry != null) { // Delete the comment. commentEntry.Delete(); } }