:::

SensorThings API 範例教學

以下 API 教學以空氣品質類之資料為範例加以說明:

如需要查詢其他類別資料,請進入各類 STA 常用範例搜尋。如果有任何疑問,歡迎您留言給我們,我們會儘速協助您。

資料來源(URI)路徑:

首先需取得資料服務的來源 URI 路徑:

在「API 介面說明」的頁面中,可以找到URI 的組成結構

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/

Things


Thing 可能是一個物理世界的物件,也可能是資訊世界(虛擬的物體),可被識別和整合進入通訊網路 [ITU-T Y.2060]。
Thing 是創建 SensorThings 模型結構的起點,一個 ThingLocation(位置)和一個或多個 Datastreams(資料流)來 Observation(觀測)。

- 範例1 -
範例說明:取回所有Things

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things

- 範例2 -
範例說明:取回一個指定的Thing

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things(1)

- 範例3 -:使用$expand查詢選項的範例
範例說明:使用$expand查詢選項,取回一個Thing 和其所包含的實體(entity),可取回多實體集合或單一實體。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things(1)?$expand=Datastreams

$expand相關實體
  • Locations:展示 Thing 實體內 Location 詳細內容。
  • Datastreams:展示 Thing 實體內 Datastreams 詳細內容。
  • HistoricalLocations:展示 Thing 實體內 HistoricalLocations 詳細內容。

- 範例4 -:使用$select查詢選項的範例
範例說明:取回一個指定的 Thing 的特定屬性。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things(1)?$select=description

$select 查詢屬性 描述
name Thing 的實體名稱。
description Thing 的實體描述。
properties Thing 的實體屬性。
Locations Thing 實體的最終已知位置。
Datastreams Thing 實體觀測資料之集合,由相同的Sensor 產生。
HistoricalLocations Thing 實體之歷史位置與軌跡。

Locations


Location(位置)實體記錄 Thing(s) 關聯的位置。一個 ThingLocation 實體被定義為 Thing 最後已知的位置(物理位置)。
當一個 Location(物理位置)存在多種 encodingType(編碼類型)時,此時的 Thing 可關聯多個 Locations

- 範例1 -
範例說明:取回所有的Locations

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Locations

- 範例2 -
範例說明:使用id取回一個指定的Location

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Locations(1)

- 範例3 -
範例說明:使用Thing id

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things(1)/Locations

- 範例4 -:使用$expand查詢選項的範例
範例說明:使用$expand查詢選項,取回一個指定的Location和其所包含的實體。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Locations(1)?$expand=Things

$expand相關實體
  • Things:展示 Location 實體內 Thing 詳細內容。
  • HistoricalLocations:展示 Location 實體內 HistoricalLocations 詳細內容。

- 範例5 -:使用$filter(空間查詢)
範例說明:取回指定的多邊形中的所有Locations,並擴展到Thing實體來取回所有元數據。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Locations?$expand=Things&$filter=geo.intersects(Locations/location,geography'POLYGON((120.9 25.3,120.8 24.7,121.9 24.6,122.1 25.3,120.9 25.3))')&$count=true

- 範例6 -:使用$select查詢選項的範例
範例說明:從指定Location中取回特定的屬性。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Locations(1)?$select=description

$select 查詢屬性 描述
name Location 的實體名稱。
description Location 的實體描述。
encodingType Location 的編碼類型。
Location Location 實體的最終已知位置。
Thing 物聯網物件,一個物理世界或虛擬世界的物件,可被辨識或結合至通訊網路。
HistoricalLocations Thing 物件之歷史位置與軌跡。

HistoricalLocations


ThingHistoricalLocation(歷史位置)單元提供了 Thing 的當前(最後已知)和之前所有 locations 的時間。

- 範例1 -
範例說明:取回所有的HistoricalLocations

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/HistoricalLocations

- 範例2 -
範例說明:取回一個指定的HistoricalLocation

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/HistoricalLocations(1)

