引經(jīng)據(jù)典
寫文章的時候,我喜歡引經(jīng)據(jù)典,只要有需要,我就會引用曾經(jīng)看過的圖書。然而,和上一回提到的問題類似,每當我要引用一本圖書時,我得首先打開瀏覽器上網(wǎng)搜索一下這本書,接著把這本書的一些基本信息,例如書名和作者,復制到文章里,然后插入這本書的超鏈接。有沒有辦法讓這個過程變得更加簡單呢?如果我沒記錯的話,Amazon.com提供了搜索圖書服務(wù),那么為什么不考慮把它集成進來呢?
引入一個解決方案的同時會把與之相隨的問題也引入來,要成功把Amazon.com的搜索圖書服務(wù)集成到 word2007 里,我們就得回答下面這些問題:
訪問Amazon.com的搜索圖書服務(wù)有哪些條件/要求?
如何向這個服務(wù)發(fā)送請求?又如何解析服務(wù)返回的數(shù)據(jù)?哪些數(shù)據(jù)能用到這里來?
有用的數(shù)據(jù)如何組織和顯示?
尋找經(jīng)典
Amazon Web Service提供了兩種接口,一種是基于SOAP的,另一種是基于REST的,我將選用后者來完成本回的插件。本回面臨的第一個難點就是構(gòu)建滿足需求的REST請求,要做到這點,就得先清楚需求是什么:
我希望按書名的部分或者全部進行搜索;
我希望搜索的結(jié)果里面包括圖書的書名、圖書的作者、圖書的封面和圖書的超鏈接。
Amazon.com提供了Amazon E-Commerce Service Developer Guide,根據(jù)這份文檔,我構(gòu)建了如下所示的REST請求:
圖 1 - REST Request
它告訴Amazon Web Service:
我要請求的服務(wù)是AWSECommerceService,通過它我可以訪問Amazon的產(chǎn)品數(shù)據(jù)庫;
我的訪問密鑰是什么,它可以通過在Amazon.com上注冊帳號獲得;
我要請求的操作是ItemSearch,通過它我可以搜索Amazon的產(chǎn)品數(shù)據(jù)庫;
我要搜索書名包含"VSTO"字眼的圖書。
在瀏覽器里執(zhí)行這個請求將的到如下所示的搜索結(jié)果:
圖 2 - REST Response
搜索結(jié)果所包含的信息量可以通過ResponseGroup參數(shù)來控制,ItemSearch操作使用Small作為該參數(shù)的默認值。通過把該參數(shù)的值該為Medium可以使返回的搜索結(jié)果包含圖書的封面:
圖 3 - REST Response with Image URLs
有了上面這些準備知識,我就可以著手實現(xiàn)搜索圖書這部分功能了。首先,構(gòu)建REST請求,并通過XElement.Load方法執(zhí)行之:
Code 1 - Execute REST Request
需要注意的是,由于REST請求是一個URL,而書名可以包含URL不允許的字符,于是在把書名加到REST請求之前要先對其進行編碼。
接著,用LINQ to XML對搜索結(jié)果進行處理:
Code 2 - Process REST Response
其中用到的輔助處理方法有:
Code 3 - REST Response Process Helpers
在命令行程序里使用BookSearch.Search方法搜索書名包含"VSTO"字眼的圖書: