標籤:char 響應 而不是 對象 lis 構建 rms 資訊 developer
註:以下內容部分來自於mathworkswebread
從 RESTful Web 服務讀取內容
1.RESTful
REST 表示具象狀態傳輸 (representational state transfer),Web 服務的一種常用體繫結構樣式。RESTful 介面提供標準的 HTTP 方法,例如 GET、PUT、POST 或 DELETE。
隨著 REST 成為大多數 Web 和 Mobile 應用的預設選擇,勢必要對它的基本原理有所瞭解。
在它提出十多年後的今天,REST 已經成為最重要的 Web 應用程式技術之一。隨著所有技術朝著 API 方向發展,它的重要性有可能持續快速地增長。每門主要程式設計語言現在已經包含構建 RESTful Web 服務的架構。同樣地,Web 開發人員和架構師對 REST 和 RESTful 服務有一個清晰的理解是很重要的。這篇教程解釋了 REST 架構,然後研究使用它構建通用地基於API的任務的細節。
1.1 什麼是 REST
REST 代表具象狀態傳輸(representational state transfer),它是一種網路化超媒體應用的架構風格。它主要是用於構建輕量級的、可維護的、可伸縮的 Web 服務。基於 REST 的服務被稱為 RESTful 服務。REST 不依賴於任何協議,但是幾乎每個 RESTful 服務使用 HTTP 作為底層協議。
RESTful 使用HTTP post(建立、更新)資料、讀取資料、刪除資料。使用HTTP實現CRUD(建立、讀取、更新、刪除)操作。
1.2 RESTful 服務特點:
每個系統都使用資源。這些資源可以是圖片,視頻檔案,網頁,商業資訊,或者在基於電腦的系統中可以被代表的任何事物。服務的目的是提供一個視窗給用戶端以便用戶端能訪問這些資源。服務架構師和開發人員想要這些服務變得易於實現、維護、擴充、伸縮。RESTful 架構允許這些,甚至更多。一般來說,RESTful 服務應該有下面的屬性和特徵,也就是我要詳細描述的內容:
- 模型表示(Representations)
- 訊息(Messages)
- URIs
- 一致介面(Uniform interface)
- (無狀態)Stateless
- 資源之間的連結(Links between resources)
- 緩衝(Caching)
2.文法
data = webread(url)
data = webread(url,QueryName1,QueryValue1,...,QueryNameN,QueryValueN)
data = webread(___,options)
[data,colormap,alpha] = webread(___)
[data,Fs] = webread(___) 3.說明
樣本
data = webread(url) 從 url 指定的 Web 服務讀取內容並在 data 中返回內容。
Web 服務提供了一個RESTful,後者可以返回具有 Internet 媒體類型格式(例如 JSON、XML、映像或文本)的資料。
樣本
data = webread(url,QueryName1,QueryValue1,...,QueryNameN,QueryValueN) 按照一個或多個名稱-值對組參數指定的方式將查詢參數追加到 url。要將查詢放入訊息主體,請使用 webwrite。Web 服務定義查詢參數。
樣本
data = webread(___,options) 添加由 weboptions 對象 options 指定的其他 HTTP 要求選項。您可以將此文法與前面文法中的任何輸入參數結合使用。
要將資料返回為特定輸出類型,請指定 options 的 ContentType 屬性。
要使用函數讀取內容,請將 options 的 ContentReader 屬性指定為該函數的控制代碼。webread 從 Web 服務下載資料並使用指定的函數讀取這些資料:
[data,colormap,alpha] = webread(___) 從 url 指定的 Web 服務中讀取映像,並在 data 中返回該映像。您可以使用上述文法僅返回映像。使用此文法可返回與該映像關聯的顏色圖和 Alpha 色板。
如果 HTTP 響應具有用於指定映像媒體類型的 Content-Type 頭欄位且 imread 支援該映像格式,則 webread 將返回一個映像。有關受支援的映像格式,請參閱支援的匯入和匯出檔案格式。
[data,Fs] = webread(___) 從 url 指定的 Web 服務中讀取音頻資料,並在 data 中返回這些資料。您可以使用上述文法僅返迴音頻資料。使用此文法可返迴音頻資料的採樣率(以赫茲為單位)。
如果 HTTP 響應具有用於指定音頻媒體類型的 Content-Type 頭欄位且 audioread 支援該音頻格式,則 webread 將返迴音頻資料。有關受支援的音頻格式,請參閱支援的匯入和匯出檔案格式。
4.樣本4.1從網站讀取映像
從 Hubble Heritage 網站讀取木星映像並顯示該映像。
url = ‘http://heritage.stsci.edu/2007/14/images/p0714aa.jpg‘;rgb = webread(url);whos rgb
Name Size Bytes Class Attributes rgb 1000x800x3 2400000 uint8
調整並顯示映像。
rgb = imresize(rgb,0.6);imshow(rgb)
木星映像來源:NASA、ESA 和 Hubble Heritage Team (STScI/AURA)。(有關使用規定,請參閱 Hubble Heritage Information Center。)
4.2從 Web 服務 API 讀取資料
從世界銀行氣候資料 API 讀取美國的溫度資料。繪製 1901–2012 年的溫度圖。
從世界銀行讀取資料。此 API 返回 JSON 對象形式的資料。
api = ‘http://climatedataapi.worldbank.org/climateweb/rest/v1/‘;url = [api ‘country/cru/tas/year/USA‘];S = webread(url)
S = 112x1 struct array with fields: year data
webread 將 JSON 對象轉換為結構體數組。每個結構體都包含年份和美國該年的平均溫度(以攝氏度為單位)。
顯示第一年的溫度。
S(1)
ans = year: 1901 data: 6.6187
繪製平均溫度圖。將 S.year 和 S.data 串聯成數組並繪製這些數組。
year = [S.year];data = [S.data];plot(year,data)xlabel(‘Year‘);ylabel(‘Temperature (Celsius)‘);title(‘USA Average Temperatures‘)axis tight
世界銀行提供的 API 和資料:氣候資料 API。(請參閱世界銀行:氣候資料 API 以瞭解有關 API 的更多資訊;請參閱世界銀行:使用規定。)
4.3指定 Web 服務查詢參數
在 File Exchange 中搜尋在過去七天中上傳的包含單詞 Simulink? 的檔案。
指定查詢參數。webread 將 Web 服務查詢參數名稱和值追加到 URL。File Exchange Web 服務定義 term 和 duration 查詢參數,而非 webread 函數。
url = ‘http://www.mathworks.com/matlabcentral/fileexchange/‘;data = webread(url,‘term‘,‘simulink‘,‘duration‘,7);
webread 以字元數組形式返回搜尋結果頁的 HTML。
4.4指定請求選項
指定一個附加請求選項以通過世界銀行氣候資料 API 將資料讀取到字元數組。
建立一個 weboptions 對象並將其 ContentType 設定為 ‘text‘。webread 函數將 JSON 對象轉換為字元數組而不是結構體數組。顯示字元數組的開頭。
api = ‘http://climatedataapi.worldbank.org/climateweb/rest/v1/‘;url = [api ‘country/cru/tas/year/USA‘];options = weboptions(‘ContentType‘,‘text‘);data = webread(url,options);data(1:62)
ans =[{"year":1901,"data":6.6187487},{"year":1902,"data":6.4643273}
世界銀行提供的 API 和資料:氣候資料 API。(請參閱世界銀行:氣候資料 API 以瞭解有關 API 的更多資訊;請參閱世界銀行:使用規定。)
4.5使用 POST 請求讀取資料
發送 HTTP POST 請求以在 File Exchange 中搜尋在過去七天中上傳的包含單詞 Simulink 的檔案。
url = ‘http://www.mathworks.com/matlabcentral/fileexchange/‘;options = weboptions(‘RequestMethod‘,‘post‘);data = webread(url,‘term‘,‘simulink‘,‘duration‘,7,options);
許多 Web 服務除了提供 GET 方法外還提供 POST 方法用於請求資料。
4.6將日期和時間指定為查詢參數
從 NASA Earth Observation (NEO) Web Mapping Service 讀取 2004 年 12 月的一幅“Blue Marble:Next Generation”映像。
使用 datetime 對象指定所請求的映像的日期。指定 D 的 Format 屬性,使其格式與 Web 服務請求的格式相匹配。
url = ‘http://neowms.sci.gsfc.nasa.gov/wms/wms‘;D = datetime(2004,12,01,‘Format‘,‘yyyy-MM-dd‘);rgb = webread(url,‘Time‘,D, ... ‘Service‘,‘WMS‘,‘Layers‘,‘BlueMarbleNG-TB‘,‘CRS‘,‘CRS:84‘, ... ‘Format‘,‘image/jpeg‘,‘Height‘,256,‘Width‘,512, ... ‘BBOX‘,‘-180.0,-90.0,180.0,90.0‘,‘Version‘,‘1.3.0‘,‘Request‘,‘GetMap‘);imshow(rgb)
webread 轉換 datetime 對象,以便它們可以作為 Web 服務查詢參數的值。樣本中的所有名稱-值對組提供了由 NEO Web Mapping Service 指定的查詢參數。
Blue Marble:Next Generation + Topography and Bathymetry 映像由 NASA 的 Earth Observatory 提供。NEO Web Mapping Service (WMS) 提供對映像和服務的存取權限。(請參閱 NASA Earth Observations 瞭解致謝名單和使用規定。有關 WMS 查詢參數,請搜尋 NASA Earth Observations 網站 https://neo.sci.gsfc.nasa.gov/about/wms.php。)
5.輸入參數
5.1 url - Web 服務的 URL
字元數組
Web 服務的 URL,指定為字元數組。Web 服務實現 RESTful 介面。有關詳細資料,請參閱 RESTful。
樣本: webread(‘http://www.mathworks.com/matlabcentral‘) 讀取網頁並以字元數組形式返回其 HTML。
5.2 QueryName1,QueryValue1,...,QueryNameN,QueryValueN - Web 服務查詢參數
名稱-值對組
Web 服務查詢參數,指定為一個或多個名稱-值對組參數。QueryName 參數必須指定查詢參數的名稱。QueryValue 參數必須是字元數組或者用於指定查詢參數值的數值、邏輯值或 datetime 值。數值、邏輯值和 datetime 值可以置於數組中。Web 服務定義作為請求的一部分而被接受的名稱-值對組。
當您將 QueryValue 指定為 datetime 對象時,必須指定其 Format 屬性,以便它與 Web 服務要求的格式一致。如果 Format 屬性包含時區或位移量,而 datetime 對象未設定時區,則 webread 會將 ‘Local‘ 指定為時區。
當 QueryValue 在一個數組中包含多個值時,可能需要指定 weboptions 對象的 ArrayFormat 屬性,以按照 Web 服務指定的方式對該數組進行表單編碼。
樣本: webread(‘http://www.mathworks.com/matlabcentral/fileexchange/‘,‘term‘,‘webread‘) 檢索上傳至 File Exchange 且包含單詞 webread 的檔案的列表。
5.3 options - 其他 HTTP 要求選項
weboptions 對象
其他 HTTP 要求選項,指定為 weboptions 對象。
可指定 weboptions 對象的 ContentType 屬性,並將該對象作為輸入參數傳遞到 webread。然後,webread 會將 data 作為該類型的輸出返回。該表列出了您可以在 weboptions 對象中指定的有效內容類型。
ContentType 設定符
|
輸出類型 |
‘auto‘(預設值)
|
基於內容類型自動確定輸出類型。 |
‘text‘
|
內容類型的字元向量:
text/plain |
text/html |
text/xml |
application/xml |
|
application/javascript |
application/x-javascript |
application/x-www-form-urlencoded |
|
如果 Web 服務返回一個具有 .m 副檔名的 MATLAB? 檔案,則該函數將以字元向量形式返回該檔案的內容。 |
‘image‘
|
image/format 內容的數值或邏輯矩陣。如果第一個輸出參數是索引映像,第二個輸出參數是顏色圖,第三個輸出參數是 Alpha 色板。
有關受支援的映像格式,請參閱支援的匯入和匯出檔案格式。 |
‘audio‘
|
audio/format 內容的數值矩陣(數值標量採樣率作為第二個輸出參數)。
有關受支援的音頻格式,請參閱支援的匯入和匯出檔案格式。 |
‘binary‘
|
二進位內容的 uint8 列向量,此處的二進位內容是指那些不能作為 char 類型進行處理的內容。 |
‘table‘
|
試算表和 CSV (text/csv) 內容的標量表格對象。 |
‘json‘
|
application/json 內容的 char、數值、邏輯值、結構體或元胞數組。
|
‘xmldom‘
|
text/xml 或 application/xml 內容的 Java? 文件物件模型 (DOM) 節點。如果未指定,則該函數將以字元向量形式返回 XML 內容。
|
‘raw‘
|
‘text‘、‘xmldom‘ 和 ‘json‘ 內容的 char 列向量。該函數將以 uint8 列向量的形式返回所有其他內容類型。
|
有關作為 weboptions 屬性的所有請求選項,請參閱 weboptions。
6.輸出參數
6.1 data - Web 服務中的內容
標量 | 數組 | 結構體 | 表
從 Web 服務讀取的內容,以標量、數組、結構體或表的形式返回。
6.2 colormap - 與索引映像關聯的顏色圖
數值數組
與索引映像關聯的顏色圖,以數值數組的形式返回。
6.3 alpha - 與索引映像關聯的 Alpha 通道
數值數組
與索引映像關聯的 Alpha 通道,以數值數組的形式返回。
6.4 Fs - 音頻資料的採樣率(以赫茲為單位)
正數值標量
音頻資料的採樣率(以赫茲為單位),以正數值標量的形式返回。
7.提示
有關 RESTful Web 服務函數不支援的功能,請參閱 HTTP 介面。
webread 支援 HTTP GET 和 POST 方法。許多 Web 服務同時提供 GET 和 POST 方法用於請求資料。要發送 HTTP POST 請求,請將 options 的 RequestMethod 屬性指定為 ‘post‘。但是,webread將查詢選項放入 url,而不是放入請求訊息的主體。要將查詢放入訊息主體,請使用 webwrite。
對於 HTTP POST 請求,webread 函數僅支援 application/x-www-form-urlencoded 媒體類型。要將 POST 請求與任何其他 Internet 媒體類型的內容一起發送,請使用 webwrite。
Matlab 爬蟲 Web Scraping with Matlab 01--認識基本函數webread