개발자 가이드: 자바

중요: 이 페이지는 이전 버전입니다. 최신 버전의 경우 왼쪽 탐색 메뉴의 링크를 사용하세요.

Blogger Data API를 사용하면 클라이언트 애플리케이션이 Google Data API 피드 형식으로 Blogger 콘텐츠를 보고 업데이트할 수 있습니다.

클라이언트 애플리케이션은 Blogger Data API를 사용하여 새 블로그 게시물을 만들고, 기존 블로그 게시물을 수정 또는 삭제하고, 특정 기준과 일치하는 블로그 게시물을 쿼리할 수 있습니다.

이 문서에서는 Blogger Data API의 기능에 관한 배경 정보를 제공할 뿐만 아니라 Java 클라이언트 라이브러리를 사용하는 기본 Data API 상호작용의 예시를 제공합니다. 라이브러리가 사용하는 기본 프로토콜에 관해 자세히 알아보려면 이 개발자 가이드의 프로토콜 섹션을 참고하세요.

목차

잠재고객

이 문서는 Blogger와 상호작용할 수 있는 Java 클라이언트 애플리케이션을 작성하려는 프로그래머를 대상으로 합니다.

이 문서에서는 Google Data API 프로토콜의 일반적인 개념을 이해하고 있다고 가정합니다.

클라이언트 라이브러리에서 제공하는 클래스 및 메서드에 관한 참조 정보는 Java 클라이언트 라이브러리 API 참조를 참고하세요. 일반적인 Blogger Data API 참조 정보는 프로토콜 참조 가이드를 참고하세요.

시작하기

클라이언트 라이브러리 설정에 관한 도움말은 시작 가이드를 참고하세요.

Java 클라이언트 라이브러리에는 Java 1.5가 필요합니다. 클라이언트 라이브러리를 다운로드한 후 java/lib/gdataclient-1.0.jar 파일에서 시작하는 데 필요한 클래스를 찾을 수 있습니다.

Blogger 계정 만들기

테스트 목적으로 Blogger 계정을 등록하는 것이 좋습니다. Blogger는 Google 계정을 사용하므로 이미 Google 계정이 있다면 바로 시작할 수 있습니다.

샘플 코드 실행

이 문서에 표시된 모든 샘플 코드가 포함된 완전한 작동 샘플 클라이언트는 Java 클라이언트 라이브러리 배포의 gdata/java/sample/blogger/BloggerClient.java 디렉터리에서 사용할 수 있습니다. 빌드 및 실행 안내는 README.txt 파일의 동일한 디렉터리에 포함되어 있습니다.

샘플 클라이언트는 제공된 블로그에서 여러 작업을 실행하여 Blogger Data API 사용을 보여줍니다.

이 문서의 예시를 자체 코드로 컴파일하려면 다음 import 문이 필요합니다.

import com.google.gdata.client.*;
import com.google.gdata.data.*;
import com.google.gdata.util.*;
import java.io.IOException;
import java.net.URL;

Blogger 서비스에 인증

Blogger Data API를 사용하여 공개 및 비공개 피드에 모두 액세스할 수 있습니다. 공개 피드에는 인증이 필요하지 않지만 읽기 전용입니다. 블로그를 수정하려면 클라이언트가 비공개 피드를 요청하기 전에 인증해야 합니다. AuthSub 프록시 인증 또는 ClientLogin 사용자 이름/비밀번호 인증이라는 두 가지 접근 방식 중 하나를 사용하여 인증할 수 있습니다.

일반적으로 Google Data API를 통한 인증에 관한 자세한 내용은 인증 문서를 참고하세요.

이 문서의 후속 섹션에 있는 대부분의 샘플은 인증된 GoogleService 객체가 있다고 가정합니다.

AuthSub 프록시 인증

AuthSub 프록시 인증은 Google 계정에 사용자를 인증해야 하는 웹 애플리케이션에서 사용됩니다. 웹사이트 운영자와 클라이언트 코드는 Blogger 사용자의 사용자 이름과 비밀번호에 액세스할 수 없습니다. 대신 클라이언트는 클라이언트가 특정 사용자를 대신하여 작업할 수 있는 특수한 AuthSub 토큰을 가져옵니다. 자세한 내용은 AuthSub 문서를 참고하세요.

사용자가 애플리케이션을 처음 방문할 때는 아직 인증되지 않았습니다. 이 경우 블로그에 대한 액세스 요청을 인증하기 위해 사용자를 Google 페이지로 안내하는 링크와 일부 정보를 표시해야 합니다. Java 클라이언트 라이브러리는 Google 페이지의 URL을 생성하는 함수를 제공합니다. 다음 코드는 AuthSubRequest 페이지의 URL을 가져옵니다.

