Hướng dẫn cho nhà phát triển: Java

Lưu ý quan trọng: Chúng tôi sẽ ngừng hỗ trợ Google Data API phiên bản 2.0 kể từ ngày 30 tháng 9 năm 2024. Để đảm bảo chức năng liên tục, hãy cập nhật các ứng dụng dựa trên phiên bản Google v2.0 Data API lên phiên bản API mới nhất. Để xem phiên bản mới nhất, hãy sử dụng các đường liên kết trong thanh điều hướng bên trái. Lưu ý: mặc dù một số yêu cầu GET (chẳng hạn như bài đăng liệt kê) sẽ tiếp tục được hỗ trợ làm nguồn cấp dữ liệu URL, có những khác biệt nhỏ về hành vi. Để biết thông tin chi tiết, hãy tham khảo Tài liệu Trợ giúp Blogger.

API Dữ liệu Blogger cho phép các ứng dụng khách xem và cập nhật nội dung trên Blogger dưới dạng nguồn cấp dữ liệu API Google Data.

Ứng dụng khách của bạn có thể dùng Blogger Data API để tạo blog mới bài đăng, chỉnh sửa hoặc xoá các bài đăng hiện có trên blog và truy vấn các bài đăng trên blog phù hợp tiêu chí cụ thể.

Ngoài việc cung cấp một số thông tin cơ bản về những khả năng của Blogger Data API. Tài liệu này đưa ra ví dụ về các hoạt động tương tác cơ bản với Data API ứng dụng Java thư viện. Nếu bạn muốn tìm hiểu thêm về giao thức cơ bản mà thư viện sử dụng, hãy xem phần Giao thức trong hướng dẫn dành cho nhà phát triển này.

Nội dung

Đối tượng

Tài liệu này dành cho các lập trình viên muốn viết ứng dụng Java có thể tương tác với Blogger.

Tài liệu này giả định rằng bạn hiểu các ý tưởng chung đằng sau giao thức API Dữ liệu của Google.

Để biết thông tin tham khảo về các lớp và phương thức do thư viện ứng dụng cung cấp, hãy xem Tài liệu tham khảo API thư viện ứng dụng Java. Để biết thông tin tham khảo chung về API Dữ liệu Blogger, hãy xem Hướng dẫn tham khảo về giao thức.

Bắt đầu

Để được trợ giúp thiết lập thư viện ứng dụng, hãy xem Hướng dẫn bắt đầu.

Thư viện ứng dụng Java yêu cầu Java 1.5. Sau khi tải thư viện ứng dụng xuống, bạn sẽ thấy các lớp cần thiết để bắt đầu trong tệp java/lib/gdataclient-1.0.jar.

Tạo tài khoản Blogger

Bạn nên đăng ký một tài khoản Blogger cho mục đích thử nghiệm. Blogger sử dụng Tài khoản Google, vì vậy nếu bạn khi đã có Tài khoản Google, thế là bạn đã hoàn tất.

Chạy mã mẫu

Một ứng dụng mẫu đầy đủ đang hoạt động, chứa tất cả mã mẫu được hiển thị trong tài liệu này, có trong bản phân phối thư viện ứng dụng Java, trong thư mục gdata/java/sample/blogger/BloggerClient.java. Hướng dẫn tạo bản dựng và hướng dẫn thực thi được đưa vào cùng một thư mục trong tệp README.txt.

Ứng dụng mẫu thực hiện một số thao tác trên blog được cung cấp để minh hoạ cách sử dụng Blogger Data API.

Để biên dịch các ví dụ trong tài liệu này thành mã của riêng mình, bạn sẽ cần import câu lệnh sau:

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

Xác thực với dịch vụ Blogger

Bạn có thể truy cập cả nguồn cấp dữ liệu công khai và riêng tư bằng API Dữ liệu của Blogger. Nguồn cấp dữ liệu công khai không yêu cầu xác thực, nhưng chỉ có thể đọc. Nếu bạn muốn sửa đổi blog, thì khách hàng của bạn cần xác thực trước khi yêu cầu nguồn cấp dữ liệu riêng tư. Ứng dụng này có thể xác thực bằng một trong 3 phương pháp sau: xác thực OAuth, proxy AuthSub xác thực hoặc tên người dùng/mật khẩu ClientLogin xác thực.

Để biết thêm thông tin chung về việc xác thực bằng API Dữ liệu của Google, hãy xem tài liệu về xác thực.

Hầu hết các mẫu trong các phần tiếp theo của tài liệu này đều giả định rằng bạn có đối tượng GoogleService đã xác thực.

Xác thực OAuth

