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

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 không bị gián đoạn, hãy cập nhật các ứng dụng chạy Google Data API phiên bản 2.0 lên phiên bản API mới nhất. Để dùng 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 trên trang thông tin) sẽ tiếp tục được hỗ trợ dưới dạng URL nguồn cấp dữ liệu, nhưng vẫn có những điểm khác biệt nhỏ trong cách hoạt động của những yêu cầu này. Để biết thông tin chi tiết, hãy tham khảo tài liệu trên trang Trợ giúp Blogger.

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

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

Ngoài việc cung cấp một số thông tin cơ bản về các chức năng của Blogger Data API, tài liệu này còn cung cấp các ví dụ về các hoạt động tương tác cơ bản với Data API bằng thư viện ứng dụng.NET. 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 của nhà phát triển này.

Nội dung

Đối tượng người xem

Tài liệu này dành cho các lập trình viên muốn viết các ứng dụng .NET 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 của giao thức API Dữ liệu của Google.

Để tham khảo 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 cho thư viện ứng dụng.NET. Để biết thông tin tham khảo chung về Blogger Data API, hãy xem Hướng dẫn tham chiếu giao thức.

Bắt đầu

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

Để sử dụng thư viện ứng dụng .NET, bạn cần có môi trường thời gian chạy .NET 1.1 và bạn cũng nên cập nhật tất cả các bản vá. Sau khi tải thư viện ứng dụng xuống, bạn sẽ thấy các DLL cần thiết để bắt đầu trong thư mục con lib/Release của bản phân phối.

Tạo tài khoản Blogger

Bạn nên đăng ký 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 đã có Tài khoản Google thì mọi thứ đã xong.

Chạy mã mẫu

Một ứng dụng mẫu đang hoạt động đầy đủ có chứa tất cả mã mẫu được trình bày trong tài liệu này và có trong dự án thư viện ứng dụng .NET. Mẫu này được đặt tại địa chỉ /trunk/clients/cs/samples/blogger/ConsoleSample.cs trong thẻ Source (Nguồn) của kho lưu trữ SVN.

Trước khi biên dịch và chạy mẫu này, hãy cập nhật các giá trị của username, password, blogNamepostId bằng các giá trị thích hợp. Các giá trị usernamepassword thể hiện thông tin xác thực dùng để đăng nhập vào Blogger. Giá trị blogName là phần đầu của URL blog của blog.

Ứng dụng mẫu thực hiện một số thao tác trên blog được cung cấp để minh hoạ việc 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 cần có các câu lệnh using sau:

using Google.GData.Client;
using System.Net;
using System.Xml;
using System.Text.RegularExpressions;

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

Bạn có thể truy cập vào cả nguồn cấp dữ liệu công khai và riêng tư bằng Blogger Data API. Các nguồn cấp dữ liệu công khai không yêu cầu xác thực nhưng chúng ở chế độ chỉ đọc. Nếu bạn muốn sửa đổi blog, ứng dụng khách 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ư. Có thể xác thực bằng một trong hai phương pháp: xác thực proxy AuthSub hoặc xác thực tên người dùng/mật khẩu ClientLogin.

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

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. Toán tử trang web và mã ứng dụng khách không có quyền truy cập vào tên người dùng và mật khẩu đối với người dùng Blogger; thay vào đó, ứng dụng lấy mã thông báo AuthSub đặc biệt cho phép ứng dụng khách hành động thay mặt 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 về AuthSub.

Khi người dùng truy cập vào ứng dụng của bạn lần đầu tiên, ứng dụng đó 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à một đường liên kết đưa người dùng đến một trang của Google để xác thực yêu cầu của bạn về việc cấp quyền truy cập vào blog của họ.

Giả sử siêu liên kết ASP sau được xác định trong trang của bạn:

<asp:HyperLink ID="GotoAuthSubLink" runat="server"/>

Sau đó, để tạo URL AuthSubRequest cho ứng dụng, hãy thực hiện lệnh gọi thư viện ứng dụng .NET như sau:

GotoAuthSubLink.Text = "Login to your Google Account";
GotoAuthSubLink.NavigateUrl =
  AuthSubUtil.getRequestUrl("http://www.example.com/RetrieveToken",
  "http://www.blogger.com/feeds/",
  false,
  true);

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

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.
xác định phạm vi của thứ nguyên.
Cho biết ứng dụng đang yêu cầu một mã thông báo để truy cập vào nguồn cấp dữ liệu của Blogger. Chuỗi phạm vi cần sử dụng là http://www.blogger.com/feeds/ (tất nhiên là được mã hoá URL).
bảo mật
Cho biết ứng dụng có yêu cầu mã thông báo bảo mật hay không.
phiên hoạt động
Cho biết liệu mã thông báo được trả về có thể đổi lấy mã thông báo nhiều mục đích sử dụng (phiên hoạt động) 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 nhận đượ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%2FRetrieveToken

Người dùng truy cập đường liên kết đến trang web của Google và xác thực với 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 URL AuthSubRequest. Hệ thống AuthSub sẽ thêm mã xác thực vào URL đó dưới dạng giá trị của tham số truy vấn token. Do đó, bạn có thể truy cập mã thông báo dưới dạng biến trong đối tượng Request.QueryString của trang ASP. Người dùng được chuyển hướng đến một URL có dạng như sau:

http://www.example.com/RetrieveToken?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 bạn có thể đổi mã thông báo này lấy mã phiên AuthSub như sau:

SessionsessionToken = AuthSubUtil.exchangeForSessionToken(Request.QueryStringtoken, null);

Tức là bạn chuyển mã thông báo dùng một lần sang phương thức 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à giao diện AuthSub sẽ trả về mã thông báo phiên. Để biết thêm thông tin về các ứng dụng đã đăng ký và khoá riêng tư, hãy xem phần "Yêu cầu ký" trong tài liệu về AuthSub.

Sau đó, ứng dụng của bạn có thể sử dụng giá trị mã thông báo phiên trong các hoạt động tương tác tiếp theo với Blogger. Để yêu cầu thư viện ứng dụng .NET tự động gửi tiêu đề Uỷ quyền (chứa mã thông báo phiên) cho từng yêu cầu, hãy làm như sau:

GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("blogger", "BloggerSampleApp");
authFactory.Token = SessionsessionToken.ToString();
Service service = new Service(authFactory.ApplicationName);
service.RequestFactory = authFactory;

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 là ứng dụng "được cài đặt" độc lập, chỉ một người dùng (chẳng hạn như ứng dụng dành cho máy tính). Hãy đặt thông tin xác thực của đối tượng dịch vụ như sau:

Service service = new Service("blogger", "exampleCo-exampleApp-1");
service.Credentials = new GDataCredentials("user@example.com", "secretPassword");
GDataGAuthRequestFactory factory = (GDataGAuthRequestFactory) service.RequestFactory;
factory.AccountType = "GOOGLE";

Trong đoạn mã trên, chúng ta truyền 2 tham số đến hàm khởi tạo Service. Thông số đầu tiên là tên của dịch vụ mà chúng ta muốn tương tác. Tham số thứ hai là tên ứng dụng ở dạng companyName-applicationName-versionID. Chúng tôi cũng đặt Service.RequestFactory để chỉ sử dụng loại tài khoản GOOGLE để cho phép xác thực đúng cách cho người dùng G Suite.

Để biết thêm thông tin về việc 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 về Xác thực cho các ứng dụng đã cài đặt.

Lưu ý: Hãy sử dụng cùng một mã thông báo cho tất cả các yêu cầu trong một phiên nhất định; đừng lấy mã thông báo mới cho mỗi yêu cầu trên Blogger.