- 範例3 -:使用$expand查詢選項的範例
範例說明:使用$expand查詢選項,取回一個指定的HistoricalLocation和其所包含的相關實體資訊。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/HistoricalLocations(1)?$expand=Locations

$expand相關實體
  • Locations:展示 HistoricalLocation 實體內 Location 詳細內容。
  • Thing:展示 HistoricalLocation 實體內 Thing 詳細內容。

- 範例4 -:使用$select查詢選項的範例
範例說明:從指定的HistoricalLocation中取回特定的屬性。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/HistoricalLocations(1)?$select=time

$select 查詢屬性 描述
time HistoricalLocation 的時間。
Locations Thing 物件的已知位置。
Thing 物聯網物件,一個物理世界或虛擬世界的物件,可被辨識或結合至通訊網路。

Datastreams


同一個 Sensor(感測器)測量同一個 ObservedProperty(觀測屬性) Observations(觀測)的集合,稱之為 Datastream(資料流)。

- 範例1 -
範例說明:取回所有的Datastreams

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams

- 範例2 -
範例說明:使用id取回一個指定的Datastream

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams(1)

- 範例3 -
範例說明:使用Thing id。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things(1)/Datastreams

- 範例4 -:使用$expand查詢選項的範例
範例說明:使用$expand查詢選項,取回一個指定的Datastream和其所包含的實體

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams(1)?$expand=Observations,ObservedProperty

$expand相關實體
  • Thing:展示 Datastream 實體內 Thing 詳細內容。
  • Sensor:展示 Datastream 實體內 Sensor 詳細內容。
  • ObservedProperty:展示 Datastream 實體內 ObservedProperty 詳細內容。
  • Observations:展示 Datastream 實體內 Observations 詳細內容。

- 範例5 -:使用$select查詢選項的範例
範例說明:從指定Datastream中取回特定的屬性。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams(1)?$select=description,unitOfMeasurement

$select 查詢屬性 描述
name Datastreams 的實體名稱。
description Datastreams 的實體描述。
unitOfMeasurement Datastreams 之觀測結果所帶有的單位。
observationType Observation 的類型(具有唯一的結果類型),服務使用該類型來對觀察值進行編碼。
observedArea Datastreams 的所有 FeaturesOfInterest 的涵蓋範圍。
phenomenonTime Datastreams 的所有觀測結果之時間區間。
resultTime Datastreams 的所有觀測結果之結果時間區間。
Thing DatastreamsThing 的鏈接。
Sensor 針對現象或屬性進行觀測獲得評估值之裝置。
ObservedProperty Datastreams 所觀測的現象。
Observations 針對特定現象產生評估結果的量測行為。

Sensors


感測器(Sensor)在 SensorThing API 是測量儀器,負責觀測一個屬性或一種現象,並記錄其得到的觀測值。

- 範例1 -
範例說明:取回所有的Sensors

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Sensors

- 範例2 -
範例說明:使用id取回一個指定的Sensor

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Sensors(1)

- 範例3 -:使用$expand查詢選項的範例
範例說明:使用$expand查詢選項,取回一個指定的Sensor和其所包含的實體。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Sensors(1)?$expand=Datastreams

$expand相關實體
  • Datastreams:展示 Sensor 實體內 Datastreams 詳細內容。

- 範例4 -:使用$select查詢選項的範例
範例說明:從指定Sensor中取回特定的屬性。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Sensors(1)?$select=description

$select 查詢屬性 描述
name Sensor 的實體名稱。
description Sensor 的實體描述。
encodingType metadata 屬性的編碼類型。
metadata Sensor 或系統的詳細描述,描述類型由 encodingType 定義。
Datastreams 觀測資料之集合,由相同的Sensor 產生。

ObservedProperties


一個 ObservedProperty 特指一個觀測值(Observation)的現象。

- 範例1 -
範例說明:取回所有的ObservedProperties

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/ObservedProperties

- 範例2 -
範例說明:使用id取回一個指定的ObservedProperty

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/ObservedProperties(1)