Để xem tài liệu về cách xác thực OAuth bằng thư viện Java GData, vui lòng xem OAuth trong Thư viện ứng dụng giao thức dữ liệu của Google.

Xác thực proxy AuthSub

Xác thực proxy AuthSub được sử dụng bởi các ứng dụng web cần xác thực người dùng với Tài khoản Google. Đơn vị điều hành trang web và khách hàng không có quyền truy cập vào tên người dùng và mật khẩu của người dùng Blogger; thay vào đó, ứng dụng nhận được mã thông báo AuthSub đặc biệt cho phép ứng dụng hành động thay mặt cho một người dùng cụ thể. Để biết thêm thông tin chi tiết, hãy xem Tài liệu AuthSub.

Khi người dùng truy cập vào ứng dụng của bạn lần đầu tiên, họ chưa được xác thực. Trong trường hợp này, bạn cần hiển thị một số thông tin và đường liên kết dẫn người dùng đến một trang của Google để xác thực yêu cầu truy cập vào blog của họ. Thư viện ứng dụng Java cung cấp một hàm để tạo URL của trang Google. Mã bên dưới truy xuất URL của trang AuthSubRequest:

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);

Phương thức getRequestUrl nhận các tham số sau (tương ứng với tham số truy vấn được AuthSubRequest sử dụng trình xử lý):

tiếp theo
URL của trang mà Google nên chuyển hướng người dùng đến sau khi xác thực.
phạm vi
Cho biết ứng dụng đang yêu cầu mã thông báo để truy cập vào nguồn cấp dữ liệu Blogger. Chuỗi phạm vi cần sử dụng là http://www.blogger.com/feeds/ (dĩ nhiên là được mã hoá URL).
bảo mật
Cho biết liệu ứng dụng khách có đang yêu cầu mã thông báo bảo mật hay không.
phiên
Cho biết liệu có thể đổi mã thông báo được trả về lấy mã thông báo đa mục đích (phiên) hay không.

Ví dụ trên cho thấy một lệnh gọi không yêu cầu mã thông báo bảo mật (giá trị của securefalse). URL yêu cầu thu được có thể có dạng như sau:

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

Người dùng truy cập vào đường liên kết đến trang web của Google và xác thực vào Tài khoản Google của họ.

Sau khi người dùng xác thực, hệ thống AuthSub sẽ chuyển hướng họ đến URL mà bạn đã chỉ định trong tham số truy vấn next của AuthSubRequest URL. Hệ thống AuthSub sẽ thêm một mã thông báo xác thực vào URL đó, dưới dạng của tham số truy vấn token. Ví dụ:

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

Giá trị mã thông báo này đại diện cho mã thông báo AuthSub dùng một lần. Trong ví dụ này, vì session = true đã được chỉ định, nên mã thông báo này có thể được trao đổi cho mã thông báo phiên AuthSub bằng cách gọi dịch vụ AuthSubSessionToken như sau, trong đó urlFromAuthSub là URL mà AuthSub đã thêm mã thông báo vào:

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

Tức là bạn chuyển mã thông báo dùng một lần đến exchangeForSessionToken cùng với null (đối với chế độ chưa đăng ký) hoặc khoá riêng tư (đối với chế độ đã đăng ký) và AuthSub sẽ trả về một mã thông báo phiên. Để biết thêm thông tin về các trang web đã đăng ký ứng dụng và khóa riêng tư, hãy xem phần "Ký yêu cầu" của tài liệu AuthSub.

Sau đó, ứng dụng của bạn có thể sử dụng mã thông báo phiên trong các tương tác tiếp theo với Blogger. Để yêu cầu thư viện ứng dụng Java tự động gửi mã thông báo phiên với mỗi yêu cầu, hãy gọi phương thức setAuthSubToken của đối tượng GoogleService:

GoogleService.setAuthSubToken(sessionToken, null);

Sau đó, thư viện ứng dụng sẽ tự động gửi mã thông báo cùng với mọi yêu cầu.

Xác thực tên người dùng/mật khẩu ClientLogin

Sử dụng phương thức xác thực ClientLogin nếu ứng dụng của bạn là một người dùng độc lập "đã cài đặt" ứng dụng khách (chẳng hạn như ứng dụng dành cho máy tính). Bạn chỉ cần gọi phương thức setUserCredentials trên đối tượng GoogleService và tất cả các lượt tương tác tiếp theo với Blogger sẽ được xác thực:

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

Trong đoạn mã trên, chúng ta truyền hai tham số vào hàm khởi tạo GoogleService. Tham số đầu tiên là tên của mà chúng tôi muốn tương tác. Tham số thứ hai là tên của đơn đăng ký dưới dạng companyNameapplicationNameversionID.