String next = "http://www.example.com/welcome.html";
String scope = "http://www.blogger.com/feeds/";
boolean secure = false;
boolean session = true;
String authSubLogin = AuthSubUtil.getRequestUrl(next, scope, secure, session);

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%2Fwelcome.html

사용자가 Google 사이트로 연결된 링크를 따라 Google 계정에 인증합니다.

사용자가 인증하면 AuthSub 시스템은 AuthSubRequest URL의 next 쿼리 매개변수에 지정된 URL로 사용자를 리디렉션합니다. AuthSub 시스템은 인증 토큰을 token 쿼리 매개변수의 값으로 해당 URL에 추가합니다. 예를 들면 다음과 같습니다.

http://www.example.com/welcome.html?token=yourAuthToken

이 토큰 값은 일회용 AuthSub 토큰을 나타냅니다. 이 예에서는 session = true가 지정되었으므로 다음과 같이 AuthSubSessionToken 서비스를 호출하여 이 토큰을 AuthSub 세션 토큰으로 교환할 수 있습니다. 여기서 urlFromAuthSub는 AuthSub가 토큰을 추가한 URL입니다.

String token = AuthSubUtil.getTokenFromReply(urlFromAuthSub);
String sessionToken = AuthSubUtil.exchangeForSessionToken(token, null);

즉, 일회용 토큰을 exchangeForSessionToken 메서드에 null(등록되지 않은 모드의 경우) 또는 비공개 키 (등록된 모드의 경우)와 함께 전달하면 AuthSub 인터페이스가 세션 토큰을 반환합니다. 등록된 애플리케이션 및 비공개 키에 관한 자세한 내용은 AuthSub 문서의 '요청 서명' 섹션을 참고하세요.

그러면 애플리케이션은 Blogger와의 후속 상호작용에서 세션 토큰을 사용할 수 있습니다. Java 클라이언트 라이브러리에 각 요청과 함께 세션 토큰을 자동으로 전송하도록 지시하려면 GoogleService 객체의 setAuthSubToken 메서드를 호출합니다.

GoogleService.setAuthSubToken(sessionToken, null);

그런 다음 클라이언트 라이브러리는 모든 요청과 함께 토큰을 자동으로 전송합니다.

ClientLogin 사용자 이름/비밀번호 인증

클라이언트가 독립형 싱글 사용자 '설치된' 클라이언트 (예: 데스크톱 애플리케이션)인 경우 ClientLogin 인증을 사용하세요. GoogleService 객체에서 setUserCredentials 메서드를 호출하기만 하면 이후 Blogger와의 모든 상호작용이 인증됩니다.

GoogleService myService = new GoogleService("blogger", "exampleCo-exampleApp-1");
myService.setUserCredentials("user@example.com", "secretPassword");

위 스니펫에서는 GoogleService 생성자에 두 개의 매개변수를 전달합니다. 첫 번째 매개변수는 상호작용할 서비스의 이름입니다. 두 번째 매개변수는 companyName-applicationName-versionID 형식의 애플리케이션 이름입니다.

샘플 요청 및 응답을 포함하여 ClientLogin 인증에 관한 자세한 내용은 설치된 애플리케이션 인증 문서를 참고하세요.

참고: 지정된 세션의 모든 요청에 동일한 토큰을 사용합니다. Blogger 요청마다 새 토큰을 가져오지 마세요.

참고: ClientLogin 문서에 설명된 대로 인증 요청이 실패하여 CAPTCHA 챌린지를 요청할 수 있습니다. Google에서 보안문자 챌린지를 생성하고 처리하도록 하려면 ClientLogin 문서에 제공된 보안문자 처리 URL이 아닌 https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger로 사용자를 전송하세요.

블로그 목록 가져오기

Blogger Data API는 특정 사용자의 블로그를 나열하는 피드를 제공합니다. 이 피드는 '메타피드'라고 합니다.

다음 샘플 코드는 인증된 GoogleService 객체를 사용하여 메타피드를 가져온 다음 각 블로그의 제목을 출력합니다.

public static void printUserBlogs(GoogleService myService)
    throws ServiceException, IOException {

  // Request the feed
  final URL feedUrl = new URL("http://www.blogger.com/feeds/default/blogs");
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
  }
}

getFeed 메서드에서 사용하는 URL을 확인합니다. 기본 메타피드 URL입니다. 현재 인증된 사용자의 블로그 목록을 반환합니다. 다른 사용자의 피드에 액세스하려면 메타피드 URL에서 default 대신 사용자의 ID를 입력하면 됩니다. 사용자 ID는 사용자의 프로필 URL 끝에 있는 숫자 문자열입니다.

게시물 만들기

