ETH官方钱包

創作內容

0 GP

針對巴哈和噗浪的Python爬蟲─三、─(三)副程式─1.時間之取得

作者:SystemCall│2023-07-29 23:19:12│巴幣:0│人氣:230
針對巴哈姆特和噗浪的 Python 爬蟲
Python crawler for Gamer and Plurk
Player_SystemCall

2023 7 4
我把整個製作流程做成一份 PDF 文件囉,
不過除了程式碼和參考資料的連結可以複製外,
其他都不可以複製就是了。
註1:公布了把程式碼從純文本轉換成巴哈 BBcode 的線上工具的原文連結
註2:將上述線上工具套上了 CSS 的原文連結

三、Python 程式

(三)副程式

1. 時間之取得

    • 程式碼
import pytz
import ntplib
from datetime import datetime, timedelta

def TWtime(): #獲取臺灣時間
    timeserver = ["ntp.ntu.edu.tw", "tw.pool.ntp.org", "time.stdtime.gov.tw", "tock.stdtime.gov.tw", "watch.stdtime.gov.tw", "clock.stdtime.gov.tw", "tick.stdtime.gov.tw", "118.163.81.61", "time.windows.com", "time.google.com"] #時間伺服器網址串列
    server_number = 0 #時間伺服器網址編號(0~9)
    status = 0 #設定狀態碼為0
    try:
        while server_number < 10 and status != 1: #在透過NTP獲取時間超過10次或狀態碼等於1時,結束迴圈
            NTPClient = ntplib.NTPClient() #啟用NTP客戶端
            try:
                NTPServer = NTPClient.request(timeserver[server_number]) #連結NTP伺服器
                NTPtime = NTPServer.tx_time #取得今天現在時間戳
                Taipeitime = datetime.fromtimestamp(NTPtime, pytz.timezone("Asia/Taipei")) #取得今天現在的時間,時區設定亞洲臺北
                ad_year_today = str(Taipeitime.year)+"年" #今天現在臺北時區的西元紀年
                mg_year_today = str(int(Taipeitime.year)-1911)+"年" #今天現在臺北時區的民國紀年
                date_today = str(Taipeitime.month)+"月"+str(Taipeitime.day)+"日" #今天現在臺北時區的西元日期
                ad_year_yesterday = str((Taipeitime+timedelta(days=-1)).year)+"年" #昨天臺北時區的西元紀年
                mg_year_yesterday = str((Taipeitime+timedelta(days=-1)).year-1911)+"年" #昨天臺北時區的民國紀年
                date_yesterday = str((Taipeitime+timedelta(days=-1)).month)+"月"+str((Taipeitime+timedelta(days=-1)).day)+"日" #昨天臺北時區的西元日期
                status = 1 #設定狀態碼為1
            except BaseException: #如果上面執行失敗,執行此區
                server_number = server_number+1 #時間伺服器網址編號加1
        timeserver_link = timeserver[server_number] #時間伺服器網址
    except BaseException: #如果用NTP網址取得時間失敗,執行此區,原理未明
        Taipeitime = datetime.now(pytz.timezone("Asia/Taipei")) #取得今天現在的時間,時區設定亞洲臺北
        ad_year_today = str(Taipeitime.year)+"年" #今天現在臺北時區的西元紀年
        mg_year_today = str(int(Taipeitime.year)-1911)+"年" #今天現在臺北時區的民國紀年
        date_today = str(Taipeitime.month)+"月"+str(Taipeitime.day)+"日" #今天現在臺北時區的西元日期
        ad_year_yesterday = str((Taipeitime+timedelta(days=-1)).year)+"年" #昨天臺北時區的西元紀年
        mg_year_yesterday = str((Taipeitime+timedelta(days=-1)).year-1911)+"年" #昨天臺北時區的民國紀年
        date_yesterday = str((Taipeitime+timedelta(days=-1)).month)+"月"+str((Taipeitime+timedelta(days=-1)).day)+"日" #昨天臺北時區的西元日期
        timeserver_link = "無" #設定時間伺服器網址為無
        server_number = "無" #時間伺服器網址編號為無
    return Taipeitime, ad_year_today, mg_year_today, date_today, ad_year_yesterday, mg_year_yesterday, date_yesterday , timeserver_link, server_number #回傳一堆時間
    • 說明
  這段 TWtime 副程式的組成有 3 行引入和 32 行的主文,執行一次可以取得輸出臺北時區在現在今天的臺北時間、現在今天的西元年份、現在今天的民國年分、現在今天的日期、昨天的西元年份、昨天的民國年分、昨天的日期、取得現在今天時間的網址和這個網址是在 timeserver 串列的第幾個。這些程式碼執行起來太長太久且具有高度的功能性,所以需要和適合封裝成副程式。
  這段副程式使用 2 try-except 語法來實現,過程為用 timeserver 串列裡的其中 1 個網址對外連線來取得時間戳,如果不行,再從裝置本身取得年份日期時間。timeserver 串列一共有 10 個連結可以來取得時間戳,第 1 個為臺大網際網路時間伺服器子網域(源於 ntu.edu.tw)、第 2 個為 NTP pool 專案的時間伺服器子網域(源於 pool.ntp.org)、第 3 7 個是經濟部委由中華電信研究所時間與頻率國家標準實驗室所建立的國家標準時間子網域(源於 stdtime.gov.tw)、第 8 個是第 3 個連結的 IP 位址(第 4 7 個也有各自的 IP,依序為 211.22.103.157118.163.81.63211.22.103.158 118.163.81.62)、第 9 個為微軟的時間伺服器子網域(源於 windows.com)和第 10 個為 Google 的時間伺服器(源於 google.com)。
  NTP 的全文為 Network Time Protocol,中文為「網路時間協定」,原理詳見國家時間與頻率標準實驗室/網路校準服務,不多加敘述(也因為我看不懂怎麼講,所以略過),以目前來說,眾多行業都有時間準確這一需求,所以都會定時連上 NTP 伺服器取得時間戳校準,那些行業如社群軟體、工業自動化、航空和數據追蹤(區間測速、網路小編流量監測)等,所以不怕找不到,接下來舉一些能用的伺服器連結,關於國家標準時間的子網域和其說明需要看這個從國家實驗室時間官網找不到門進去的文字檔案 https://www.stdtime.gov.tw/chinese/bulletin/NTP%20promo.txt,前者的 IP 看這篇空山松子落的常用的 NTP 時間伺服器所述,最後列一下可用的 NTP 伺服器網址:NTP pool 專案的 tw.pool.ntp.org,國立臺灣大學的 ntp.ntu.edu.twGoogle time.google.com,微軟 time.windows.com,蘋果亞洲的 time.asia.apple.com,臉書的 time1(數字為 1~5).facebook.com

引用網址:http://www.jamesdambrosio.com/TrackBack.php?sn=5764839
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:爬蟲程式|巴哈姆特|crawler|Gamer|Plurk|副程式|subprogram|時間|NTP

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★player0309 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:針對巴哈和噗浪的Pyth... 後一篇:針對巴哈和噗浪的Pyth...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】