Để biết thêm thông tin về quy trình xác thực ClientLogin, bao gồm cả các yêu cầu và phản hồi mẫu, hãy xem tài liệu Xác thực cho ứng dụng đã cài đặt.

Lưu ý: Sử dụng cùng một mã thông báo cho tất cả các yêu cầu trong phiên cụ thể; không lấy mã thông báo mới cho mỗi yêu cầu Blogger.

Lưu ý: Như mô tả trong tài liệu về ClientLogin, yêu cầu xác thực có thể không thành công và yêu cầu một thử thách CAPTCHA. Nếu bạn muốn Google đưa ra và xử lý thử thách CAPTCHA, hãy chuyển người dùng đến https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (thay vì URL xử lý CAPTCHA được cung cấp trong tài liệu ClientLogin).

Truy xuất danh sách blog

Blogger Data API cung cấp một nguồn cấp dữ liệu liệt kê các blog cho một user; nguồn cấp dữ liệu đó được gọi là "metafeed".

Mã mẫu sau đây sử dụng GoogleService đã được xác thực để truy xuất nguồn cấp dữ liệu meta rồi in tiêu đề của mỗi blog.

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());
  }
}

Lưu ý URL mà phương thức getFeed sử dụng. Đây là URL nguồn cấp dữ liệu siêu mặc định; URL này trả về danh sách blog cho người dùng hiện đã xác thực. Để truy cập vào nguồn cấp dữ liệu của người dùng khác, bạn có thể đặt mã nhận dạng của người dùng đó thay cho default trong URL nguồn cấp dữ liệu meta. Mã nhận dạng của người dùng là chuỗi chữ số ở cuối URL hồ sơ của người dùng.

Tạo bài đăng

Blogger Data API cho phép bạn tạo và xuất bản các mục mới trên blog, như cũng như tạo bản thảo của các mục nhập.

Lưu ý: Chúng tôi hiện chưa hỗ trợ tính năng đặt tác giả tuỳ chỉnh cho bài đăng. Tất cả các bài đăng mới sẽ xuất hiện như thể chúng được tạo bởi người dùng hiện được xác thực.

Xuất bản bài đăng trên blog

Bạn có thể sử dụng thư viện ứng dụng Java để xuất bản các mục mới trên blog.

Trước tiên, hãy tạo một đối tượng Entry để biểu thị bài đăng trên blog. Sau đó, bạn có thể đặt tiêu đề, nội dung và các thuộc tính khác của bài đăng trên blog. Cuối cùng, hãy sử dụng đối tượng GoogleService để chèn bài đăng. Dưới đây là ví dụ về cách phát hành bài đăng trên blog mới:

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);
}

Phương thức insert lấy URL bài đăng của dịch vụ làm tham số. Sau đó, phương thức này sẽ trả về mục nhập như đã được Blogger lưu trữ. Mục nhập được trả về giống với mục nhập bạn đã gửi, nhưng cũng chứa nhiều phần tử do Blogger thêm vào, chẳng hạn như mã bài đăng.

Nếu yêu cầu của bạn không thành công vì lý do nào đó, Blogger có thể trả lại trạng thái khác . Để biết thông tin về các mã trạng thái, hãy xem bài viết Dữ liệu của Google Tài liệu tham khảo về giao thức API.

Đang tạo một bài đăng nháp trên blog

Bài đăng nháp được tạo giống như bài đăng công khai, nhưng bạn cần đặt thuộc tính draft của đối tượng Entry. Bạn có thể tạo một bài đăng trên blog như bài đăng ở trên dưới dạng bản nháp bằng cách thêm dòng được làm nổi bật:

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);
}

Bạn có thể chuyển một bài đăng nháp hiện có trên blog thành bài đăng đã xuất bản bằng cách truy xuất bài đăng nháp, đặt thuộc tính nháp thành false, sau đó cập nhật bài đăng. Chúng tôi sẽ đề cập đến cách truy xuất và cập nhật bài đăng trong hai phần tiếp theo.

Truy xuất bài đăng

Các phần sau đây mô tả cách truy xuất danh sách bài đăng trên blog, có và không có tham số truy vấn.

Bạn có thể truy vấn nguồn cấp dữ liệu công khai của Blogger mà không cần xác thực. Do đó, bạn không cần gọi phương thức setUserCredentials hoặc xác thực AuthSub trước khi truy xuất bài đăng từ một blog công khai.

Truy xuất tất cả bài đăng trên blog

Để truy xuất bài đăng của người dùng, hãy gọi cùng một phương thức getFeed dùng để truy xuất nguồn cấp dữ liệu siêu dữ liệu của blog, nhưng lần này hãy gửi URL nguồn cấp dữ liệu bài đăng trên blog:

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();
}

