利用 Google Trending 搜尋趨勢: https://trends.google.com/trending?geo=TW 取得最近的搜尋趨勢.
上面的連結是取得台灣地區的搜尋趨勢, 而其他地方的如下:
若要取得這個內容, 有沒有 API工具可以利用呢? 看起來 Google 目前沒有這個公開的 API可供利用, 不過這家公司提供了這個服務:
其中的 Google Trends API 可以提供這個結果:
利用 Google Trending 搜尋趨勢: https://trends.google.com/trending?geo=TW 取得最近的搜尋趨勢.
上面的連結是取得台灣地區的搜尋趨勢, 而其他地方的如下:
若要取得這個內容, 有沒有 API工具可以利用呢? 看起來 Google 目前沒有這個公開的 API可供利用, 不過這家公司提供了這個服務:
其中的 Google Trends API 可以提供這個結果:
之前介紹了使用 Cloudflare worker來進行客戶端 IP調查的小程式(https://diary.tw/archives/2182), 最近新增一些功能上來.
{ "geoplugin_request":"12.34.56.78", "geoplugin_status":200, "geoplugin_delay":"1ms", "geoplugin_credit":"Some of the returned data includes GeoLite2 data created by MaxMind, available from <a href='https:\/\/www.maxmind.com'>https:\/\/www.maxmind.com<\/a>.", "geoplugin_city":"New Taipei City", "geoplugin_region":"New Taipei City", "geoplugin_regionCode":"NWT", "geoplugin_regionName":"New Taipei City", "geoplugin_areaCode":"", "geoplugin_dmaCode":"", "geoplugin_countryCode":"TW", "geoplugin_countryName":"Taiwan", "geoplugin_inEU":0, "geoplugin_euVATrate":false, "geoplugin_continentCode":"AS", "geoplugin_continentName":"Asia", "geoplugin_latitude":"24.9466", "geoplugin_longitude":"121.586", "geoplugin_locationAccuracyRadius":"20", "geoplugin_timezone":"Asia\/Taipei", "geoplugin_currencyCode":"TWD", "geoplugin_currencySymbol":"NT$", "geoplugin_currencySymbol_UTF8":"NT$", "geoplugin_currencyConverter":32.0408 }
請大家多加利用 IP查找小功具: https://ip.diary.tw
如何使用 WordPress posts API 來新增文章呢?
可以先參考官方資料:
https://developer.wordpress.org/rest-api/reference/posts/#create-a-post
而 API的位置在: https://{hostname}/wp/v2/posts
而新增一篇文章的方式有了這些資料就可以很快速地建立起來, 另外我們還需要先有一個 application password 來進行驗證才行, 在 WordPress 5.6 版本起, 可以在使用者下建立 application password, 所以可以透過這個方式來進行驗證, 可以參考這裡:
https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/
之前介紹過 Youtube Data API (https://diary.tw/archives/2032), 其中利用 part=snippet 可以取得縮圖的網址, 不過仔細看一下, 目前應該都統一了, 其實只需要 videoId 就可以自行組合出對應的縮圖, 清單如這裡:
https://developers.google.com/youtube/v3/docs/thumbnails
其中預設會出現的有: default, medium, high, standard, maxres 共計5組, 不過再觀察 player用的縮圖, 預設也會有 0, 1, 2, 3 共計 4組, 合起來就會有 9組圖檔.
網址也很單純, 也就是:
https://img.youtube.com/vi/[videoId]/[thumbnail_type].jpg
上次寫了 Youtube Data API (https://diary.tw/archives/2032) 來看看若要加上分類要如何進行.
當然需要先取得 category id 囉 (API中的欄位是 videoCateogryId), 從網路上找到的資料如下:
https://gist.github.com/dgp/1b24bf2961521bd75d6c
由於各國家/地區的 category 也可能有不同, 在台灣的清單如下(由上傳分類項目取得): 電影與動畫、汽車與車輛、音樂、寵物與動物、體育、旅遊與活動、遊戲、人物與網誌、喜劇、娛樂、新聞與政治、DIY 教學與生活風格、教育、科學與科技、非營利組織與社運活動.
對應上面的網址如下:
id | 中文 | 英文 |
---|---|---|
1 | 電影與動畫 | Film & Animation |
2 | 汽車與車輛 | Cars & Vehicles |
10 | 音樂 | Music |
15 | 寵物與動物 | Pets & Animals |
17 | 體育 | Sport |
19 | 旅遊與活動 | Travel & Events |
20 | 遊戲 | Gaming |
22 | 人物與網誌 | People & Blogs |
23 | 喜劇 | Comedy |
24 | 娛樂 | Entertainment |
25 | 新聞與政治 | News & Politics |
26 | DIY 教學與生活風格 | How-to & Style |
27 | 教育 | Education |
28 | 科學與科技 | Science & Technology |
29 | 非營利組織與社運活動 | Non-profits & Activism |
所以若是需要找出教育的排行, 可以利用相同的API, 但多加上videoCategoryId=27:
https://youtube.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&chart=mostPopular®ionCode=US&videoCategoryId=27&key=[YOUR_API_KEY]
這樣即可取得囉.
[2022/2/17 15:30]
實作出國家/地區與分類項呈現方式, 請參考範例:
https://sample.diary.tw/yttrend/detail.php
在找負載測試工具時, 偶然間發現這個工具, k6:
可以使用開源版本自行使用, 或付費使用 cloud方案, 價格如下:
由於是全API/CLI結構, 並提供了大量的範例程式碼, 同時可以滿足壓力測試使用外, 還可以做自動化腳本測試與單元測試等功能, 十分適合開發與上線前驗測的作業與準備.
文件十分完整與容易上手:
大家可以自行測試看看.
繼續閱讀:
之前的一個使用天氣 API 的專案, 因為 Yahoo RSS API 需要驗證, 變成非公開性的 API, 例如:
http://weather.yahooapis.com/forecastrss?u=c&w=2306179
目前會回覆:
Please provide valid credentials. OAuth oauth_problem=”OST_OAUTH_PARAMETER_ABSENT_ERROR”, realm=”yahooapis.com”
而無法順利取得內容, 經查找相關資料, 應該是 3/15 起, yahoo 這組 API 需要做驗證才能使用, 於是找了資料, 可以改用 YQL 的方式來查詢, 相容的查詢指令如下:
其中的 YQL 為:
select * from weather.forecast where u=”c” and woeid=2306179
即可獲得相容的天氣 API 回傳結果.
參考之前文章:
https://diary.tw/archives/1215
Google Static Maps地圖是用在取得地圖資訊時, 最輕量的使用方式, 之前文章: https://diary.tw/archives/1503 使用的 Google Maps Javascript API 需要引入 javascript library 進行程式操作, 在 Google Static Maps 則僅需要用到 img src 的方式取得圖片即可.
雖然只有圖片, 但是功能還是很強大, 而且應用在低階或網路環境不好的地方特別有用, 尤其是和地圖不互動的狀況下, 只是呈現結果的應用情境, 使用 Google Static Maps 是非常方便好用的.
Google Static Maps 資料可以參考官方網站:
https://developers.google.com/maps/documentation/static-maps/intro
記得一樣要先申請 Google API Key 來使用, 這裡用的就是 Google Static Maps API:
取得 API Key 之後, 就可以來應用了. 基本型如下:
https://maps.googleapis.com/maps/api/staticmap?parameters
其中 parameters 就是要繪製地圖的參數了, 以在地圖上某一地點畫一個座標為例,
https://maps.googleapis.com/maps/api/staticmap?center=25.052019,121.513987&zoom=15&size=320×240&language=zh-TW&maptype=roadmap&markers=color:red|label:A|25.052019,121.513987&key=[your api key]
其中 center 為地圖中心點, zoom 為放大層級, 以台北市為例, 15級或16級都OK, 看應用的狀況, size 為產出的圖片尺寸, 而 language 為地圖的語系, maptype 為地圖的格式, roadmap 為街道地圖(另有 satellite, terrain, hybrid), markers 為要標註的位置, 其中 color 為顏色, 用 | (pipe符號)區隔 marker 的參數, label 為單英數字標籤, 最後則是位置, 再來是最重要的 key 就是要輸入你的 api key, 效果如下:
這個地圖不能互動, 不過可以呈現所需要的資訊, 十分方便, 另外若是希望自訂 marker 的 icon, 可以將 markers 參數改為 icon:[url]|[position]的方式即可, 如下:
markers=icon:http://maps.google.com/mapfiles/kml/shapes/schools_maps.png|25.052019,121.513987
以上圖放到地圖中的效果如下:
另外, 若是想要畫出區域圖, 也可以用這個 Google Static Maps, 以之前文章 (https://diary.tw/archives/1503)為例, 座標點如下:
{lat: 25.0416515, lng:121.5437222},
{lat: 25.0333111, lng:121.543529},
{lat: 25.033116700000004, lng:121.5526271},
{lat: 25.036052399999996, lng:121.55267000000002},
{lat: 25.0374716, lng:121.55146840000002},
{lat: 25.038016, lng:121.5513396},
{lat: 25.0415348, lng:121.5474987},
{lat: 25.0416515, lng:121.5437222}
使用的參數就是 path, 語法如下,
path=pathStyles|pathLocation1|pathLocation2|… etc.
其中 pathStyles 有 wight, color, fillcolor, geodesic 4種參數, 其中 color 與 fillcolor 都是用 0xRRGGBBAA 其中 AA 由 00(不透明)到 FF(全透明) 這樣設定即可.
可以參考: https://developers.google.com/maps/documentation/static-maps/intro#Paths
產生的結果如下:
程式碼如下:
https://maps.googleapis.com/maps/api/staticmap?center=25.037789,121.547375&zoom=15&size=360×360&language=zh-TW&maptype=roadmap&path=color:0xFF0000|fillcolor:0xFF000033|25.0416515,121.5437222|25.0333111,121.543529|25.033116700000004,121.5526271|25.036052399999996,121.55267000000002|25.0374716,121.55146840000002|25.038016,121.5513396|25.0415348,121.5474987|25.0416515,121.5437222&key=[your api key]
十分好用, 但要注意不要超過 url 網址的長度上限, 參考舊文: https://diary.tw/archives/455, 在文件內說明也有, 不要超過 2048bytes: https://developers.google.com/maps/documentation/static-maps/intro#url-size-restriction
另外, 這組 API 每日免費上限為 25,000, 若要更多可以付費方式使用.
[2016/4/20 10:15]
補充一下自訂 marker 的部分, 必須是用 http 而非 https 的方式, 否則將無法正常輸出該自訂 marker, 參考資料:
http://stackoverflow.com/questions/12324996/custom-marker-icon-not-showing-google-static-maps-v2
有個需求是要檢查某地址是否在某特定區域內, 於是思考使用 Google Maps API 來實做, 判斷的部分可以不需要 Google Maps 顯示, 但在測試或開發時, 若有可視的地圖會比較容易理解狀況, 也比較明白指定區域與指定位置的關係, 以下分為幾個部分來進行.
首先需要能繪製指定區域, 這個和程式沒有直接關係, 但透過 Google 的 MyMaps 比較好進行:
進入後, 建立新地圖, 出現 Google Maps 之後, 使用”畫一條線”的”新增內容或形狀”工具來進行區域的繪製:
一點一點地把區域點好後, 點回起點, 就可以產生一個封閉區域了, 再給予命名, 如以下範例:
這個部分可以隨時再進行區域的調整, 到自己滿意為止, 之後我們需要的其實是這個區域的多邊形座標點, 如何取得呢? 點擊新增圖層邊的三個點, 出現選單後, 選匯出成 KML:
就可以取得對應的 KML 檔案了, 打開 KML 檔中, 最重要的是找到座標點, 內容會是這樣的文字:
<coordinates>121.5437222,25.0416515,0.0 …… </coordinates>
這些座標點就是用來做這個指定區域的座標位置了, 接下來才真正要準備實作程式.
寫了一個小程式, 把這些座標點輸出成一串之後 Google Maps API Geometry 會用到的格式:
http://sample.diary.tw/36/tools.htm
我們將上面的 <coordinates> 中的字串, 填入上面小程式的 textarea 之後, 按下”產生區域多邊形座標”, 就可以得到像是這樣的內容:
{lat: 25.0416515, lng:121.5437222}, {lat: 25.0333111, lng:121.543529}, .....
先準備好到這裡, 之後參考這個部分可以進行多邊形繪製:
https://developers.google.com/maps/documentation/javascript/examples/polygon-simple
可以看到其中會需要的陣列就由上面小程式產生的內容填入即可, 記得, 在參考 google maps 的範例程式時, 在 initMap 中, 有個 center 參數和 zoom 參數, 要填入實際上你地圖的位置附近, 不然不會出現在地圖上, 如 google maps 範例內, 是百幕達三角洲地帶, 而且 zoom 是 5, 若是以台北市來看, 大約 zomm 是在 15或16 左右.
如範例: http://sample.diary.tw/36/map1.htm
主要程式碼為:
map = new google.maps.Map(document.getElementById('map'), { center: {lat: 25.037828, lng: 121.547204}, zoom: 16, }); var testAreaCoords = [ {lat: 25.0416515, lng:121.5437222}, {lat: 25.0333111, lng:121.543529}, {lat: 25.033116700000004, lng:121.5526271}, {lat: 25.036052399999996, lng:121.55267000000002}, {lat: 25.0374716, lng:121.55146840000002}, {lat: 25.038016, lng:121.5513396}, {lat: 25.0415348, lng:121.5474987}, {lat: 25.0416515, lng:121.5437222}, ]; testArea = new google.maps.Polygon({ paths: testAreaCoords, strokeColor: '#FF0000', strokeOpacity: 0.8, strokeWeight: 3, fillColor: '#FF0000', fillOpacity: 0.05 }); testArea.setMap(map);
接下來就是由指定的地址查找座標, 這個部分會用到 Google Maps API 中的 geocoder, 只需要將地址傳入, 就可以取得對應的座標了, 參考資料:
https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingStatusCodes
程式碼不多, 參考範例:
http://sample.diary.tw/36/map2.htm
輸入地址就可以取得座標(經緯度)
主要程式碼如下(注意, geocoder 是用 callback 方式回傳):
function initMap() { geocoder = new google.maps.Geocoder(); } function codeAddress() { var address = document.getElementById("address").value; geocoder.geocode({ 'address': address }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { alert("lat=" + results[0].geometry.location.lat() + ",lng=" + results[0].geometry.location.lng()); } else { alert("Geocode was not successful for the following reason: " + status); } }); }
最後就是利用一個很重要的判斷式來判斷某地址(已取得座標)是否在指定區域內, containsLocation() 參考:
https://developers.google.com/maps/documentation/javascript/examples/poly-containsLocation
上面的範例是用點擊地圖的方式, 看點擊的位置是否在百幕達三角洲內, 是的話就是紅色 marker, 不是的話, 就用綠色 marker.
來改寫一下程式碼, 就可以達成判斷指定的地址是否在指定的區域內了, 如範例:
http://sample.diary.tw/36/map3.htm
主要程式碼:
// check if position in polygon if(google.maps.geometry.poly.containsLocation(results[0].geometry.location, testArea)){ alert("在指定區域內"); }else{ alert("不在指定區域內"); }
總結一下:
PS. 記得要先到 https://console.developers.google.com/ 建立一個可以使用 Google Maps API 的應用程式, 並建立對應的 browser key 放到上面的程式碼中, 以順利執行你的 web 應用程式.