重要事項:這是本頁面的舊版。如要使用最新版本,請使用左側的 navbar 中的連結。
Blogger Data API 可讓用戶端應用程式以 Google Data API 動態消息的形式查看及更新 Blogger 內容。
您的用戶端應用程式可以使用 Blogger Data API 建立新的網誌文章、編輯或刪除現有的網誌文章,以及查詢符合特定條件的網誌文章。
除了提供 Blogger Data API 功能的相關背景資訊,本文件還提供使用 .NET 用戶端程式庫進行基本 Data API 互動的範例。如果您想進一步瞭解程式庫使用的基礎通訊協定,請參閱本開發人員指南的「通訊協定」一節。
目錄
目標對象
本文件適用對象為想要編寫可與 Blogger 互動的 .NET 用戶端應用程式的程式設計師。
本文件假設您瞭解 Google Data API 通訊協定背後的一般概念。
如需有關用戶端程式庫提供的類別和方法的參考資訊,請參閱 .NET 用戶端程式庫 API 參考資料。如需一般 Blogger Data API 參考資訊,請參閱Protocol 參考指南。
開始使用
如需用戶端程式庫設定的相關說明,請參閱入門指南。
如要使用 .NET 用戶端程式庫,您需要 .NET 1.1 執行階段,且應使用所有最新修補程式。下載用戶端程式庫後,您會在發行套件的 lib/Release
子目錄中找到所需的 DLL。
建立 Blogger 帳戶
建議您註冊 Blogger 帳戶進行測試。Blogger 使用 Google 帳戶,因此只要您已有 Google 帳戶,即可開始使用。
執行程式碼範例
.NET 用戶端程式庫專案中提供完整的運作中用戶端範例,其中包含本文件中顯示的所有程式碼範例。範例位於 SVN 存放區的「Source」分頁中的 /trunk/clients/cs/samples/blogger/ConsoleSample.cs。
在編譯及執行這個範例之前,請將 username
、password
、blogName
和 postId
的值更新為適當的值。username
和 password
值代表用於登入 Blogger 的憑證。blogName
值是網誌的 blogspot 網址開頭。
範例用戶端會對提供的網誌執行多項作業,以示範如何使用 Blogger Data API。
如要將本文中的範例編譯為自己的程式碼,您需要使用以下 using
陳述式:
using Google.GData.Client; using System.Net; using System.Xml; using System.Text.RegularExpressions;
向 Blogger 服務進行驗證
您可以使用 Blogger Data API 存取公開和私人動態消息。公開動態饋給不需要任何驗證,但為唯讀。如果您想修改網誌,則您的用戶端必須先驗證,才能要求私人動態饋給。可使用以下任一方法進行驗證:AuthSub 代理驗證或 ClientLogin 使用者名稱/密碼驗證。
如要進一步瞭解一般使用 Google Data API 的驗證方式,請參閱驗證說明文件。
AuthSub Proxy 驗證
需要對使用者進行 Google 帳戶驗證的網頁應用程式,會使用 AuthSub 代理驗證。網站操作員和用戶端程式碼無法存取 Blogger 使用者的使用者名稱和密碼;而是取得特殊的 AuthSub 權杖,讓用戶端可以代表特定使用者採取行動。如需詳細資訊,請參閱 AuthSub 說明文件。
使用者首次造訪應用程式時,尚未完成驗證程序。在這種情況下,您需要顯示一些資訊和連結,引導使用者前往 Google 頁面,驗證您要求存取其網誌的權限。
假設您的網頁中定義了下列 ASP 超連結:
<asp:HyperLink ID="GotoAuthSubLink" runat="server"/>
接著,如要為應用程式建構 AuthSubRequest 網址,請呼叫 .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 應在驗證程序後將使用者重新導向至的網頁網址。
- 範圍
- 表示應用程式要求存取 Blogger 動態消息的權杖。要使用的範圍字串為
http://www.blogger.com/feeds/
(當然已編碼為網址)。 - 安全
- 指出用戶端是否要求安全權杖。
- 工作階段
- 指出是否可以將傳回的權杖換成多用途 (工作階段) 權杖。
上述範例顯示的呼叫不會要求安全權杖 (secure
的值為 false
)。產生的要求網址可能如下所示:
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 網址的 next
查詢參數中指定的網址。AuthSub 系統會將驗證權杖附加到該網址,做為 token
查詢參數的值。因此,您可以透過 ASP 頁面的 Request.QueryString
物件,以變數存取權杖。系統會將使用者重新導向至類似以下的網址:
http://www.example.com/RetrieveToken?token=yourAuthToken
這個權杖值代表單次使用的 AuthSub 權杖。在這個範例中,由於已指定 session = true
,因此這個權杖可以換成 AuthSub 工作階段權杖,如下所示:
SessionsessionToken = AuthSubUtil.exchangeForSessionToken(Request.QueryStringtoken, null);
也就是說,您將一次性使用權杖和 null
(註冊模式) 或私密金鑰 (未註冊模式) 一併傳送至 exchangeForSessionToken
方法,而 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。我們也將 Service.RequestFactory
設為只使用 GOOGLE
帳戶類型,以便為 G Suite 使用者提供適當的驗證。
如要進一步瞭解 ClientLogin 驗證,包括要求和回應範例,請參閱「已安裝應用程式的驗證」說明文件。
注意:請在特定工作階段中,針對所有要求使用相同的符記;不要為每項 Blogger 要求取得新的符記。
注意:如 ClientLogin 說明文件所述,驗證要求可能會失敗,並要求人機驗證 (CAPTCHA) 挑戰。如果您希望 Google 發出並處理人機驗證挑戰,請將使用者導向 https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
(而非 ClientLogin 說明文件中提供的人機驗證處理網址)。
擷取網誌清單
Blogger Data API 提供的動態饋給會列出特定使用者的網誌,這類動態饋給稱為「metafeed」。
以下程式碼範例會使用已驗證的 Service
物件擷取 metafeed,然後列印每個網誌的標題。
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
方法使用的網址。這是預設的 metafeed 網址,會傳回目前已驗證使用者的部落格清單。如要存取其他使用者的動態饋給,您可以在動態饋給網址中將使用者 ID 代入 default
。使用者 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
方法會使用服務的發布網址做為參數。然後,方法會傳回 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
方法,但這次請傳送網誌貼文動態的網址:
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 Data 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
物件是使用用於擷取貼文的相同貼文動態饋給網址建構。
Blogger Data API 支援下列查詢參數:
- alt
- 要傳回的動態饋給類型,例如
atom
(預設) 或rss
。 - /category
- 指定類別 (也稱為標籤) 來篩選動態饋給結果。舉例來說,
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
會傳回標籤為Fritz
和Laurie
的項目。 - max-results
- 要傳回的項目數量上限。
- orderby
- 傳回項目的順序,例如
lastmodified
(預設)、starttime
或updated
。 - published-min、published-max
- 項目發布日期的邊界。
- 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
,其中包含整個新更新的貼文。如要更新任何其他屬性,只要在呼叫 Update()
之前,在 AtomEntry
物件中設定這些屬性即可。
注意:目前不支援修改與貼文相關聯的作者資料。
刪除貼文
如要刪除貼文,請對現有的 AtomEntry
物件呼叫 Delete
方法,如下所示:
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);
注意:目前您只能在已驗證使用者擁有的網誌上張貼留言。
注意:目前不支援為留言設定自訂作者。所有新留言都會顯示為由目前已驗證的使用者建立。
擷取留言
你可以透過貼文的留言動態消息網址,擷取特定貼文的留言:
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); } } }
或者,您也可以使用網誌的留言動態消息網址,取得所有貼文的留言:
http://www.blogger.com/feeds/blogID /comments/default
刪除留言
如要刪除註解,請對現有的註解 AtomEntry
物件呼叫 Delete()
方法,如下所示:
static void DeleteComment(AtomEntry commentEntry) { if (commentEntry != null) { // Delete the comment. commentEntry.Delete(); } }