13 2 1 訪問世界銀行的資料

2021-07-26 02:27:47 字數 1764 閱讀 1610

13.2.1 訪問世界銀行的資料

提示要註冊,去 **填寫**,收到確認電子郵件後,就可以返回**,獲取 api 金鑰,用於將請求傳送到世界銀行服務。**還提供了有關服務的文件和簡明教程;你可以在網上看,我們在這一章也會解釋所使用到的內容。網頁上有一項重要的功能,是查詢生成器,可以互動地執行、配置查詢,顯示的 url 可以用於程式設計請求資料。

世界銀行使用簡單的基於 http 的服務公開資料,因此,我們可以使用早前建立的 downloadurl 函式。如果你看過文件,或者用過查詢生成器一段時間,很快就能了解請求 url 的結構。位址總是指向伺服器上的同一頁面,所有額外屬性用 url 中的鍵-值對提供。在清單 13.5 中,我們首先建立乙個構造請求 url 的函式,鍵-值對放在 f# 列表中,這樣,訪問資料更方便。

清單13.5 生成請求 url (f#)

open system.web

let worldbankkey = " hq8byg8k7t2fxc6hp7jmbx26"

<-- 在這裡,提供世界銀行的金鑰

let worldbankurl(functions, props) =

seq [2]

|> string.concat "&"

函式 worldbankurl 包含乙個序列表示式,先生成字串集合,再將它們連線成乙個 url。

在序列表示式中,首先返回的是 url 的基本部分。接下來,新增指向所需函式的路徑,由伺服器提供,例如,函式可能是「/keywords/wood」,因此,我們把函式名部分組成列表,再用分隔符「/」把它們連線起來[1]。函式定義之後,再新增頁面長度和 api 金鑰,這部分是在本章所有請求所共享的。最後,處理由使用者提供的額外屬性,遍歷由引數 props 提供的所有鍵-值對,返回字串「&鍵=值」 [2]。

要確保 url 格式正確性,我們使用了 system.web 命名空間下的 httputility 類。如果要編譯這個專案,需要引用 system.web 程式集,因為預設不引用。這個工具可以將任意字串編碼為可以包含在 url 中的字串。urlencode 方法有不同的過載,因此,必須使用型別註解(type annotation)說明引數 value 的型別是字串。

在本章,我們將建立 f# 指令碼檔案,而不是傳統的應用程式,因此,下一步就是寫幾個 f# 互動命令,立即執行,看看函式執行是否正確。這種「測試請求(test request)」對於確定銀行所使用的資料格式,非常有用,這樣,就能知道如何解析資料。

由世界銀行提供的統計資料既有每個國家的,也有按地區或收入分組的,匯**計更利於看到總體趨勢。我們首先要做的,就是獲取所有的分組資訊,可以在**上嘗試使用查詢生成器。首先,在 country calls 選項卡上選擇 countries(國家),並輸入 api 金鑰;要得到按國家分組的彙總列表,從region(區域)列表中選擇 aggregates(彙總),然後,執行請求。清單 13.6 顯示了使用互動式 f# 執行相同的請求。

清單13.6 測試世界銀行資料服務 (互動式 f#)

> let url = 

worldbankurl(["countries"], | [1]

["region", "na" ];; | 用指定屬性生成 url

val url : string =

api_key=hq8byg8k7t2fxc6hp7jmbx26®ion=na"

val it : string = "<?xml version=\"

1.0\" encoding=\"utf-8\" (...)"

世界最小超聲波感測器問世

英國研究人員16日說,他們製造出了世界上最小的超聲波感測器。它是如此微小,以至於可以在一根頭髮絲上排成佇列。這一成果可廣泛用於探索細胞內部等微觀環境。英國諾丁漢大學當天發布公報說,該校應用光學研究小組製造出了這種微型超聲波感測器。它比現有的超聲波感測器要小許多,500個這種感測器排在一起才會達到一根...

當IBM 700系列問世 整個世界都安靜了!

ibm 700系列 類歷史上里程碑 從古至今,總有一些東西能夠讓人恐懼,恐懼的同時,就要面臨接受或拒絕的選擇。接受往往需要花費更多的精力 時間去學習新東西 拒絕往往會被優勝劣汰,面臨時代的驅逐。世界上第一台儲存程式計算機誕生於1952年12月,也是通常意義上的電腦,它叫ibm 701。1955年3月...

世界最小電晶體問世 柵極長度僅一奈米

在7日出版的 科學 雜誌上,一美國研究小組發表 稱,他們利用碳奈米管和二硫化鉬 mos2 成功製出目前世界最小電晶體,其柵極長度僅有1奈米,這一僅是人類髮絲直徑五萬分之一的尺度,遠低於矽基電晶體柵極長度最小5奈米的理論極值。製出更小的電晶體,是半導體行業一直努力的方向,柵極長度則被認為是衡量電晶體大...