Lưu ý: Như đã mô tả trong tài liệu ClientĐăng nhập, yêu cầu xác thực có thể không thành công và yêu cầu thử thách xác thực hình ảnh (CAPTCHA). Nếu bạn muốn Google đưa ra và xử lý thử thách xác thực hình ảnh (CAPTCHA), hãy chuyển người dùng đến https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (thay vì đến 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 của một người dùng cụ thể; nguồn cấp dữ liệu đó được gọi là "metafeed".

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

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

Hãy lưu ý URL mà phương thức getFeed sử dụng. Đây là URL metafeed 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 nguồn cấp dữ liệu cho một 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. Mã nhận dạng 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 bài viết mới trên blog, cũng như tạo bản nháp cho các bài viết.

Tất cả mẫu sau đây đều giả định rằng bạn có một đối tượng Service đã xác thực.

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

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

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

Trước tiên, hãy tạo một đối tượng AtomEntry đại diện cho 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 dùng đối tượng Service để chèn bài đăng. Dưới đây là ví dụ về cách xuất bản một bài đăng mới trên blog:

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

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 được trả về giống với mục bạn đã gửi, nhưng cũng chứa nhiều thành phần 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ì một lý do nào đó, Blogger có thể trả về một mã trạng thái khác. Để biết thông tin về mã trạng thái, hãy xem tài liệu tham khảo về giao thức API Dữ liệu của Google.

Tạo bài đăng nháp trên blog

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

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

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 rồi cập nhật bài đăng đó. Chúng ta sẽ tìm hiểu về hoạt động 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 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 đặt thông tin xác thực hoặc xác thực AuthSub trước khi truy xuất bài đăng 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 metafeed 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:

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

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 tiêu chí đã chỉ định, chẳng hạn như yêu cầu xuất bản hoặc cập nhật các bài đăng trên blog trong một phạm vi ngày nhất định. Để thực hiện việc này, bạn tạo một đối tượng FeedQuery và truyền đối tượng đó đến phương thức Service.Query().

Ví dụ: để gửi một truy vấn phạm vi ngày, hãy đặt các thành phần MinPublicationMaxPublication của đối tượng FeedQuery. Đoạn mã sau đây in tiêu đề của từng bài đăng trên blog được xuất bản trong khoảng thời gian từ thời điểm bắt đầu đến thời điểm kết thúc cụ thể:

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

Xin lưu ý rằng đối tượng FeedQuery được tạo bằng cùng một URL nguồn cấp dữ liệu bài đăng dùng để truy xuất bài đăng.

Blogger Data API hỗ trợ các tham số truy vấn sau:

alt
Loại nguồn cấp dữ liệu cần trả về, chẳng hạn như atom (mặc định) hoặc rss.
/category
Chỉ định các danh mục (còn gọi là nhãn) để lọc kết quả của 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.
max-results
Số lượng mục nhập tối đa cần trả về.
sắp xếp theo thứ tự
Thứ tự trả về các mục nhập, chẳng hạn như lastmodified (mặc định), starttime hoặc updated.
Tối đa xuất bản, tối đa xuất bản
Giới hạn về ngày phát hành mục nhập.
start-index
Chỉ mục dựa trên 1 của kết quả đầu tiên được truy xuất (dùng để phân trang).
tối thiểu cập nhật, tối đa cập nhật
Giới hạn về 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 tham số orderby được đặt thành updated.

Để 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 về API Dữ liệu của Google.

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

Để cập nhật một bài đăng hiện có trên blog, trước tiên, bạn truy xuất mục nhập mà bạn muốn cập nhật, sau đó sửa đổi rồi gửi mục nhập đó đến Blogger bằng phương thức Update() của mục nhập. Đ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ủ.

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

Mã ở trên trả về một AtomEntry 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 AtomEntry trước khi gọi Update().

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

Xoá bài đăng

Để xoá một bài đăng, hãy gọi phương thức Delete trên đối tượng AtomEntry hiện có như sau:

static void DeleteEntry(AtomEntry toDelete)
{
  // Delete the edited entry
  if (toDelete != null)
  {
    toDelete.Delete();
  }
}

Bình luận

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

Tạo nhận xét

Để đăng một nhận xét, hãy tạo một đối tượng AtomEntry rồi chèn đối tượng đó như sau:

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

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

Lưu ý: Hiện tại, chúng tôi chưa hỗ trợ việc đặ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.

Truy xuất nhận xét

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

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

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

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

Đang xoá nhận xét

Để xoá một nhận xét, hãy gọi phương thức Delete() trên đối tượng AtomEntry nhận xét hiện có như sau:

static void DeleteComment(AtomEntry commentEntry)
{
  if (commentEntry != null)
  {
    // Delete the comment.
    commentEntry.Delete();
  }
}

Trở lại đầu trang