Blogger Data API 可讓用戶端應用程式查看及更新 Blogger Google Data API 資訊提供形式的內容。
您的用戶端應用程式可以使用 Blogger Data API 建立新的網誌文章、編輯或刪除現有的網誌文章,以及查詢符合特定條件的網誌文章。
除了提供 Blogger 功能的一些背景知識 Google Data API,本文件提供使用 Python 用戶端 程式庫。如要進一步瞭解 請參閱程式庫使用的通訊協定一節 本指南。
目錄
目標對象
本文件的適用對象為想編寫 Python 用戶端的程式設計師 能夠與 Blogger 互動的應用程式。
本文件假設您瞭解 Google Data API 通訊協定背後的一般概念。
如需一般 Blogger 資料 API 參考資訊,請參閱Protocol 參考指南。
開始使用
如需用戶端程式庫設定的相關說明,請參閱入門指南。
Python 用戶端程式庫需要 Python 2.2 以上版本。下載之後 用戶端程式庫,您還必須下載並安裝 ElementTree 套件。
建立 Blogger 帳戶
建議您註冊 Blogger 帳戶進行測試。Blogger 會使用 Google 帳戶,因此如果您使用 已經有 Google 帳戶,這樣就大功告成了。
執行程式碼範例
完整運作的範例用戶端,內含所有程式碼範例
文件,可在 BloggerExample.py
中找到
檔案,位於目錄下
gdata-python-client/samples/blogger/
。
範例用戶端會對提供的網誌執行多項作業,以示範如何使用 Blogger Data API。
您可以使用下列引數執行範例:
python BloggerExample.py --email [email_address] --password [password]
如要在自己的程式碼中使用本文件中的範例,您需要下列 import
陳述式:
from gdata import service import gdata import atom
向 Blogger 服務進行驗證
您可以使用 Blogger Data API 存取公開和私人動態消息。 公開動態饋給不需要任何驗證,但為唯讀。如果您想修改網誌,則您的用戶端必須先驗證,才能要求私人動態饋給。可使用以下三種方法進行驗證:OAuth 驗證、AuthSub Proxy 驗證或 ClientLogin 使用者名稱/密碼 驗證。
如要進一步瞭解一般使用 Google Data API 的驗證方式,請參閱驗證說明文件。
本文後續章節中的大部分範例都假設您已具備已驗證的 GDataService
例項。
OAuth 驗證
如需使用 Python GData 程式庫進行 OAuth 驗證的說明文件,請參閱「Google Data Protocol 用戶端程式庫中的 OAuth」。
AuthSub Proxy 驗證
需要驗證使用者 Google 帳戶的網頁應用程式,會使用 AuthSub 代理驗證。網站營運商和用戶端 程式碼無法存取 Blogger 使用者的使用者名稱和密碼; 相反地,用戶端會取得特殊 AuthSub 權杖,讓用戶端能 代表特定使用者如需詳細資訊,請參閱 AuthSub 說明文件。
使用者初次造訪您的應用程式時,從未 並通過完整驗證在這種情況下,您需要顯示一些資訊和連結,引導使用者前往 Google 頁面,驗證您要求存取其網誌的權限。Python 用戶端程式庫提供函式,可產生 Google 網頁的網址。下方程式碼會擷取 AuthSubRequest 頁面的網址:
def GetAuthSubUrl(): next = 'http://www.example.com/welcome.pyc' scope = 'http://www.blogger.com/feeds/' secure = False session = True blogger_service = service.GDataService() return blogger_service.GenerateAuthSubURL(next, scope, secure, session); authSubUrl = GetAuthSubUrl(); print '<a href="%s">Login to your Google account</a>' % authSubUrl
GenerateAuthSubURL
方法會採用下列參數 (對應至 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%2Fwelcome.pyc
使用者點選連結前往 Google 網站,並驗證自己的 Google 帳戶。
使用者通過驗證後,AuthSub 系統會將使用者重新導向至網址
您在 AuthSubRequest 的 next
查詢參數中指定
網址。AuthSub 系統會將驗證權杖附加到該網址,做為 token
查詢參數的值。例如:
http://www.example.com/welcome.pyc?token=yourAuthToken
您可以透過多種方式從網址擷取符記值,例如:
import cgi parameters = cgi.FieldStorage() authsub_token = parameters['token']
這個權杖值代表單次使用的 AuthSub 權杖。在這個範例中,由於已指定 session = True
,因此可以使用 UpgradeToSessionToken
方法交換此權杖,以便呼叫 AuthSubSessionToken
服務,並換取 AuthSub 工作階段權杖:
blogger_service = service.GDataService() blogger_service.auth_token = authsub_token blogger_service.UpgradeToSessionToken()
也就是說,將一次性權杖傳送至
UpgradeToSessionToken
方法,而且 AuthSub 介面會傳回
工作階段符記
接著,您的應用程式便可在後續 與 Blogger 的互動用戶端程式庫會自動傳送權杖,並附帶要求。
ClientLogin 使用者名稱/密碼驗證
如果您的用戶端是獨立的單一使用者,請使用 ClientLogin 驗證
「已安裝」用戶端的用戶端 (例如電腦版應用程式)。只要在 GDataService
例項上呼叫 ProgrammaticLogin()
方法,後續與 Blogger 的所有互動都會經過驗證:
blogger_service = service.GDataService('user@example.com', 'secretPassword') blogger_service.source = 'exampleCo-exampleApp-1.0' blogger_service.service = 'blogger' blogger_service.account_type = 'GOOGLE' blogger_service.server = 'www.blogger.com' blogger_service.ProgrammaticLogin()
在上方程式碼片段中,我們在 GDataService
例項上設定了三個屬性。第一個是應用程式名稱,格式為 companyName-applicationName-versionID。第二個是我們要互動的服務名稱;第三個是伺服器的地址。
請注意,account_type
已明確設為 GOOGLE
。如未設定這個參數,G Suite 使用者就無法成功使用
Blogger API
如要進一步瞭解 ClientLogin 驗證 (包括要求和回應範例),請參閱「已安裝應用程式的驗證」說明文件。
注意: 提供的工作階段;則不需要為每個 Blogger 要求取得新權杖
注意:如 ClientLogin 所述
說明文件,驗證要求可能會失敗,並要求進行人機驗證 (CAPTCHA)
挑戰。如要讓 Google 發出及處理人機驗證 (Captcha) 驗證問題,請
將使用者導向
https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
(而非 ClientLogin 中提供的人機驗證 (CAPTCHA) 處理網址
說明文件)。
擷取網誌清單
Blogger Data API 提供的動態饋給會列出特定使用者的網誌,這類動態饋給稱為「metafeed」。
以下程式碼範例會使用已驗證的 GDataService
例項來擷取 metafeed,然後列印每個網誌的標題。
def PrintUserBlogTitles(blogger_service): query = service.Query() query.feed = '/feeds/default/blogs' feed = blogger_service.Get(query.ToUri()) print feed.title.text for entry in feed.entry: print "\t" + entry.title.text
請記下 Get
方法使用的網址。這是預設的 metafeed 網址,會傳回目前已驗證使用者的部落格清單。如要存取其他使用者的動態消息,可以將該使用者的 ID 取代
default
。使用者 ID 是指使用者個人資料網址結尾的數字字串。
以下程式碼片段示範如何從動態饋給中擷取網誌 ID。您必須提供網誌 ID,才能建立、更新及刪除網誌 作業和留言的作業。以下程式碼片段會為使用者選擇要擷取的第一篇網誌。
blog_id = feed.entry[0].GetSelfLink().href.split("/")[-1]
在 BloggerExample.py
範例中,BloggerExample
類別,並將網誌 ID 設定在建構函式中,方便存取
我們稍後將在課程
深入介紹這些原則及擬定過程在本文後續的大部分範例中,blog_id
會以變數的形式傳入。
建立貼文
Blogger Data API 可讓您建立和發布新網誌項目,例如: 以及建立項目草稿
注意:目前不支援為貼文設定自訂作者。所有新貼文都會顯示為由目前已驗證的使用者建立。
發布網誌文章
您可以使用 Python 用戶端程式庫發布新的部落格文章。
首先,建立代表網誌文章的 GDataEntry
例項。
接著,您可以設定網誌文章的標題、內容和其他屬性。最後,請使用 GDataService
例項插入文章。以下是發布新部落格文章的範例:
def CreatePublicPost(blogger_service, blog_id, title, content): entry = gdata.GDataEntry() entry.title = atom.Title('xhtml', title) entry.content = atom.Content(content_type='html', text=content) return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id) blogEntry = CreatePublicPost(blogger_service, blog_id, title='I have the answer', content='Eureka! It is 42!')
建立網誌文章草稿
草稿貼文的建立方式與公開貼文相同,但您需要在 GDataEntry
例項中設定 draft
擴充功能元素。將上方的網誌文章加入
醒目顯示的行:
def CreateDraftPost(blogger_service, blog_id, title, content): entry = gdata.GDataEntry() entry.title = atom.Title('xhtml', title) entry.content = atom.Content(content_type='html', text=content) control = atom.Control() control.draft = atom.Draft(text='yes') entry.control = control return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id) draftEntry = CreateDraftPost(blogger_service, blog_id, title='I have the question', content='What do you get if you multiply six by nine?')
如要將現有的網誌文章草稿轉換成已發布的文章,您可以擷取
將草稿屬性設為「no
」,然後
更新貼文。我們將在接下來兩個部分介紹如何擷取及更新貼文。
正在擷取訊息
下列各節將說明如何擷取網誌文章清單,並使用 以及不含查詢參數
您不必驗證即可查詢 Blogger 公開動態消息。因此,您無須先設定憑證或執行 AuthSub 驗證,即可從公開網誌擷取文章。
正在擷取所有網誌文章
如要擷取使用者貼文,請使用以下程式碼呼叫 GetFeed
方法:
網誌文章動態消息網址:
def PrintAllPosts(blogger_service, blog_id): feed = blogger_service.GetFeed('/feeds/' + blog_id + '/posts/default') print feed.title.text for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.content.text print "\t" + entry.updated.text print
使用查詢參數擷取貼文
Blogger Data API 可讓您要求一組符合指定項目的項目
條件,例如要求在指定日期發布或更新網誌文章
範圍。做法是建立 Query
例項,然後呼叫
Get()
方法。
舉例來說,如要傳送日期範圍查詢,請設定 Query
例項的 published_min
和 published_min
屬性。下列程式碼片段會列印在指定開始時間和結束時間之間發布的每篇網誌文章的標題和內容:
def PrintPostsInDateRange(blogger_service, blog_id, start_time='2007-04-01', end_time='2007-04-25'): query = service.Query() query.feed = '/feeds/' + blog_id + '/posts/default' query.published_min = start_time query.published_max = end_time feed = blogger_service.Get(query.ToUri()) print feed.title.text + " posts between " + start_time + " and " + end_time for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.content.text print "\t" + entry.updated.text print
請注意,Query
物件是使用相同的貼文建構
用於擷取貼文的動態消息網址。
Blogger Data API 支援下列 Query
屬性:
- 類別
- 指定類別 (也稱為標籤) 來篩選動態饋給結果。舉例來說,
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
會傳回標籤為Fritz
和Laurie
的項目。如要在 Python 用戶端程式庫中指定該類別查詢,您可以使用query.categories = ['Fritz','Laurie',]
- max_results
- 要傳回的項目數量上限。
- published_min、published_max
- 項目出版日期的邊界,
- start_index
- 要擷取第一個結果的 1 式索引 (用於分頁)。
- update_min、updated_max
- 項目更新日期的邊界。除非
orderby
參數設為updated
,否則系統會忽略這些查詢參數。
如要進一步瞭解查詢參數,請參閱 Blogger Data API 參考指南和 Google Data API 參考指南。
更新訊息
如要更新現有的網誌文章,請先擷取要更新的項目,然後修改該項目,再使用 Put
方法將其傳送至 Blogger。以下程式碼片段會修改網誌項目的標題,假設您已從伺服器擷取項目。
def UpdatePostTitle(blogger_service, entry_to_update, new_title='The REAL answer'): entry_to_update.title = atom.Title('xhtml', new_title) return blogger_service.Put(entry_to_update, entry_to_update.GetEditLink().href)
上述程式碼會傳回 GDataEntry
,其中包含整個新更新的文章。如要更新任何其他屬性,只要在
請先GDataEntry
執行個體再呼叫 Put
。
注意:目前不支援修改與貼文相關聯的作者資料。
刪除貼文
如要刪除貼文,請將貼文的編輯網址傳遞至 Delete
方法
改為 GDataService
物件,如下所示:
def DeletePost(blogger_service, edit_link_href): blogger_service.Delete(edit_link_href)
留言
Blogger Data API 可用於建立、擷取及刪除留言。系統不支援更新留言 (網頁介面也不支援)。
建立註解
如要發布留言,請建立 GDataEntry
物件,並按照下列方式插入:
def CreateComment(blogger_service, blog_id, post_id, comment_text='Mostly harmless'): feed_uri = '/feeds/' + blog_id + '/' + post_id + '/comments/default' entry = gdata.GDataEntry() entry.content = atom.Content(content_type='xhtml', text=comment_text) return blogger_service.Post(entry, feed_uri)
注意:目前您只能在 已驗證使用者所擁有的網誌。
注意:目前不支援為留言設定自訂作者。所有新留言都會顯示為由目前已驗證的使用者建立。
擷取留言
你可以透過貼文的留言動態消息網址,擷取特定貼文的留言:
def PrintAllComments(blogger_service, blog_id, post_id): feed_url = '/feeds/' + blog_id + '/' + post_id + '/comments/default' feed = blogger_service.Get(feed_url) print feed.title.text for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.updated.text print
或者,您也可以使用網誌的留言動態消息網址,取得所有文章的留言:
http://www.blogger.com/feeds/blogID/comments/default
刪除留言
如要刪除註解,請將註解的編輯網址傳送至 Delete
方法設定 GDataService
方法,如下所示:
def DeleteComment(blogger_service, post_id, comment_id): feed_url = '/feeds/' + post_id + '/comments/default/' + comment_id blogger_service.Delete(feed_url)