開發人員指南:.NET

重要事項: 我們將於 2024 年 9 月 30 日停止支援 2.0 版 Google Data API。 為了確保應用程式持續運作,請更新使用 2.0 版 Google 將 Data API 升級至最新版 API。 如要使用最新版本,請使用左側的 navbar 中的連結。注意:雖然部分 GET 要求 (例如,列出貼文) 仍會繼續支援資訊提供 網址,它們的行為之間會有些微差異。 如需詳細資訊,請參閱 Blogger 說明說明文件。

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 參考資訊,請參閱通訊協定參考指南

開始使用

如需用戶端程式庫設定的相關說明,請參閱入門指南

如要使用 .NET 用戶端程式庫,您需要 .NET 1.1 執行階段,且應使用所有最新修補程式。下載 用戶端程式庫,您可以在 lib/Release 的子目錄。

建立 Blogger 帳戶

建議申請 Blogger 帳戶:進行測試。Blogger 會使用 Google 帳戶,因此如果您使用 已經有 Google 帳戶,這樣就大功告成了。

執行程式碼範例

.NET 用戶端程式庫專案中提供完整的運作中用戶端範例,其中包含本文件中顯示的所有程式碼範例。範例位於 SVN 存放區的「Source」分頁中的 /trunk/clients/cs/samples/blogger/ConsoleSample.cs

編譯及執行這個範例之前,請先更新 usernamepasswordblogNamepostId 替換為適當的值。usernamepassword 值代表用於登入的憑證 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 代理程式驗證

需要驗證使用者 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 介面會傳回工作階段權杖。進一步瞭解註冊 應用程式與私密金鑰,請參閱「簽署要求」 一節。

接著,您的應用程式便可在後續 與 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 發出及處理人機驗證 (Captcha) 驗證問題,請 將使用者導向 https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (而非 ClientLogin 中提供的人機驗證 (CAPTCHA) 處理網址 說明文件)。

擷取網誌清單

Blogger Data API 提供的動態饋給會列出特定使用者的網誌,這類動態饋給稱為「metafeed」。

以下程式碼範例使用驗證過的 Service 物件 來擷取中繼資訊提供,然後列印每個網誌的標題。

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 儲存的項目。項目 您傳送的內容與原本相同,但也包含加入的各種元素 例如文章 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() 方法。

舉例來說,如要傳送日期範圍查詢,請設定 MinPublication FeedQuery 物件的 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 會傳回標籤為 FritzLaurie 的項目。
max-results
要傳回的項目數量上限。
訂單比
傳回項目的順序,例如 lastmodified (預設)、starttimeupdated
Publishing-min、publish-max
項目出版日期的邊界,
start-index
要擷取的第一個結果的索引 (以 1 為起點) (用於分頁)。
update-min、update-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,其中包含整個新更新的貼文。如要更新任何其他屬性,只要在 AtomEntry 物件後再呼叫 Update()

注意:修改與 目前不支援 POST。

刪除訊息

如要刪除貼文,請對現有貼文呼叫 Delete 方法 AtomEntry 物件,如下所示:

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

刪除留言

如要刪除註解,請對現有註解呼叫 Delete() 方法 對 AtomEntry 物件加上註解,如下所示:

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

返回頁首