Truy xuất bài đăng bằng tham số truy vấn

Blogger Data API cho phép bạn yêu cầu một tập hợp các mục nhập khớp với các mục đã chỉ định tiêu chí cụ thể, chẳng hạn như yêu cầu bài đăng trên blog được xuất bản hoặc cập nhật vào một ngày nhất định dải ô. Để thực hiện việc này, bạn tạo một đối tượng Query rồi truyền đối tượng đó vào phương thức GoogleService.getQuery.

Ví dụ: để gửi một truy vấn theo phạm vi ngày, hãy sử dụng setPublishedMin và phương thức setPublishedMax của đối tượng Query. Chiến lược phát hành đĩa đơn đoạn mã sau in tiêu đề của mỗi bài đăng trên blog được xuất bản giữa thời gian bắt đầu và kết thúc cụ thể:

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();
}

Lưu ý rằng đối tượng Query được tạo bằng cách sử dụng cùng một URL của nguồn cấp dữ liệu bài đăng dùng để truy xuất các bài đăng.

Blogger Data API hỗ trợ các phương thức Query sau:

addCategoryFilter
Chỉ định các danh mục (còn gọi là nhãn) để lọc kết quả nguồn cấp dữ liệu. Ví dụ: http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie trả về các mục có cả nhãn FritzLaurie.
setMaxResults
Đặt số lượng mục nhập tối đa cần trả về.
setPublishedMin, setPublishedMax
Đặt giới hạn đối với ngày xuất bản bài viết.
setStartIndex
Đặt chỉ mục dựa trên 1 của kết quả đầu tiên cần truy xuất (để phân trang).
setUpdatedMin, setUpdatedMax
Đặt giới hạn đối với ngày cập nhật mục nhập. Các tham số truy vấn này sẽ bị bỏ qua trừ phi bạn đặt tham số orderby thành updated.

Lưu ý: Hiện không có phương thức setter nào cho tham số truy vấn orderby. Tuy nhiên, bạn vẫn có thể sử dụng Query.addCustomParameter() nếu bạn cần thiết lập giá trị này.

Để biết thêm thông tin về các tham số truy vấn, hãy xem Hướng dẫn tham khảo API dữ liệu của BloggerHướng dẫn tham khảo API dữ liệu của Google.

Cập nhật bài đăng

Để cập nhật một bài đăng trên blog hiện có, trước tiên, bạn truy xuất mục bạn muốn cập nhật, sau đó sửa đổi mục đó rồi gửi mục đó đến Blogger bằng phương thức update. Đoạn mã sau đây sửa đổi tiêu đề của một mục nhập trên blog, giả sử rằng bạn đã truy xuất mục nhập đó từ máy chủ.

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);
}

Mã ở trên trả về một Entry chứa toàn bộ bài đăng mới cập nhật. Để cập nhật bất kỳ thuộc tính nào khác, bạn chỉ cần đặt các thuộc tính đó trong đối tượng Entry trước khi gọi update.

Lưu ý: Sửa đổi dữ liệu tác giả liên kết với bài đăng hiện không được hỗ trợ.

Xoá bài đăng

Để xoá một bài đăng, hãy chuyển URL chỉnh sửa của bài đăng đó vào phương thức delete trên đối tượng GoogleService, chẳng hạn như:

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

Bình luận

Blogger Data API cho phép tạo, truy xuất và xoá bình luận. Tính năng cập nhật nhận xét không được hỗ trợ (hoặc tính năng này cũng không có trên web giao diện).

Đang tạo nhận xét

Để đăng bình luận, hãy tạo một đối tượng Entry và chèn đối tượng đó như sau:

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);
}

Lưu ý: Hiện tại, bạn chỉ có thể đăng nhận xét lên một blog do người dùng đã xác thực sở hữu.

Lưu ý: Chúng tôi hiện không hỗ trợ tính năng đặt tác giả tuỳ chỉnh cho bình luận. Tất cả nhận xét mới sẽ xuất hiện như thể chúng do người dùng hiện đã xác thực tạo ra.

Truy xuất nhận xét

Bạn có thể truy xuất nhận xét cho một bài đăng cụ thể từ URL nguồn cấp dữ liệu nhận xét của bài đăng đó:

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();
}

Hoặc bạn có thể lấy bình luận từ tất cả bài đăng bằng cách sử dụng URL nguồn cấp dữ liệu bình luận của blog:

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

Đang xoá bình luận

Để xoá một bình luận, hãy truyền URL chỉnh sửa của bình luận đó đến phương thức delete trên đối tượng GoogleService như sau:

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

Trở lại đầu trang