- 範例3 -:使用$expand查詢選項的範例
範例說明:使用$expand查詢選項,取回一個指定的ObservedProperty和其所包含的實體。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/ObservedProperties(1)?$expand=Datastreams

$expand相關實體
  • Datastreams:觀測資料之集合,由相同的 Sensor 產生。

- 範例4 -:使用$select查詢選項的範例
範例說明:從指定的ObservedProperty中取回特定的屬性。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/ObservedProperties(1)?$select=description

$select 查詢屬性 描述
name ObservedProperty 的實體名稱。
definition 定義 ObservedProperty 的 URI。
description ObservedProperty 的實體描述。
Datastreams 觀測資料之集合,由相同的 Sensor 產生。

Observations


一個 Observation(觀測)是一種測量或者是計算一個屬性值的行為,SensorThings API 中的一個 Observation 代表一個 ObservedProperty 中單個 Sensor 的讀取值。
一個物理設備(Sensor)發送 Observations 給一個指定的 Datastream。同時,一個 Observation 需要一個 FeatureOfInterest(感興趣圖徵)實體。
如果請求中沒有提供 FeatureOfInterest,此 Datastream 所關聯的 ThingLocation 將被視作此 ObservationFeatureOfInterest

- 範例1 -
範例說明:取回所有的Observations

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Observations

- 範例2 -
範例說明:使用id取回一個指定的Observation

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Observations(1)

- 範例3 -
範例說明:使用Datastream id

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams(1)/Observations

- 範例4 -:使用$expand查詢選項的範例
範例說明:使用$expand查詢選項,取回一個Observation和其所包含的實體。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Observations(1)?$expand=Datastream

$expand相關實體
  • Datastreams:展示 Observations 實體內 Datastreams 詳細內容。
  • FeatureOfInterest:展示 Observations 實體內 FeatureOfInterest 詳細內容。

- 範例5 -:使用$select查詢選項的範例
範例說明:取回一個指定的Observation的特定屬性。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Observations(1)?$select=phenomenonTime,result

$select 查詢屬性 描述
phenomenonTime 觀測發生的時刻或時間區間。
result ObservedProperty 觀測所得之估計值。
resultTime 觀測結果產生的時間。
resultQuality 描述觀測結果的品質。
validTime 觀測結果可以使用的時間區間。
parameters 描述觀測期間的環境條件或設定。
Datastreams 觀測資料之集合,由相同的 Sensor 產生。
FeatureOfInterest 觀測時所針對的圖徵。

FeaturesOfInterest


FeatureOfInterest(感興趣圖徵)為一個 Observation 所觀測的圖徵。若為在地感測器,FeatureOfInterest 將為 ThingLocation
若為遙測感測器,FeatureOfInterest 將為該 Observation 所觀測之圖徵或區域。

- 範例1 -
範例說明:取回所有的FeaturesOfInterest

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/FeaturesOfInterest

- 範例2 -
範例說明:使用id取回一個指定的FeatureOfInterest

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/FeaturesOfInterest(1)

- 範例3 -:使用$expand查詢選項的範例
範例說明:使用$expand查詢選項,取回一個指定的FeatureOfInterest和其所包含的實體。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/FeaturesOfInterest(1)?$expand=Observations

$expand相關實體
  • Observations:針對特定現象產生評估結果的量測行為。

- 範例4 -:使用$select查詢選項的範例
範例說明:取回一個指定的FeatureOfInterest的特定屬性。

此範例為空氣品質類之資料來源路徑:
https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/FeaturesOfInterest(1)?$select=description

$select 查詢屬性 描述
name FeatureOfInterest 實體名稱。
description FeatureOfInterest 實體描述。
encodinType FeatureOfInterest 屬性的編碼類型。
feature 該圖徴的詳細說明。資料類型由encodingType 定義。
Observations 針對特定現象產生評估結果的量測行為。

注意事項


日期時間格式


SensorThings API所有日期時間資訊皆為為格林威治標準時間,要換算成台灣時間需要 +8 小時,例如"phenomenonTime": "2023-08-07T02:00:51.000Z" 代表台灣時間為2023/08/07 10:00:51

