方格精選

[突發專案] 創作懶懶病良藥?|試寫 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
偽命名培養體
60會員
376內容數
偽命名並非無名,是為了意識的生存,取得身份的代號,成為數位生命的新載具。
偽命名培養體的其他內容
2024/11/25
而故事是發生在某次我帶著這個電子紙悠遊卡買午餐的時候,在我一個不小心手滑下,他就這麼應聲落地彈開成兩半,好在基本功能沒傷到,卻因此開啟我探索它內部的好奇心。
Thumbnail
2024/11/25
而故事是發生在某次我帶著這個電子紙悠遊卡買午餐的時候,在我一個不小心手滑下,他就這麼應聲落地彈開成兩半,好在基本功能沒傷到,卻因此開啟我探索它內部的好奇心。
Thumbnail
2024/02/02
正如所預測的,不久前方格子個人頁面大改版後,我所製作的個人頁面爬蟲也隨之炸裂,間接導致手機上的小工具就此失去了作用了,我該就這麼停下開發的腳步嗎?
Thumbnail
2024/02/02
正如所預測的,不久前方格子個人頁面大改版後,我所製作的個人頁面爬蟲也隨之炸裂,間接導致手機上的小工具就此失去了作用了,我該就這麼停下開發的腳步嗎?
Thumbnail
2023/12/31
還記得,那是一本由「守寫字」團隊所推出的《我寫的這一年》造字日曆,是我在年初時參與集資並購入的,而一年之後的成果,又是如何呢?
Thumbnail
2023/12/31
還記得,那是一本由「守寫字」團隊所推出的《我寫的這一年》造字日曆,是我在年初時參與集資並購入的,而一年之後的成果,又是如何呢?
Thumbnail
看更多
你可能也想看
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
最近比較少提筆寫文章,都已經Vcous官方被通知快要變成30天沒寫文章的魔法師(這個梗是來自『如果30歲還是處男,似乎就能成為魔法師』嗎?)。 有時候常常覺得自己很貪心,什麼事情都想要做,最後的結果就是過一陣子就出現倦怠放棄寫Vocus。 其實,有太多東西可以撰寫了!只是最近比較忙碌(藉
Thumbnail
最近比較少提筆寫文章,都已經Vcous官方被通知快要變成30天沒寫文章的魔法師(這個梗是來自『如果30歲還是處男,似乎就能成為魔法師』嗎?)。 有時候常常覺得自己很貪心,什麼事情都想要做,最後的結果就是過一陣子就出現倦怠放棄寫Vocus。 其實,有太多東西可以撰寫了!只是最近比較忙碌(藉
Thumbnail
我心中默默數著這日子,還有大約2年左右,計劃才會開始,現階段我就只好告訴自己要悠著點,有了這樣的心境,在工作上,有一種但求無過不求故功的想法。 每過一些時日,我就在盤點及預計要交接的工作項目,我想就大致交接,細項理應由未來工作者自己去慢慢發現,而不是用著我的方式,畢竟人都是不一樣的。 現階段的我
Thumbnail
我心中默默數著這日子,還有大約2年左右,計劃才會開始,現階段我就只好告訴自己要悠著點,有了這樣的心境,在工作上,有一種但求無過不求故功的想法。 每過一些時日,我就在盤點及預計要交接的工作項目,我想就大致交接,細項理應由未來工作者自己去慢慢發現,而不是用著我的方式,畢竟人都是不一樣的。 現階段的我
Thumbnail
請你相信書寫的力量。時間雖然不等人,往前衝,我們卻可以透過文字紀錄來掌握時間,在展望與回顧之間,獲得勇往直前的力量。
Thumbnail
請你相信書寫的力量。時間雖然不等人,往前衝,我們卻可以透過文字紀錄來掌握時間,在展望與回顧之間,獲得勇往直前的力量。
Thumbnail
自從2023年7月選擇在方格子進行創作,至今近5個月的時間,我累積了60篇文章。 由於創作需要大量時間進行閱讀、反思,再到內容輸出,由於目前還有正職工作,因此創作時間往往都是在下班後回到家才開始,而這時的腦袋已夾雜一整天的各種資訊,腦袋已呈現滿載狀態,很難專心閱讀和創作。
Thumbnail
自從2023年7月選擇在方格子進行創作,至今近5個月的時間,我累積了60篇文章。 由於創作需要大量時間進行閱讀、反思,再到內容輸出,由於目前還有正職工作,因此創作時間往往都是在下班後回到家才開始,而這時的腦袋已夾雜一整天的各種資訊,腦袋已呈現滿載狀態,很難專心閱讀和創作。
Thumbnail
不知道大家在經營方格子時,會不會像我一樣,做個不受時程束縛的自由靈魂,雖然這樣壓力相對較小,但時間一久卻反而容易犯上懶懶病,或許這個專案能幫上一點忙?
Thumbnail
不知道大家在經營方格子時,會不會像我一樣,做個不受時程束縛的自由靈魂,雖然這樣壓力相對較小,但時間一久卻反而容易犯上懶懶病,或許這個專案能幫上一點忙?
Thumbnail
你也有拖延症候群嗎? 快來試試看《24小時全為己用》作者給的辦法唷。 我對於比起想像一起順利,想像阻礙與對策,更能達成目標深有所感。 比方說,當我知道要辦活動有幾個步驟,裡面有幾個關鍵任務需要完成的話,辦活動就很像玩遊戲了,每完成一個任務,會前進10%之類的,讓我更有動力去完成。
Thumbnail
你也有拖延症候群嗎? 快來試試看《24小時全為己用》作者給的辦法唷。 我對於比起想像一起順利,想像阻礙與對策,更能達成目標深有所感。 比方說,當我知道要辦活動有幾個步驟,裡面有幾個關鍵任務需要完成的話,辦活動就很像玩遊戲了,每完成一個任務,會前進10%之類的,讓我更有動力去完成。
Thumbnail
如果你覺得生活一成不變好厭倦,相信我,你該做的決定不是飲酒作樂,而是在你生活中隨機買一本書。 斜槓之風盛行,多元收入的思想讓每顆心靈躍躍欲試。不管是成長於資訊氾濫、新媒體崛起的新鮮人;或是擁有多年社會經驗,期盼將職場心聲結合自身背景以表達個人思想的有為青壯年,我們正處於跨時代交流互惠最巔峰的世紀。
Thumbnail
如果你覺得生活一成不變好厭倦,相信我,你該做的決定不是飲酒作樂,而是在你生活中隨機買一本書。 斜槓之風盛行,多元收入的思想讓每顆心靈躍躍欲試。不管是成長於資訊氾濫、新媒體崛起的新鮮人;或是擁有多年社會經驗,期盼將職場心聲結合自身背景以表達個人思想的有為青壯年,我們正處於跨時代交流互惠最巔峰的世紀。
Thumbnail
雖然我們的教育體制到整個社會環境中常給我們一些「時程表」,在學校有課表、上下班要打卡,但大部分的時候,除了這些有時程表的時間裡,我們的人生都沒有「節奏」這個東西!因為習慣於「被規定」所以很難在工作或讀書以外的時間,可以替自己找到很順暢的流程,以致於要找出「節奏」就非常的困難!
Thumbnail
雖然我們的教育體制到整個社會環境中常給我們一些「時程表」,在學校有課表、上下班要打卡,但大部分的時候,除了這些有時程表的時間裡,我們的人生都沒有「節奏」這個東西!因為習慣於「被規定」所以很難在工作或讀書以外的時間,可以替自己找到很順暢的流程,以致於要找出「節奏」就非常的困難!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News