Blogger Data API를 사용하면 새 블로그 항목을 만들고 게시할 뿐만 아니라 항목의 초안을 만들 수 있습니다.

참고: 현재 게시물의 맞춤 작성자를 설정하는 기능은 지원되지 않습니다. 모든 새 게시물은 현재 인증된 사용자가 작성한 것처럼 표시됩니다.

블로그 게시물 게시

Java 클라이언트 라이브러리를 사용하여 새 블로그 항목을 게시할 수 있습니다.

먼저 블로그 게시물을 나타내는 Entry 객체를 만듭니다. 그런 다음 블로그 게시물의 제목, 콘텐츠, 기타 속성을 설정할 수 있습니다. 마지막으로 GoogleService 객체를 사용하여 게시물을 삽입합니다. 다음은 새 블로그 게시물을 게시하는 방법의 예입니다.

public static Entry createPost(
    GoogleService myService, String blogID, String title,
    String content, String userName)
    throws ServiceException, IOException {
  // Create the entry to insert
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));

  // Ask the service to insert the new entry
  URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  return myService.insert(postUrl, myEntry);
}

insert 메서드는 서비스의 게시물 URL을 매개변수로 사용합니다. 그런 다음 메서드는 Blogger에 저장된 항목을 반환합니다. 반환된 항목은 전송한 항목과 동일하지만 게시물 ID와 같이 Blogger에서 추가한 다양한 요소도 포함됩니다.

어떤 이유로든 요청이 실패하면 Blogger에서 다른 상태 코드를 반환할 수 있습니다. 상태 코드에 관한 자세한 내용은 Google Data API 프로토콜 참조 문서를 참고하세요.

블로그 게시물 초안 만들기

초안 게시물은 공개 게시물과 동일한 방식으로 생성되지만 Entry 객체의 draft 속성을 설정해야 합니다. 강조 표시된 줄을 추가하여 위와 같은 블로그 게시물을 초안으로 만들 수 있습니다.

public static Entry createPost(GoogleService myService, String blogId,
    String title, String content, String userName,
    Boolean isDraft)
    throws ServiceException, IOException {
  // Create the entry to insert
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));
  myEntry.setDraft(isDraft);

  // Ask the service to insert the new entry
  URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  return myService.insert(postUrl, myEntry);
}

초안 블로그 게시물을 가져와 초안 속성을 false로 설정한 다음 게시물을 업데이트하여 기존 초안 블로그 게시물을 게시된 게시물로 전환할 수 있습니다. 다음 두 섹션에서는 게시물 검색 및 업데이트를 다룹니다.

게시물 검색

다음 섹션에서는 쿼리 매개변수를 사용하거나 사용하지 않고 블로그 게시물 목록을 검색하는 방법을 설명합니다.

인증 없이 Blogger 공개 피드를 쿼리할 수 있습니다. 따라서 공개 블로그에서 게시물을 가져오기 전에 setUserCredentials 메서드를 호출하거나 AuthSub 인증을 실행할 필요가 없습니다.

모든 블로그 게시물 검색

사용자의 게시물을 검색하려면 블로그 메타피드를 검색하는 데 사용한 것과 동일한 getFeed 메서드를 호출하되 이번에는 블로그 게시물 피드 URL을 전송합니다.

public static void printAllPosts(
    GoogleService myService, String blogId)
    throws ServiceException, IOException {
  // Request the feed
  URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
  }
  System.out.println();
}

쿼리 매개변수를 사용하여 게시물 검색

Blogger Data API를 사용하면 지정된 날짜 범위 내에 게시되거나 업데이트된 블로그 게시물을 요청하는 등 지정된 기준과 일치하는 항목 집합을 요청할 수 있습니다. 이렇게 하려면 Query 객체를 만들고 이를 GoogleService.getQuery 메서드에 전달합니다.

예를 들어 기간 쿼리를 전송하려면 Query 객체의 setPublishedMinsetPublishedMax 메서드를 사용합니다. 다음 코드 스니펫은 지정된 시작 시간과 종료 시간 사이에 게시된 각 블로그 게시물의 제목을 출력합니다.

public static void printDateRangeQueryResults(
    GoogleService myService, String blogId,
    DateTime startTime, DateTime endTime)
    throws ServiceException, IOException {
  // Create query and submit a request
  URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  Query myQuery = new Query(feedUrl);
  myQuery.setPublishedMin(startTime);
  myQuery.setPublishedMax(endTime);
  Feed resultFeed = myService.query(myQuery, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText() +
      " posts between " + startTime + " and " + endTime);
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
    System.out.println("\t" + entry.getUpdated().toStringRfc822());
  }
  System.out.println();
}

Query 객체는 게시물을 검색하는 데 사용된 것과 동일한 게시물 피드 URL을 사용하여 생성됩니다.

