Lưu ý quan trọng: Chúng tôi sẽ ngừng hỗ trợ Google Data API phiên bản 2.0 từ ngày 30 tháng 9 năm 2024. Để đảm bảo ứng dụng của bạn vẫn hoạt động bình thường, hãy cập nhật những ứng dụng có dùng API Google Data phiên bản 2.0 lên phiên bản API mới nhất. Đối với 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 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 hành vi của các yêu cầu này có một số điểm khác biệt nhỏ. Để biết thông tin chi tiết, hãy tham khảo tài liệu Trợ giúp của 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 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ể sử dụng API Dữ liệu Blogger để 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 khớp với 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 API Dữ liệu Blogger, 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 API Dữ liệu bằng cách sử dụ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 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 ứ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 đằ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.NET. Để 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.
Để 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à cũng phải 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ý một tài khoản Blogger để 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ì bạn đã sẵn sàng.
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 dự án thư viện ứng dụng .NET. Mẫu này nằm tại /trunk/clients/cs/samples/blogger/ConsoleSample.cs trong thẻ 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
, blogName
và postId
bằng các giá trị thích hợp. Giá trị username
và password
đại diện cho 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 blogspot 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ạ cách sử dụng API Dữ liệu Blogger.
Để biên dịch các ví dụ trong tài liệu này vào mã của riêng bạn, 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. 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 chỉnh sửa blog, thì ứng dụ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ư. API này 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 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.
Xác thực proxy AuthSub
Phương thức xác thực proxy AuthSub được các ứng dụng web sử dụng khi cần xác thực người dùng với Tài khoản Google. Nhà điều hành trang web và mã ứng dụ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 sẽ nhận được mã thông báo AuthSub đặc biệt cho phép ứng dụ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 về 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ọ.
Giả sử siêu liên kết ASP sau đây đượ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
sẽ 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 sẽ 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/
(tất 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 mã thông báo được trả về có thể được đổi lấy mã thông báo nhiều lần sử dụng (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 secure
là false
). 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%2FRetrieveToken
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 URL AuthSubRequest. Hệ thống AuthSub sẽ thêm mã thông báo 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 một 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ột 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 như sau:
SessionsessionToken = AuthSubUtil.exchangeForSessionToken(Request.QueryStringtoken, null);
Tức là bạn truyền mã thông báo dùng một lần vào 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 và khoá riêng tư đã đăng ký, 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 lượt 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) với mỗi 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 ứng dụng của bạn là một ứng dụng "đã cài đặt", độc lập, dành cho một người dùng (chẳng hạn như ứng dụng máy tính). Thiết lập 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 hai tham số vào hàm khởi tạo Service
. Tham 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 của chúng ta ở dạng companyName-applicationName-versionID. Chúng ta cũng đặt Service.RequestFactory
để chỉ sử dụng loại tài khoản GOOGLE
nhằm 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ề 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 một phiên nhất định; 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
API Dữ liệu Blogger 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, sau đó 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); } }
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 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 siêu dữ liệu. 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, cũng như tạo bản nháp của các mục.
Tất cả các mẫu sau đây giả định rằng bạn có một đối tượng Service
đã được xác thực.
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ả bài đăng mới sẽ xuất hiện 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 trên blog.
Trước tiên, hãy tạo một đối tượng AtomEntry
để 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 Service
để chèn bài đăng. Sau đây là ví dụ về cách xuất bản một bài đăng trên blog mới:
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 mà 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ả 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 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 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 làm nổi bật:
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, sau đó cập nhật bài đăng. Chúng ta sẽ tìm hiểu 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 đặ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ừ 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:
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
API Dữ liệu Blogger cho phép bạn yêu cầu một tập hợp các mục phù hợp với tiêu chí đã chỉ định, 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 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
rồi truyền đối tượng đó vào phương thức Service.Query()
.
Ví dụ: để gửi truy vấn theo phạm vi ngày, hãy đặt các thành phần MinPublication
và MaxPublication
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 bắt đầu và kết thúc đã cho:
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); }
Lưu ý rằng đối tượng FeedQuery
được tạo bằng chính 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ặcrss
. - /category
- Chỉ định 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ãnFritz
vàLaurie
. - max-results
- Số mục nhập tối đa cần trả về.
- orderby
- Thứ tự trả về các mục nhập, chẳng hạn như
lastmodified
(mặc định),starttime
hoặcupdated
. - published-min, published-max
- Giới hạn về ngày xuất bản mục nhập.
- start-index
- Chỉ mục dựa trên 1 của kết quả đầu tiên cần truy xuất (để phân trang).
- updated-min, updated-max
- 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ừ khi tham số
orderby
được đặt thànhupdated
.
Để 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 Blogger và Hướ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()
của mục. Đ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 ý: Hiện tại, chúng tôi không hỗ trợ việc sửa đổi dữ liệu tác giả liên kết với bài đăng.
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á bình luận. Tính năng cập nhật bình luận không được hỗ trợ (cũng không có trong giao diện web).
Tạo nhận xét
Để đăng bình luận, hãy tạo một đối tượng AtomEntry
và 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 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 đã được xác thực tạo ra.
Truy xuất bình luận
Bạn có thể truy xuất các bình luận cho một bài đăng cụ thể từ URL của 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); } } }
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
Xoá bình luận
Để xoá một bình luận, hãy gọi phương thức Delete()
trên đối tượng AtomEntry
bình luận hiện có như sau:
static void DeleteComment(AtomEntry commentEntry) { if (commentEntry != null) { // Delete the comment. commentEntry.Delete(); } }