為了解決谷歌協作平台無法像一般網頁自由嵌入及編輯javascript,css樣式的問題找了很久
最近終於試出來了~幸好新版協作平台可以嵌入html語法
一開始發現台中市公發的空氣盒子位置被G0V政府公開資訊網空氣品質監測數據列表拿掉了??!!
原本用他們的js做資料讀取視覺化的方式就失效了~因為沒有對應的位置
只好開始爬文,後來發現,LASS官網有定期蒐集空氣盒子的數據並可以公開查詢
https://data.lass-net.org/data/last.php?device_id=(你的空氣盒子位址例如 74DA3895CXXX)
可以傳給你一份json檔長得像這樣
{"source": "last by IIS-NRL", "feeds": [{"AirBox2": {"gps_lat": 24.267, "gps_num": 9.0, "name": "XXXXX", "s_t0": 26.62, "area": "taichung", "gps_alt": 2.0, "timestamp": "2019-04-24T01:59:05Z", "app": "AirBox2", "gps_fix": 1.0, "s_d0_hourly_num": 9, "s_d0_hourly": 39.111111111111114, "gps_lon": 120.000, "s_d2": 28.0, "time": "01:59:05", "s_d0": 40.0, "s_d1": 51.0, "date": "2019-04-24", "s_h0": 100.0, "device_id": "74DA389XXXXXA"}}], "version": "2019-04-24T02:08:38Z", "num_of_records": 1, "device_id": "74DA3895C3AA"}
就去查這些代表的意思,再想說要怎麼解析這些數值
還好,查到某小學的xoops網站有做類似的樣式,讀到網頁原始碼後修改一下,就成功了,
特別做個紀錄並分享給需要的網友,不過如果懂得css的高手應該不會有這種初級問題:P
我這邊是沒有去改css div的命名直接照抄:P
感謝台南市進學國小校網Orz
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<script type="text/javascript" src="http://ff.kis.v2.scr.kaspersky-labs.com/42829480-C370-9940-A51E-66D94F38BBC9/main.js" charset="UTF-8"></script>
<style type="text/css">
body{
color:#202020;
background-color: #FFFFFF;
background-image: url('');
background-position: ;
background-repeat: repeat;
background-attachment:scroll;
font-size:11pt;
}
a{
color:#005ca8;
}
a:hover{
color:#a40019;
}
.rightBlock .blockTitle{
font-size:1.5em;
color:#6bbdff ;
background-color: transparent;
border-radius:5px;
-moz-border-radius:5px;
-webkit-border-radius:5px;
-khtml-border-radius:5px;
}
.rightBlock a.block_config{
float:right;
position:relative;
z-index: 1;
}
.rightBlock .blockTitle{
border:none;height:40px;line-height:40px;margin-bottom:10px;
}
</style>
</head>
<body>
<div class="rightBlock">
<h3 class="blockTitle">AirBox</h3>
<div class="blockContent" style="clear:both;">
<div id="edimax" style="text-align:center;">
<a href="http://taqm.epa.gov.tw/taqm/tw/PsiMap.aspx" class="media" target="_blank"
title="http://taqm.epa.gov.tw/taqm/tw/PsiMap.aspx" rel="nofollow"><img id="avatar" src="//www.chps.tn.edu.tw/dokuwiki/_media/ajax-loader.gif"
alt="" width="100" /></a>
<p><span id="status"></span></p>
<p style="font-size:1.5em;">
PM2.5數值:<span id="pm25" style="color:blue;font-weight:bolder;font-size:1.5em;"></span>μg/m³</p>
<canvas id="pm25_guage" style="width:200px;"></canvas><br>
<p>
溫度:<span id="t" style="color:blue;font-weight:bolder;font-size:1.5em;"></span>°C,溼度:
<span id="h" style="color:blue;font-weight:bolder;font-size:1.5em;"></span>%
</p>
最後更新時間<br><span class="" id="time"></span>
</div>
<script type="text/javascript" src="//bernii.github.io/gauge.js/dist/gauge.min.js"></script>
<script type="text/javascript" src="//code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
var opts = {
lines: 12, // The number of lines to draw
angle: 0.15, // The length of each line
lineWidth: 0.44, // The line thickness
pointer:
{
length: 0.9, // The radius of the inner circle
strokeWidth: 0.035, // The rotation offset
color: '#000000' // Fill color
},
limitMax: 'false', // If true, the pointer will not go past the end of the gauge
colorStart: '#6FADCF', // Colors
colorStop: '#8FC0DA', // just experiment with them
strokeColor: '#E0E0E0', // to see which ones work best for you
generateGradient: true,
percentColors: [
[0.0, "#31cf00"],
[0.36, "#31cf00"],
[0.54, "#ff9a00"],
[0.71, "#990000"],
[1.0, "#ce30ff"]
]
};
</script>
<script type="text/javascript">
function update_pm25()
{
var ts = (new Date()).getTime();
var mac = '74DA3895C3AA'; //your device address 空氣盒子LASS對應位址
if (location.hash) {
mac = location.hash;
mac = mac.replace(/#/, '');
}
$.ajax(
{
url: "https://cors.io/?" + "https://pm25.lass-net.org/data/last.php?" + $.param({
device_id: mac,
ts: ts
}),
dataType: "json",
success: function(response)
{
console.log(response);
var j = null;
if (response.feeds[0].AirBox)
{
j = response.feeds[0].AirBox;
}
if (response.feeds[0].AirBox2)
{
j = response.feeds[0].AirBox2;
}
if (j) {
var name = j.device;
var pm25 = parseInt(j.s_d0);
var t = j.s_t0;
var h = j.s_h0;
var time = new Date(j.timestamp);
time = time.toLocaleString();
var baseurl = '//www.chps.tn.edu.tw';
var img = '/dokuwiki/_media/psi:1.png';
var target = document.getElementById(
'pm25_guage'); // your canvas element
var gauge = new Gauge(target).setOptions(
opts); // create sexy gauge!
gauge.maxValue = 100; // set max gauge value
gauge.animationSpeed = 32; // set animation speed (32 is default value)
gauge.set(pm25); // set actual value
if (pm25 < 36)
{ // 低
img = '/dokuwiki/_media/psi:1.png';
status =
'<span style="color:#31cf00">空品良好適合趴趴走</span>';
}
else if (pm25 < 54)
{ // 中
img = '/dokuwiki/_media/psi:2.png';
status =
'<span style="color:#ff9a00">可正常戶外活動,若不適者請戴口罩</span>';
}
else if (pm25 < 71)
{ // 高
img = '/dokuwiki/_media/psi:3.png';
status =
'<span style="color:#990000">不適者減少戶外活動,敏感族群建議戴口罩</span>';
}
else
{ // 非常高
img = '/dokuwiki/_media/psi:4.png';
status =
'<span style="color:#ce30ff">不適者減少戶外活動,敏感族群避免外出</span>';
}
$('#edimax #name').text(name);
$('#edimax #pm25').text(pm25);
$('#edimax #t').text(t);
$('#edimax #h').text(h);
$('#edimax #time').text(time);
$('#edimax #avatar').attr('src', baseurl +
img);
$('#edimax #status').html(status);
}
}
});
}
$(document).ready(function()
{
update_pm25();
setInterval(update_pm25, 1000 * 60 * 5);
});
</script>
</div>
</body>
</html>