第 9 部分: 使用 Google Ajax Search API
| 發(fā)出異步請求并不意味著只是與您自己的服務(wù)器端程序交互。其實也可以與一些公共 API,例如來自 Google 或 Amazon 的 API 進(jìn)行通信,從而為 Web 應(yīng)用程序增加您自己的腳本和服務(wù)器端程序所不能提供的更多功能。在本文中,Brett McLaughlin 教您如何向公共 API,例如 Google 提供的 API 發(fā)出請求并接收其響應(yīng)。 到目前為止,這個系列只涉及到客戶機(jī) Web 頁面向服務(wù)器端腳本和程序發(fā)出請求的情況。這就是大約 80% 到 90% 的 Ajax 應(yīng)用程序(使用 XMLHttpRequest 對象的異步 Web 應(yīng)用程序)的工作方式。然而,這種方法有很嚴(yán)重的局限性:您將受到自己才智和編程技能的限制,就算不是這樣,最起碼也要受到公司團(tuán)隊中的程序員的才智和編程技能的限制。 有 時候,您確實想實現(xiàn)一些功能,但是又不具備實現(xiàn)該目標(biāo)所需的技術(shù)知識,幾乎總能遇到這種情況。也許您不知道某些語法,也許不知道如何找出適當(dāng)?shù)乃惴ā_€有 些時候,您手頭上可能沒有用于滿足需求的數(shù)據(jù)或資源(無論是人力資源還是數(shù)據(jù)資源)。在這些情況下,也許您會想:"唉,要是我能使用其他人的代碼該多好啊!"本文就是要解決這個問題。 開放源碼腳本和程序 在論述本文的實際內(nèi)容(在 Web 應(yīng)用程序中使用公共 API)之前,有必要說一說開放源碼腳本和程序。淺顯地講,開放源碼 是用于描述可以在一定程度上免費(fèi)在您自己的應(yīng)用程序中使用和重用的代碼的一個術(shù)語。相關(guān)鏈接請參閱 參考資料。簡言之,您可以獲取別人編寫的開放源碼,然后將其放入自己的環(huán)境中,而不必為之付費(fèi),也不會受到(很多)限制。 如 果使用開放源碼,那么有時候需要為應(yīng)用程序增加額外的文檔,或者將您對開放源碼程序或腳本作出的更改反饋給社區(qū)。不管如何使用這種程序,最終結(jié)果就是,您 可以使用這么一塊代碼:該代碼是您不必親自編寫的,或者,如果沒有大量的幫助和資源的話,就無法編寫該代碼,而您手頭上并沒有這些資源。諸如 Apache 之類的項目為利用他人完成的工作提供了方便 -- 不必?fù)?dān)心,他們還希望您使用他們的作品呢! 在線文章和教程 如 果在 IBM developerWorks 上發(fā)表文章,而又不提及 Internet 上的文章、教程、白皮書之類的大量參考資料,這無疑很愚蠢。網(wǎng)上有成百上千份教材,您也許可以發(fā)現(xiàn)近千篇關(guān)于 Ajax 的文章 -- 在本系列中,我就已經(jīng)發(fā)表了近十篇文章!這些文章大部分都有可用的代碼、例子、下載以及其他各種類型的資源。 如果您沒有能力編寫 要使用的服務(wù)器端程序或腳本,或者找不到所需的開放源碼程序或腳本,那么可以打開 Google 網(wǎng)站,試著輸入對要找內(nèi)容的基本描述。然后再在 developerWorks 網(wǎng)站上執(zhí)行相同的操作。您常常可以發(fā)現(xiàn)所需的代碼,甚至是整個腳本,并且還有一些有幫助的注釋和關(guān)于其工作方式的描述。
使用公共 API 很 多時候,您會遇到非技術(shù)問題。您不需要幫助也能編寫某個腳本或某段代碼,然而,手頭上卻沒有所需的數(shù)據(jù)或資源。在這些情況下,即使有了教程或者開放源碼腳 本,也還需要更多的東西。例如,考慮在 Web 頁面上增加一個搜索引擎的情況。這樣做的前提是您已經(jīng)有了要搜索的數(shù)據(jù) -- 但是,如果要搜索您公司或組織以外的數(shù)據(jù),那么該怎么辦呢? 如果不是因為技術(shù)上的原因,而是因為數(shù)據(jù)而受到限制,那么,一個公共 API 也許可以幫助您解決問題。公共 API 允許使用其他人的服務(wù)器上的程序并使用其他人的數(shù)據(jù)。通常,API 本身只定義如何與該程序交互。例如,通過一個用于 Google 搜索引擎的公共 API 可以發(fā)出搜索請求,但是實際上是由 Google 的代碼搜索 Google 的數(shù)據(jù),然后將結(jié)果返回給您的程序。您不僅可以利用他人在編寫這些程序方面的技能,還可以利用遠(yuǎn)遠(yuǎn)超過您自己公司所能支持的數(shù)據(jù)。
使用 Google Ajax Search API 的準(zhǔn)備工作 毋 庸置疑,Google 仍然是在線時代極其重要的應(yīng)用。上至老奶奶,下至四歲小孩,即使不理解網(wǎng)上的其它東西是怎么回事,也一定知道 Google。Google 運(yùn)行著如此流行、如此有用的搜索引擎,并且致力于提供(幾乎全部)免費(fèi)的服務(wù),所以毫不奇怪,它能提供可以在您自己的程序中使用的公共 API。在本節(jié)中,您將完成使用 Google API 的準(zhǔn)備工作,并清楚地了解如何與 Google 進(jìn)行異步應(yīng)用程序會話。 從 Google 獲取開發(fā)者密鑰 本文著重討論 Google 的 Ajax Search API。通過訪問 Google Ajax Search API 主頁(如圖 1 所示),可以找到關(guān)于這個 API 的更多信息。(該主頁的鏈接見 參考資料。) 圖 1. Google 的 Ajax Search API 頁面 第一步是單擊 Sign up for a Google AJAX Search API key 鏈接。這時會進(jìn)入另一個頁面,在此頁面上可以登記使用這個 Google API。您需要接受所有使用條款(我認(rèn)為所有條款都沒有惡意)并提供您的應(yīng)用程序所在 Web 站點的 URL(如圖 2 所示)。 圖 2. 登記使用 Google 的 Ajax Search API
閱讀完協(xié)議并勾選了復(fù)選框之后,輸入 URL,單擊 Generate API Key,等待一二秒鐘。此時必須登錄 Google,或者創(chuàng)建一個帳戶。這是一個相當(dāng)標(biāo)準(zhǔn)的過程,您應(yīng)該可以自己完成。完成上述操作后,可以看到一個回復(fù)頁面,其中給出了一個非常長的密鑰,并確認(rèn)您的 URL,甚至還給出一個示例頁面。這個密鑰看上去類似于以下形式:
Google 的 API 文檔 在開始使用獲得的密鑰之前,要花點時間閱讀一下 Google 的 API 文檔(在提供密鑰的頁面的底端有一個鏈接,本文的參考資料中也提供了該鏈接)。即使您通過本文有了很好的初步認(rèn)識,仍然會發(fā)現(xiàn) Google 的 API 文檔是一個很好的參考資料,通過該文檔可能會得到關(guān)于如何在您自己特有的應(yīng)用程序中、站點上使用 Google 的一些有趣的想法。
最簡單的 Google 搜索 Web 應(yīng)用程序 為了看看實際效果,我們以 Google 提供的示例 Web 頁面為例,對它稍做修改,然后看看它會變成什么樣子。 創(chuàng)建搜索框 清單 1 顯示了一個很簡單的 Web 頁面。將這段代碼輸入到您喜歡使用的編輯器中,保存為文件,然后將該文件上傳到上個小節(jié)中提供給 Google 的域或 URL 上。 清單 1. 一個簡單的 Google 搜索應(yīng)用程序的 HTML 代碼
注意使用從 Google 獲得的密鑰替換代碼中的粗體文本。當(dāng)裝載該頁面時,可以看到類似于圖 3 的一個頁面。 圖 3. 最簡單的 Google 搜索窗體 這個頁面看上去很簡單,但實際上那個小小的控件背后是 Google 的強(qiáng)大搜索能力。 運(yùn)行搜索 輸入一個搜索詞并單擊 Search,使 Google 開始工作。很快可以看到一些搜索結(jié)果,如圖 4 所示。 圖 4. Google 的搜索結(jié)果 添加預(yù)搜索頁面 顯然,執(zhí)行一次搜索之后,頁面看上去好多了。視頻、博客和搜索結(jié)果使頁面更加美觀。因此,您可能想添加一個預(yù)搜索,即您定義的一個搜索詞,當(dāng)用戶裝載您的頁面時,首先將看到該搜索詞的搜索結(jié)果。為此,可以將清單 2 中以粗體顯示的那行代碼添加到 JavaScript 中。 清單 2. 添加預(yù)搜索詞
顯然,您可以將自己的初始搜索詞加入代碼中,以定制頁面裝載時所顯示的內(nèi)容。 JavaScript 解析 在繼續(xù)學(xué)習(xí)之前,簡單看一下這些基本命令的作用。首先,創(chuàng)建一個新的 GSearchControl,如清單 3 所示。以下結(jié)構(gòu)可用于執(zhí)行所有搜索任務(wù): 清單 3. 創(chuàng)建新的 GSearchControl
接著,代碼使用 GlocalSearch 設(shè)置一個新的本地搜索;這是特殊的 Google 結(jié)構(gòu),通過它可以對特定位置執(zhí)行搜索。這個本地搜索如清單 4 所示。 清單 4. 設(shè)置新的本地搜索
只要知道對象和方法調(diào)用,以上代碼無需解釋。清單 4 中的代碼創(chuàng)建一個新的本地搜索器,然后設(shè)置搜索的中心位置。 清單 5 中的這幾行代碼告訴搜索控件應(yīng)該執(zhí)行何種類型的搜索。 清單 5. 允許的搜索類型
其中大部分搜索類型都可以查閱到,以下是一個簡短的總結(jié):
您已經(jīng)了解如何預(yù)先裝載特定的搜索。然后,剩下的只有 draw() 方法調(diào)用了,如清單 6 所示。您為該方法調(diào)用提供了 HTML 中的一個 DOM 元素(如果想回顧關(guān)于 DOM 的內(nèi)容,請參閱 參考資料 中本系列的前幾篇文章)。然后,這個控件將魔術(shù)般地出現(xiàn)在窗體上,供用戶使用。 清單 6. 繪制搜索控件
Ajax 在哪里? 到目前為止,還不能明顯看出這個簡單的搜索框中哪里存在異步性。當(dāng)然,在 Web 應(yīng)用程序中某個地方提供一個 Google 搜索框確實很棒,但是這畢竟是關(guān)于 Ajax 應(yīng)用程序的系列文章,而不是關(guān)于 Google 搜索的系列文章。那么,Ajax 到底在哪里呢? 輸入搜索詞并單擊 Search 按鈕,您將注意到一個非常有 Ajax 風(fēng)格的響應(yīng):搜索結(jié)果直接顯示出來,并沒有頁面重新裝載過程。這正是大多數(shù) Ajax 應(yīng)用程序的標(biāo)志之一,即無需重新裝載頁面,直接顯示內(nèi)容更改。顯然,這已經(jīng)超出了常規(guī)請求/響應(yīng)模型的能力范圍。但是,XMLHttpRequest 在哪里呢?曾經(jīng)在那么多文章中風(fēng)光一時的 request 對象如今何在?除了那個 getElementById() 方法,DOM 和頁面操作又在哪里?實際上,這一切都包含在 HTML 內(nèi)的兩行代碼中。 Google 負(fù)責(zé)處理 JavaScript 第一行要注意的代碼尚未多加討論,該代碼如清單 7 所示。 清單 7. 至關(guān)重要的 JavaScript 文件
這里的語法并不特別值得關(guān)注,但要說明的是,Google 存放著一個名為 uds.js 的文件,該文件包含搜索框運(yùn)行所需的所有 JavaScript。這就是使用他人的代碼的最真實的感覺:甚至可以讓第三方來存放您的應(yīng)用程序所使用的代碼。這一點非常重要,因為 Google 負(fù)責(zé)維護(hù)工作,當(dāng) Google 升級 JavaScript 文件時,您就能自動受益。Google 不會在不通知您的情況下改變 API,所以即使 JavaScript 文件發(fā)生了改變,您的代碼仍然可以工作。 GSearchControl 對象 另一項比較隱蔽的操作就是在 onLoad() JavaScript 函數(shù)中創(chuàng)建的 GSearchControl 對象。要創(chuàng)建這個對象,只需調(diào)用清單 8 中的代碼。 清單 8. 創(chuàng)建一個 GSearchControl 對象
所需的 HTML 代碼非常簡單:只需使用一個 div 標(biāo)記,以及 JavaScript 可以引用的一個 ID,如清單 9 所示。 清單 9. 用于創(chuàng)建搜索控件的 HTML 代碼
同 樣,Google 的代碼在幕后處理各種事情。它創(chuàng)建一個新的文本框,一些作為圖標(biāo)的圖像,還有一個用于調(diào)用某個 JavaScript 函數(shù)的按鈕。所以,您免費(fèi)獲得了所有行為。雖然您應(yīng)該理解其中的基本工作原理,但更方便的是,您可以直接使用該代碼,然后編寫應(yīng)用程序剩下的部分。 Ajax 不僅僅是您自己編寫的代碼 Ajax 應(yīng)用程序不僅僅是指使用 XmlHttpRequest;可以說是一種基于異步方式開發(fā) Web 應(yīng)用程序的方法。即使您沒有編寫任何特定于 Ajax 的代碼,也仍然創(chuàng)建了一個 Ajax 應(yīng)用程序。多虧了 Google:它做了大部分工作,而您則坐享其成!
深度探索 Google 的 Ajax Search API 至此,就該由您來完成這些步驟,并應(yīng)用于您自己的應(yīng)用程序。最簡單的應(yīng)用是,將一個 div 拖入 Web 頁面,并將 清單 1 中顯示的 JavaScript 添加到 Web 頁面中;然后就可以使用 Google 搜索了。 但 是,有趣的事情不止于此。不必局限于這組特定的選項或控件。可以圍繞 Web 結(jié)果、博客結(jié)果和視頻結(jié)果做文章,合適的話,可以將每種結(jié)果集成到 Web 應(yīng)用程序中。例如,可以提供多個搜索控件,每個搜索控件專門用于搜索一種類型的結(jié)果。還可以將 Google 搜索控件包括在一個 span 元素中,放在其余的應(yīng)用程序內(nèi)容的中間,而不是放在側(cè)面的一個 div 中。不管那種情況,都應(yīng)該確信,Google 的搜索是為您的需求而打造的,而不應(yīng)該修改您自己的應(yīng)用程序來適應(yīng) Google。
結(jié)束語 以 本文學(xué)到的知識為基礎(chǔ),將 Google 搜索框和其他 Google API 應(yīng)用到您自己的 Ajax 應(yīng)用程序中,這應(yīng)該不難。然而,更重要的是,您應(yīng)該明白如何使用公共 API。例如,Amazon.com 也提供了一個公共 API,通過它可以對書籍和 Amazon 的其它商品執(zhí)行同樣的 Web 搜索。您可以著手尋找自己喜歡的公共 API,從而超越自己編程技能的限制。實際上,很容易創(chuàng)建一個集成了 Google、Amazon.com、Flickr 等內(nèi)容的站點。 雖然弄清楚如何使用 Google 比較重要(因為 Google 提供了良好搜索算法和海量的數(shù)據(jù)存儲),但更 重要的是學(xué)習(xí)如何使用任意的 公共 API。還應(yīng)該開始轉(zhuǎn)變觀念,不要再將自己的應(yīng)用程序看作自我編程技能的總和;相反,它可以是通向各種數(shù)據(jù)的一個大門。而這些數(shù)據(jù)可能存儲在 Google、Amazon.com、del.icio.us 的服務(wù)器上或者其他任何地方。在這些數(shù)據(jù)的基礎(chǔ)上,添加您自己的業(yè)務(wù)或項目內(nèi)容,就可以得到非常強(qiáng)大、非常健壯的解決方案,這遠(yuǎn)遠(yuǎn)超過您自己編寫的作品。 所以,把眼光放遠(yuǎn)一點,構(gòu)建大 應(yīng)用程序。使用來自各種地方的數(shù)據(jù),不要限于自己編寫的代碼。享受使用他人代碼的樂趣,在本系列接下來的文章中,我將談到更多技術(shù)問題,例如數(shù)據(jù)格式。 |
總結(jié)
以上是生活随笔為你收集整理的第 9 部分: 使用 Google Ajax Search API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac tortoisesvn客户端_t
- 下一篇: 2019年最新版嵌入式开发教程大纲免费分