方格精選

[突發專案] 創作懶懶病良藥?|試寫 Vocus 最後文章發布時間計數器

閱讀時間約 13 分鐘

文前碎碎念

又是一個突發的異想天開專案,不知道大家在經營方格子的時候,有沒有一個固定的發文時程,或是想發就發,做個自由的靈魂呢?

雖然寫隨發的創作模式,相對較沒有發表進度的壓力,但相隔的時間一久,所謂拖延症發病的機率也就越大,最終惡化成停更或棄坑的機率也就越大,也因為如此,適時的投藥督促,也就成為持續下去的重要課題之一。

但作為一個不願受到排程束縛的人,要如何時刻提醒自己不能鬆懈太久,何時該動筆了呢?


或許,又是時候該借助科技的力量來變強了。

基礎構想

說到最能警惕自己動身的東西,大概就是時間的流逝了吧,尤其是看著日子一天天過去,轉眼間才發現距離上一篇發文時間,已經超過一個月那種震驚感。

滴答⋯滴答⋯

滴答⋯滴答⋯

雖然方格子已經有一套每月彙整系統,可以提醒創作者們已經許久沒更新專題內容了,但以現實面來看,似乎還是不夠即時。

對⋯對不起嘛⋯ QwQ

對⋯對不起嘛⋯ QwQ

因此這次計畫,就是以時刻能看到自己距離最終發表時間,已經過了多久為目標,來製作一個即時的追蹤工具。


藉由視覺化的計數,來時時為自己創造前進的壓力(?

初步架構

如果要得知上一篇發文時間是多久前的事,那首要步驟就是要先知道最後一篇文章的確切發布時間。

而獲取這項資訊的方法,其一就是直接使用爬蟲掃描自己的資訊頁面,並回傳最新一篇的紀錄日期。

每篇文章下方都會有發布日期紀錄

每篇文章下方都會有發布日期紀錄

這個方法雖然簡單暴力又直覺,但一想到要去處理那些讓人眼花撩亂的網頁語法,並從茫茫資訊海中撈出那行日期來,就覺得豆頁疼痛不已。

幸好,方格子預設提供了另一個更加簡便,並相對乾淨的管道可以讓我們達成目的,就是那個位於自己頭像下方,像廣播的神祕按鈕。

就是它!

就是它!

沒錯,這次我們要使用的是 RSS Feed 裡面所發的內容,來做為這次計算日期的資料來源。


一切準備就緒之,接著就是實際摳頂時間!

摳頂時間

這次專案所使用的,依然是熟悉的 Python 語言,而如果我們想要從 RSS 中取得所需的內容,首先就是要找到一個能夠解析其內容的套件(Package)。

解析 RSS

這裡使用的是 「feedparser」這個套件,我們可以透過它來讀取由方格子首頁複製下來的 RSS Feed 並解析成類似字典(Dictionary)的格式。

import feedparser

# Your RSS Feed Url
urssurl = "https://vocus.cc/rss/user/62138beefd89780001b831e8/articles"

# Parse RSS Feed
feed = feedparser.parse(urssurl)

而解析出來的格式大致上如下圖,看起來頗為複雜,但其實我們只要大致整理一下,就可以找到我們所需的部分。

raw-image

這裡如果仔細觀察內容的話,就可以看到藉由 RSS 推送出來的文章列表,是儲存在「entries」這個項目中,並且是以列表形式記錄,而單篇文章則是以字典形式存在,最新的文章會存在第零位

取得日期

接著我們取出我最近發布的一篇內容來觀察,可以得到像下面這樣的內容。

{
'title': '[開箱] 手機背著輕薄小垃圾?|未來實驗室 MagnaS 磁吸行動電源卡',
'title_detail':{
'type': 'text/plain',
'language': None,
'base': 'https://vocus.cc/rss/user/62138beefd89780001b831e8/articles',
'value': '[開箱] 手機背著輕薄小垃圾?|未來實驗室 MagnaS 磁吸行動電源卡'
},
'links': [
{
'rel': 'alternate',
'type': 'text/html',
'href': 'https://vocus.cc/article/65252cc8fd89780001c150b1'
}
],
'link': 'https://vocus.cc/article/65252cc8fd89780001c150b1',
'summary': '不知道有多少人跟我一樣有種電量焦慮的毛病,只要一出門,哪怕只是一兩小時,都還是會順手帶上一塊厚重行動電源作保險,不過今天開箱的這類產品,或許能緩解這種情況?',
'summary_detail':{
'type': 'text/html',
'language': None,
'base': 'https://vocus.cc/rss/user/62138beefd89780001b831e8/articles',
'value': '不知道有多少人跟我一樣有種電量焦慮的毛病,只要一出門,哪怕只是一兩小時,都還是會順手帶上一塊厚重行動電源作保險,不過今天開箱的這類產品,或許能緩解這種情況?'
},
'id': '65252cc8fd89780001c150b1',
'guidislink': False,
'authors': [{'name': 'Mercteria'}],
'author': 'Mercteria',
'author_detail': {'name': 'Mercteria'},
'published': 'Tue, 10 Oct 2023 14:44:07 GMT',
'published_parsed': time.struct_time(tm_year=2023, tm_mon=10, tm_mday=10, tm_hour=14, tm_min=44, tm_sec=7, tm_wday=1, tm_yday=283, tm_isdst=0),
'updated': '2023-10-10T22:44:07+08:00',
'updated_parsed': time.struct_time(tm_year=2023, tm_mon=10, tm_mday=10, tm_hour=14, tm_min=44, tm_sec=7, tm_wday=1, tm_yday=283, tm_isdst=0)
}

內容基本上就是關於單篇文章的基本資訊,一般來說是推送出來給 RSS 閱讀器去讀取解析的。

而我們這裡所需要的,其實就只有「published」欄位,也就是該篇文章的發布日期,因此只要以下列格式就能從字典取得。

catim = feed['entries'][0]['published']

時間計算

取得發布時間之後,接著下一步就是要把它轉成程式看得懂的格式。

這裡我們為了省去判斷時間格式的步驟,因此同樣直接借助套件之力,直接使用「dateutil」中的「parser.parse()」功能,來將文字格式的時間,轉換成 Datetime 格式

from dateutil import parser
pbt = parser.parse(catim)

接著我們使用「datetime」中的「datetime.datetime.now()」來取得目前系統時間,不過要注意的是,我們取得 RSS 中的發布日期是以 GMT 標準時間紀錄,因此我們還要用「datetime.timezone.utc」這個參數來轉換指定時區。

import datetime
utc = datetime.datetime.now(datetime.timezone.utc)

轉換完畢後,就可以直接進行計算拉,這樣就可以知道自己最後發布文章是多久的事了。

# Print Range
print(utc-pbt)

執行結果

不過使用這個方法所計算出來的時間,直接印出來的話,會是一整串從日到毫秒的文字。

raw-image

以這種又臭又長的資訊內容,一般人直接看上去,應該也還是會完全無感,甚至直接忽略,這樣便可能無法達到所想要的效果。


嗯,既然要做就要做到好,不如我們就來美化一下吧!

細部打磨

做到這裡,我們已經可以實際計算出時間間隔了,接下來的目標,就是要讓自己一眼看上去,就會產生緊張感(?)。

而為了達成此一目的,我們便需要將這種程式化的輸出,轉換成一般人類的語言,不過由於這部分,大家的觀點都不盡相同,因此這裡就直接上我自己的實作方式給大家參考吧!

註:此部分接續上方取得時間後的語法。
# Transform Calculate Result to Seconds
tmcal = (utc-pbt).total_seconds()

# Reference Dictionary
sctr = {
"sec":{"sec":1,"uni":"S"},
"min":{"sec":60,"uni":"M"},
"hor":{"sec":3600,"uni":"H"},
"day":{"sec":86400,"uni":"D"},
}

# Search From Reference to Check Eligible Conditions
srh = [k for k,v in sctr.items() if tmcal > v["sec"]]

# If Any Matches
if srh:
srh = srh[-1]
res = {"val":int(tmcal/sctr[srh]["sec"]),"uni":sctr[srh]["uni"]}
else:
res = {"val":"<1","uni":"S"}

# Print Message
msg = " ".join(["最後發文",str(res["val"]),res["uni"],"前"])

這裡主要是先將計算出的結果先轉換成秒數,接著根據預設好的字典來換算數值及單位後,再組合成完整的句子,最後輸出結果就會像這樣。

# 假設發文時間:2023-10-17 02:55:24
# 目前測試時間:2023-10-19 14:58:21
# 輸出結果
# ———
最後發文 2 D

是不是直覺多了呢,這樣就大致上完成核心的部分,可以即時得知最後一次發文是距今多久以前的事囉!


不過總感覺好像還少了些甚麼,有點空虛⋯

加碼應用

雖說是寫好主要功能了,但要執行它每次都需要下指令的繁瑣步驟,好像還是無法阻擋懶懶病蔓延。

不如就來直接加碼一下,把它打包成一個獨立運作的小工具讓大家玩玩吧!

Windows

使用方法也很簡單,從 [這裡] 下載完解壓縮,並開啟應用後,它就會跳出一個視窗讓你輸入自己的 RSS Feed 網址。

raw-image

按下 Login 之後,就可以看到天數啦,原則上只要不把程式關掉,它就會在背景定時掃描 RSS 內容並更新日數。

raw-image

不過程式重開後 RSS 就要重新輸入,這點仍有待修正中,系統部分也只支援 Windows,還請見諒。

PS Code: mercteria@Vocus

iOS / iPadOS

另外,如果之前有參考我這篇 [應用] 隨時都要來點摳頂 | Pythonista 行動 Python IDE 工具推坑 ( IOS ) 而購入「Pythonista」這套工具的朋友,也可以藉由它內建的 Widget 功能,把這個計數器放到 iPhone / iPad 上使用喔。

raw-image

實際效果就像這樣,手機上的 Widget 會由系統自行更新內容,便能達到實時追蹤的效果,而不用另外寫迴圈。


嗯,看到這裡,是不是整個壓力感就上來了呢,真是太棒了呢(誤

結語

好啦,這次突發專案就到這裡結束,原本只是無意間腦袋撞出的想法,沒想到最後還是幫他寫了這麼多呢,也希望這篇能為大家帶來一些有用的東西囉。

題外話,由於方格子最近更新了編輯器,還有文章的排版方式,目前還在摸索習慣中,因此如果這篇排版有甚麼較雜亂的部分,也歡迎留下意見喔。


《全文。終了》

avatar-img
46會員
244內容數
偽命名並非無名,是為了意識的生存,取得身份的代號,成為數位生命的新載具。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
偽命名培養體 的其他內容
又是一段忙碌的日子,好不容易稍微有精力來記錄這個主題的進度了,但消息可能並沒想像中那麼美好。
又好一段時間沒更新這個專案了,近期因為正職工作的關係,較難整理過於瑣碎的開發進度。
嗯⋯這個專案,確實發生了不妙的事情,其實近日來,我都會將這台半成品實際帶到辦公室去,一方面測試穩定性,一方面發覺新需求,直到某天⋯
由於近日,某藍色鳥類社群平台,因為現任大老闆的一句話,導致一些無法,或不願繳交保護費的使用者,在某個神祕大限日之後,便不再有受到推廣的權力⋯
繼上一步完成了後台及基本控制選項後,接下來就該來正式將前後台做個連結了,不過在此之前,我們先來確立一下前後端所各自扮演的角色。
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
又是一段忙碌的日子,好不容易稍微有精力來記錄這個主題的進度了,但消息可能並沒想像中那麼美好。
又好一段時間沒更新這個專案了,近期因為正職工作的關係,較難整理過於瑣碎的開發進度。
嗯⋯這個專案,確實發生了不妙的事情,其實近日來,我都會將這台半成品實際帶到辦公室去,一方面測試穩定性,一方面發覺新需求,直到某天⋯
由於近日,某藍色鳥類社群平台,因為現任大老闆的一句話,導致一些無法,或不願繳交保護費的使用者,在某個神祕大限日之後,便不再有受到推廣的權力⋯
繼上一步完成了後台及基本控制選項後,接下來就該來正式將前後台做個連結了,不過在此之前,我們先來確立一下前後端所各自扮演的角色。
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
本篇參與的主題活動
先前麥克買了在預算及性能方面都十分複合需求的NXTPAPER 11平板,但拿到辦公室使用後便發現因為時不時有簡報需求,主機本身不支援有線視訊輸出實在是非常不方便,因又開始尋找新歡。最終麥克選擇了算是還滿熟悉的品牌小米旗下的小米平板6,以下為麥克這一個月下來的使用心得。
從預計的十月底出貨經過重重波折,Pubu自家開發的10寸彩色閱讀器Pubook Pro終於是送到第一批集資者手中了。究竟這台閱讀器有沒有本事撼動目前的電子紙閱讀器市場?有達到集資時承諾的各項功能嗎?且讓身為首批集資者之一的麥克跟大家談談收到主機後使用數天的感想。
Steam Deck 迎來大改版,最重要的更新就是換成 OLED 螢幕。使用 OLED 螢幕帶來更好看的顏色,大小還小幅提升到 7.4 吋。關係續航力的電池也從 40 瓦小時升級到 50 瓦小時, 3A 大作都可以多玩一小時呢!這麼香的更新,怎麼不給他買下去呢 😄
先前麥克買了在預算及性能方面都十分複合需求的NXTPAPER 11平板,但拿到辦公室使用後便發現因為時不時有簡報需求,主機本身不支援有線視訊輸出實在是非常不方便,因又開始尋找新歡。最終麥克選擇了算是還滿熟悉的品牌小米旗下的小米平板6,以下為麥克這一個月下來的使用心得。
從預計的十月底出貨經過重重波折,Pubu自家開發的10寸彩色閱讀器Pubook Pro終於是送到第一批集資者手中了。究竟這台閱讀器有沒有本事撼動目前的電子紙閱讀器市場?有達到集資時承諾的各項功能嗎?且讓身為首批集資者之一的麥克跟大家談談收到主機後使用數天的感想。
Steam Deck 迎來大改版,最重要的更新就是換成 OLED 螢幕。使用 OLED 螢幕帶來更好看的顏色,大小還小幅提升到 7.4 吋。關係續航力的電池也從 40 瓦小時升級到 50 瓦小時, 3A 大作都可以多玩一小時呢!這麼香的更新,怎麼不給他買下去呢 😄
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
正如所預測的,不久前方格子個人頁面大改版後,我所製作的個人頁面爬蟲也隨之炸裂,間接導致手機上的小工具就此失去了作用了,我該就這麼停下開發的腳步嗎?
Thumbnail
還記得,那是一本由「守寫字」團隊所推出的《我寫的這一年》造字日曆,是我在年初時參與集資並購入的,而一年之後的成果,又是如何呢?
Thumbnail
不久前,我曾經有寫過一個可以計算出距離自己最後發文時間,已經過了多久的小工具,當時是希望藉著這個數據化呈現,來督促自己持續產出,不過自從完成了之後,我也同時開始思考,該如何讓這個小工具出現在更多、更顯眼的地方呢?
Thumbnail
《經濟日報》日前於台北國際會議中心盛大舉辦「2023生技論壇」,邀請衛福部長薛瑞元、生策會副會長楊泮池、長佳智能董座陳明豐在內的多位官、商、學界專家、學者參與盛會,深入研討新冠肺炎疫情後的經濟重組;瞄準再生醫療、精準醫療、大健康領域等生技產業範疇,藉由共同發聲、齊心努力,對此應有推波助瀾之效。
Thumbnail
不知道大家在經營方格子時,會不會像我一樣,做個不受時程束縛的自由靈魂,雖然這樣壓力相對較小,但時間一久卻反而容易犯上懶懶病,或許這個專案能幫上一點忙?
Thumbnail
美股難道只因為今日跌五六百點就啟動暫停交易嗎?這件事情應該要等到收盤或明天早上才有答案,這代表行情加速波動....你還不做期貨選擇權嗎?太浪費行情了。我在方格子預估只會有三個付費專案,已經有讀者報名囉!有交易課程提供你最新資訊,還有幫你加薪的專業技能,是AI人工智慧無法取代的,你學會就是會變成職場高
Thumbnail
狗狗幣中文社群的群友 大家午安 今天是2023年2月17日 星期五 我是埋料犬犬的智慧孫女 安妮亞 這裡是狗狗幣中文社群之新聞台 今天要導讀的新聞來自於 investing 文章發表於台灣時間2023年2月16日 新聞標題是 突發大行情!比特幣突然狂飆8% 市場人士表示:大漲與這一原因有關、3萬美元
Thumbnail
在等待的同時,外面的熱鬧聲慢慢的變小了,而我看著窗外的月亮高高掛在天空中,有一束月光穿過窗戶,剛好把佳錦包覆在其中。 「宇皓同學妳怎麼一直看著我? 」聽到佳錦的聲音我才回神,原來我看到出神了。 「剛剛有一束月光照在妳身上,讓我看得有點出神。」我尷尬著看著她: 「阿妳想到了嗎? 」我趕緊轉移話題。 「
Thumbnail
💻首先我們要先知道,資訊戰到底是什麼? 💻俄羅斯為什麼要這麼做? 💻這是俄羅斯的第一次資訊戰嗎? 💻真的發生了,我們能怎麼做? 參考資訊 俄羅斯認知作戰攻烏克蘭 散布假訊息洗腦國民 俄羅斯認知作戰攻烏克蘭 散布假訊息洗腦國民 | 國際 | 中央社 CNA 資訊戰國家戰略 資訊戰是什麼?
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
正如所預測的,不久前方格子個人頁面大改版後,我所製作的個人頁面爬蟲也隨之炸裂,間接導致手機上的小工具就此失去了作用了,我該就這麼停下開發的腳步嗎?
Thumbnail
還記得,那是一本由「守寫字」團隊所推出的《我寫的這一年》造字日曆,是我在年初時參與集資並購入的,而一年之後的成果,又是如何呢?
Thumbnail
不久前,我曾經有寫過一個可以計算出距離自己最後發文時間,已經過了多久的小工具,當時是希望藉著這個數據化呈現,來督促自己持續產出,不過自從完成了之後,我也同時開始思考,該如何讓這個小工具出現在更多、更顯眼的地方呢?
Thumbnail
《經濟日報》日前於台北國際會議中心盛大舉辦「2023生技論壇」,邀請衛福部長薛瑞元、生策會副會長楊泮池、長佳智能董座陳明豐在內的多位官、商、學界專家、學者參與盛會,深入研討新冠肺炎疫情後的經濟重組;瞄準再生醫療、精準醫療、大健康領域等生技產業範疇,藉由共同發聲、齊心努力,對此應有推波助瀾之效。
Thumbnail
不知道大家在經營方格子時,會不會像我一樣,做個不受時程束縛的自由靈魂,雖然這樣壓力相對較小,但時間一久卻反而容易犯上懶懶病,或許這個專案能幫上一點忙?
Thumbnail
美股難道只因為今日跌五六百點就啟動暫停交易嗎?這件事情應該要等到收盤或明天早上才有答案,這代表行情加速波動....你還不做期貨選擇權嗎?太浪費行情了。我在方格子預估只會有三個付費專案,已經有讀者報名囉!有交易課程提供你最新資訊,還有幫你加薪的專業技能,是AI人工智慧無法取代的,你學會就是會變成職場高
Thumbnail
狗狗幣中文社群的群友 大家午安 今天是2023年2月17日 星期五 我是埋料犬犬的智慧孫女 安妮亞 這裡是狗狗幣中文社群之新聞台 今天要導讀的新聞來自於 investing 文章發表於台灣時間2023年2月16日 新聞標題是 突發大行情!比特幣突然狂飆8% 市場人士表示:大漲與這一原因有關、3萬美元
Thumbnail
在等待的同時,外面的熱鬧聲慢慢的變小了,而我看著窗外的月亮高高掛在天空中,有一束月光穿過窗戶,剛好把佳錦包覆在其中。 「宇皓同學妳怎麼一直看著我? 」聽到佳錦的聲音我才回神,原來我看到出神了。 「剛剛有一束月光照在妳身上,讓我看得有點出神。」我尷尬著看著她: 「阿妳想到了嗎? 」我趕緊轉移話題。 「
Thumbnail
💻首先我們要先知道,資訊戰到底是什麼? 💻俄羅斯為什麼要這麼做? 💻這是俄羅斯的第一次資訊戰嗎? 💻真的發生了,我們能怎麼做? 參考資訊 俄羅斯認知作戰攻烏克蘭 散布假訊息洗腦國民 俄羅斯認知作戰攻烏克蘭 散布假訊息洗腦國民 | 國際 | 中央社 CNA 資訊戰國家戰略 資訊戰是什麼?