2015年10月3日 星期六

Python 從網路上取得時間

做 client 端的應用時, 想要從網路上取得時間
NTP(網路時間協議) 的取得比較複雜
基於沒有要使用很精準的時間,於是把目標放到找一個有顯示時間的網頁就好了
且網頁內容要簡單,以免 client 端下載時系統資源不敷使用

在google 上找到一個 台灣時間  網頁
用 chrome 的開發人員工具
看到在 id = local_time 的後面有包含時間,這段在紅框標示處
於是把網址(底下橘色畫線)處改為紅框處的內容
http://time.artjoey.com/js/local.htm
到這邊,需要下載的網頁內容已經減少許多
使用 python 抓取網頁
發現在 id = local_time 後面的資料內容是 Clock...
這不是我們要的東西,於是再找網頁內容
在 <head> 中有一段
將紅框中的網址取代上面橙色底線,得到 http://time.artjoey.com/js/basetime.php 

至此,可以看到一個很熟悉的數值 1443....
才怪
此例中的 baseTime 為 從1970/01/01 開始到現在的毫秒數
所以把數值取出來後,先除 1000 換算成秒

以下是一小段 python 程式,演示取出當日時間

# 使用網路資源
import requests
import urllib

url = "http://time.artjoey.com/js/basetime.php"
res = requests.get(url)
# res.content type is <byte>
basetime = res.content.decode('ascii')
# var baseTime=1443757229000;
ms = int(basetime.split('=')[1][:-1])   # 用'='分隔, 取出第二組字串的 開頭到倒數第二字元 (最後字元是分號)
twsec = ms / 1000 + (60 * 60 * 8) # 台灣是 GMT + 8, 要把偏差的秒數加上去
daysec = twsec % (60 * 60 * 24)   # 僅取出當日開始到目前的秒數
HH = int(daysec / 60 / 60)
MM = int(daysec / 60) % 60
SS = int(daysec % 60)
print(HH,MM,SS)



沒有留言:

張貼留言