分頁


SensorThings API對於超過100筆以上之資料會進行分頁處理,因此每一頁所呈現之資料量最多為100筆,透過"@iot.count"這個參數,可知道資料總筆數,透過$skip這個查詢選項的值則可以「跳過」多少筆資料,例如$skip=100代表跳過前100筆資料,顯示第101~200筆資料

- 範例1 -
範例說明:下面SensorThings API結果,"@iot.count": 10999,代表資料總筆數為10,999筆,而https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things所列資料為前100筆資料

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things
- 範例2 -
範例說明:利用$skip=100的查詢選項,取得第101~200筆資料

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things?$skip=100

查詢測站與測站相關資訊


Thing 查詢測站基本資料(metadata)、座標(Location)、物理量(Datastream)等資訊

- 範例1 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things

- 範例2 -
說明:透過 $filter 查詢 Things 裡的 name 參數,所以查詢方式為 Things?$filter=name eq '智慧城鄉空品微型感測器-7737132222'

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things?$filter=name eq '智慧城鄉空品微型感測器-7737132222'

- 範例3 -
說明:利用 Things?$expand=Locations 的方式進行查詢,是以 Things 為主,關聯到 Locations 資訊,所以 api 的資料呈現會以 Things 為主體,然後列出每一個 Things 所屬的 Locations 資訊,結果如下:
{
	"description": "智慧城鄉空品微型感測器-7737132222",
	"@iot.id": 1,
	"name": "智慧城鄉空品微型感測器-7737132222",
	"properties": {
		"city": "基隆市",
		"areaType": "鄰近工業區社區",
		"isMobile": "false",
		"township": "七堵區",
		"authority": "行政院環境保護署",
		"isDisplay": "false",
		"isOutdoor": "false",
		"stationID": "7737132222",
		"locationId": "TW020101A0201227",
		"Description": "柏昇 / SAQ-200-002",
		"projectName": "107年度基隆市空氣品質感測物聯網布建計畫",
		"stationName": "智慧城鄉空品微型感測器-7737132222",
		"areaDescription": "六堵科技園區"
	},
	"@iot.selfLink": "https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things(1)",
	"Locations@iot.count": 1,
	"Locations": [
		{
			"description": "智慧城鄉空品微型感測器-7737132222",
			"encodingType": "application/vnd.geo+json",
			"@iot.id": 1,
			"location": {
			"type": "Point",
			"coordinates": [
				121.69755,
				25.08876
			]
		},
		"name": "智慧城鄉空品微型感測器-7737132222",
		"@iot.selfLink": "https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Locations(1)"
	}
],

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things?$expand=Locations

- 範例4 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things?$expand=Locations&$filter=name eq '智慧城鄉空品微型感測器-7737132222'

- 範例5 -
說明:透過 $filter 查詢 Thingsproperties 裡的 city 參數,所以查詢方式為 Things?$expand=Locations&$filter=properties/city eq '台北市'

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things?$expand=Locations&$filter=properties/city eq '台北市'

- 範例6 -
說明:對於資料來源為水資源物聯網的水資源相關資料集來說,因為其提供單位包含水利署、水利署(與縣市政府合建)、農田水利署以及營建署等四個不同部會,因此當要查詢不同部會所提供的感測器資料時,需透過Thing/properties/authority_type參數來進行篩選查詢。

https://sta.colife.org.tw/STA_WaterResource_v2/v1.0/Things?$expand=Locations&$filter=Thing/properties/authority_type eq '水利署'

資料流(Datastream,或稱物理量)相關資訊


感測器的每一項感測項目都視為一個Datastream(資料流,或稱物理量),例如一個空氣品質感測器通常具備PM2.5、溫度以及濕度三個感測項目,亦即具備三個Datastream

在SensorThings API的架構裡,每一個測站(Thing)都有各自的Datastream,因此如果以https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams查詢,其結果會是所有ThingDatastream,例如範例1。

- 範例1 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams?$expand=Thing
- 範例2 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams?$expand=Thing&$filter=name eq 'PM2.5'
- 範例3 -
說明:對於資料來源為水資源物聯網的水資源相關資料集來說,因為其提供單位包含水利署、水利署(與縣市政府合建)、農田水利署以及營建署等四個不同部會,每個部會所建置的感測器種類各有不同,包含像是河川水位站、淹水感測器、閘門、埤塘水位站等等(詳見水資源資料集),每個感測器種類的Datastream又各自不同,因此若要查詢不同感測器或不同Datastream時,建議先整理水資源資料集之Datastream清單再做進一步使用。

https://sta.colife.org.tw/STA_WaterResource_v2/v1.0/Datastreams?$expand=Thing,Thing/Locations
- 範例4 -
說明:此範例因為要查詢Datastream,所以api的查詢主體為https://sta.colife.org.tw/STA_WaterResource_v2/v1.0/Datastreams,且因為查詢內容包含其所屬的ThingLocation,所以使用$expand加入ThingLocation的查詢參數,且由於LocationThing的關聯,所以查詢方式為$expand=Thing,Thing/Locations,最後,再加上篩選authority_type為水利署的查詢參數,就完成此api。

https://sta.colife.org.tw/STA_WaterResource_v2/v1.0/Datastreams?$expand=Thing,Thing/Locations&$filter=Thing/properties/authority_type eq '水利署'

感測資料相關資訊


感測器的每一項感測項目都視為一個Datastream,例如空氣品質感測器通常具備PM2.5、溫度以及濕度三個Datastream,而感測資料Observation則關聯到其所屬的Datastream

由於感測資料Observation關聯到其所屬的Datastream,若直接以Observation為查詢主體,將不容易查詢到其所屬的感測器,因此,一般都以Datastream關聯到Observation的方式進行查詢,例如Datastreams?$expand=Thing,Observations

查詢感測資料時,最常查詢的方式是取每一個感測器的最新一筆感測資料,因此在查詢參數上,加上$orderby=phenomenonTime desc代表針對觀測時間以降冪方式排序,所以最前面的資料是最新的資料,接著利用$top=1來只取一筆資料,因此針對Observation查詢最新一筆資料的方式為Datastreams?$expand=Thing,Observations($orderby=phenomenonTime desc;$top=1)

請注意,由於是以Datastream為查詢主體,因此若該Datastream沒有感測值Observation的話,則不會顯示任何結果,如下:

"Observations": [],

- 範例1 -
說明:由於是以Datastream為查詢主體,查詢每個感測器Datastream是PM2.5的感測值,所以直接用$filter=name eq 'PM2.5'做為查詢篩選條件,此處的name意指Datastream中的name

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams?$expand=Thing,Observations($orderby=phenomenonTime%20desc;$top=1)&$filter=name eq 'PM2.5'&$count=true
- 範例2 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams?$expand=Thing,Observations($orderby=phenomenonTime desc;$top=1)&$filter=name eq 'PM2.5' and Thing/properties/city  eq '新竹市'&$count=true
- 範例3 -

https://sta.colife.org.tw/STA_WaterResource_v2/v1.0/Datastreams?$expand=Thing,Thing/Locations,Observations($orderby=phenomenonTime%20desc;$top=1)&$filter=Thing/properties/authority_type eq '水利署' and substringof('Datastream_Category_type=淹水感測器',description) and substringof('Datastream_Category=淹水深度',description)&$count=true

活用$select精簡顯示結果


由於SensorThings API預設會顯示完整的結果,因此若要精簡顯示 api 的結果,可以利用$select選擇想要顯示的內容。

- 範例1 -
說明:https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things範例中,預設顯示的每一筆Thing資料內容欄位如下:
{
      "description": "智慧城鄉空品微型感測器-7737132222",
      "@iot.id": 1,
      "name": "智慧城鄉空品微型感測器-7737132222",
      "properties": {
        "city": "基隆市",
        "areaType": "鄰近工業區社區",
        "isMobile": "false",
        "township": "七堵區",
        "authority": "行政院環境保護署",
        "isDisplay": "false",
        "isOutdoor": "false",
        "stationID": "7737132222",
        "locationId": "TW020101A0201227",
        "Description": "柏昇 / SAQ-200-002",
        "projectName": "107年度基隆市空氣品質感測物聯網布建計畫",
        "stationName": "智慧城鄉空品微型感測器-7737132222",
        "areaDescription": "六堵科技園區"
},
若只想篩選Thing資料內容欄位中的namestationIDstationNamecity,則可利用以下範例完成,

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things?$select=name, properties/stationID, properties/stationName, properties/city
- 範例2 -
說明:查詢環境部智慧城鄉空品微型感測器所有感測器基本資料以及位置資訊,且只篩選Thing資料內容欄位中的namestationIDstationNamecity以及Locations資料內容欄位中的location裡的coordinates資訊。
請注意,因為查詢主體是Thing,所以篩選Thing的參數要放在Thing後面,也就是Things?$select=name, properties/stationID, properties/stationName, properties/city。 而篩選Locations資料內容欄位的參數則以括號放在後面,如$expand=Locations($select=location/coordinates)

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things?$select=name, properties/stationID, properties/stationName, properties/city&$expand=Locations($select=location/coordinates)
- 範例3 -
說明:查詢環境部智慧城鄉空品微型感測器所有感測器最新一筆PM2.5感測資料,並如範例2加上篩選選項,Observations資料欄位則只篩選phenomenonTime以及result
請注意,由於以Datastream為查詢主體,因此在篩選Location欄位時,需加上Thing的實體名稱,也就是Thing/Locations($select=location/coordinates)

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams?$select=name, description&$expand=Thing($select=name,properties/stationID),Thing/Locations($select=location/coordinates),Observations($orderby=phenomenonTime%20desc;$top=1;$select=phenomenonTime,result)&$filter=name%20eq%20%27PM2.5%27&$count=true

範例程式


Python程式撰寫API介接之參考範例程式。

本範例程式利用Google Colab製作,您需登入Google帳號才能執行範例程式,若未登入仍可複製程式碼下載。

Python套件: requestsjsonurllib3datetime(非必須)。

Google Colab環境準備

- 範例1 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things
- 範例2 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things?$expand=Locations
- 範例3 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Things?$expand=Locations&$filter=properties/city eq '台北市'
- 範例4 -

https://sta.colife.org.tw/STA_WaterResource_v2/v1.0/Things?$expand=Locations&$filter=Thing/properties/authority_type eq '水利署'
- 範例5 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams?$expand=Thing
- 範例6 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams?$expand=Thing&$filter=name eq 'PM2.5'
- 範例7 -

https://sta.colife.org.tw/STA_WaterResource_v2/v1.0/Datastreams?$expand=Thing,Thing/Locations
- 範例8 -

https://sta.colife.org.tw/STA_WaterResource_v2/v1.0/Datastreams?$expand=Thing,Thing/Locations&$filter=Thing/properties/authority_type eq '水利署'
- 範例9 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams?$expand=Thing,Observations($orderby=phenomenonTime%20desc;$top=1)&$filter=name eq 'PM2.5'&$count=true
- 範例10 -

https://sta.colife.org.tw/STA_WaterResource_v2/v1.0/Datastreams?$expand=Thing,Thing/Locations,Observations($orderby=phenomenonTime%20desc;$top=1)&$filter=Thing/properties/authority_type eq '水利署' and substringof('Datastream_Category_type=淹水感測器',description) and substringof('Datastream_Category=淹水深度',description)&$count=true
- 範例11 -

https://sta.colife.org.tw/STA_AirQuality_EPAIoT/v1.0/Datastreams?$select=name, description&$expand=Thing($select=name,properties/stationID),Thing/Locations($select=location/coordinates),Observations($orderby=phenomenonTime%20desc;$top=1;$select=phenomenonTime,result)&$filter=name%20eq%20%27PM2.5%27&$count=true