Blogger Data API는 다음 Query 메서드를 지원합니다.

addCategoryFilter
피드 결과를 필터링할 카테고리 (라벨이라고도 함)를 지정합니다. 예를 들어 http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/LaurieFritzLaurie 라벨이 모두 있는 항목을 반환합니다.
setMaxResults
반환할 최대 항목 수를 설정합니다.
setPublishedMin, setPublishedMax
항목 게시일의 경계를 설정합니다.
setStartIndex
검색할 첫 번째 결과의 1로 시작하는 색인을 설정합니다 (페이징용).
setUpdatedMin, setUpdatedMax
항목 업데이트 날짜의 경계를 설정합니다. 이러한 쿼리 매개변수는 orderby 매개변수가 updated로 설정되지 않는 한 무시됩니다.

참고: 현재 orderby 쿼리 매개변수의 setter는 없습니다. 하지만 설정해야 하는 경우 Query.addCustomParameter() 메서드를 계속 사용할 수 있습니다.

쿼리 매개변수에 관한 자세한 내용은 Blogger Data API 참조 가이드Google Data API 참조 가이드를 참고하세요.

게시물 업데이트

기존 블로그 게시물을 업데이트하려면 먼저 업데이트할 항목을 가져온 다음 수정한 후 update 메서드를 사용하여 Blogger로 전송합니다. 다음 코드 스니펫은 이미 서버에서 항목을 검색했다고 가정하고 블로그 항목의 제목을 수정합니다.

public static Entry updatePostTitle(
    GoogleService myService, Entry entryToUpdate, String newTitle)
    throws ServiceException, IOException {
  entryToUpdate.setTitle(new PlainTextConstruct(newTitle));
  URL editUrl = new URL(entryToUpdate.getEditLink().getHref());
  return myService.update(editUrl, entryToUpdate);
}

위의 코드는 새로 업데이트된 전체 게시물이 포함된 Entry를 반환합니다. 다른 속성을 업데이트하려면 update를 호출하기 전에 Entry 객체에서 속성을 설정하기만 하면 됩니다.

참고: 현재 게시물과 연결된 작성자 데이터는 수정할 수 없습니다.

게시물 삭제

게시물을 삭제하려면 다음과 같이 게시물의 수정 URL을 GoogleService 객체의 delete 메서드에 전달합니다.

public static void deletePost(
    GoogleService myService, String editLinkHref)
    throws ServiceException, IOException {
  URL deleteUrl = new URL(editLinkHref);
  myService.delete(deleteUrl);
}

댓글

Blogger Data API를 사용하면 댓글을 생성, 검색, 삭제할 수 있습니다. 댓글 업데이트는 지원되지 않으며 웹 인터페이스에서도 사용할 수 없습니다.

댓글 만들기

댓글을 게시하려면 Entry 객체를 만들고 다음과 같이 삽입합니다.

public static Entry createComment(
    GoogleService myService, String blogID, String postId,
    String commentText)
    throws ServiceException, IOException {
  // Build the comment feed URI
  String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
  URL feedUrl = new URL(commentsFeedUri);

  // Create a new entry for the comment and submit it to the GoogleService
  Entry myEntry = new Entry();
  myEntry.setContent(new PlainTextConstruct(commentText));
  return myService.insert(feedUrl, myEntry);
}

참고: 현재 인증된 사용자가 소유한 블로그에만 댓글을 게시할 수 있습니다.

참고: 현재 주석에 맞춤 작성자를 설정하는 기능은 지원되지 않습니다. 모든 새 댓글은 현재 인증된 사용자가 작성한 것처럼 표시됩니다.

댓글 가져오기

게시물의 댓글 피드 URL에서 특정 게시물의 댓글을 검색할 수 있습니다.

public static void printAllComments(
    GoogleService myService, String blogID, String postId)
    throws ServiceException, IOException {
  // Build comment feed URI and request comments on the specified post
  String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
  URL feedUrl = new URL(commentsFeedUri);
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Display the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" +
        ((TextContent) entry.getContent()).getContent().getPlainText());
    System.out.println("\t" + entry.getUpdated().toStringRfc822());
  }
  System.out.println();
}

또는 블로그의 댓글 피드 URL을 사용하여 모든 게시물의 댓글을 가져올 수 있습니다.

http://www.blogger.com/feeds/blogID/comments/default

댓글 삭제

댓글을 삭제하려면 다음과 같이 댓글의 수정 URL을 GoogleService 객체의 delete 메서드에 전달합니다.

public static void deleteComment(GoogleService myService, String editLinkHref)
    throws ServiceException, IOException {
  URL deleteUrl = new URL(editLinkHref);
  myService.delete(deleteUrl);
}

맨 위로