方格精選

[突發專案] 創作懶懶病良藥?|試寫 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
47會員
267內容數
偽命名並非無名,是為了意識的生存,取得身份的代號,成為數位生命的新載具。
留言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
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
看著方格子每月寄來的信件,一再的提醒我荒廢了多久沒有更新文章,從去年開始更新幅度就大幅降低,到今年才輸出兩三篇文章,距離上一篇發文居然超過了四個月。 這也不免讓我思索,是什麼原因開始不再輸出文字?我認真思考,一是這兩年多來開始將原有寫作時間,挪至學習影片製作,導致文字輸出大幅降低。二是工作
Thumbnail
最近比較少提筆寫文章,都已經Vcous官方被通知快要變成30天沒寫文章的魔法師(這個梗是來自『如果30歲還是處男,似乎就能成為魔法師』嗎?)。 有時候常常覺得自己很貪心,什麼事情都想要做,最後的結果就是過一陣子就出現倦怠放棄寫Vocus。 其實,有太多東西可以撰寫了!只是最近比較忙碌(藉
Thumbnail
距離第一篇文章居然已經過了兩年,當初發表後不久即找到正職工作,忙著學習打理一間小店的事務,卻放空了寫作的初衷。 期間信箱還是會不時收到方格子的通知,但直到最近平台轉型的樣態呈現出來,才讓我產生回頭研究的好奇心。比起初期主攻專業內容帶動虛擬貨幣收入,如今的方格子比較像是分享想法的社群平台,每個人開闢
Thumbnail
紀錄自己在方格子發表文章三個月的經驗與成長。 回顧3~5月的發文變化和互動成果。
Thumbnail
在方格子開了帳號,一轉眼兩個禮拜過去了。 為何明明心中有滿溢的想法想分享,卻連一篇文章都生不出來呢?
這篇是經營方格子一個半月後的自我經營策略反思。 因為方格子看的到後台數據,我發現我寫人生故事的點閱率跟完讀率都最好,學習筆記跟趨勢觀察的點閱率差不多,且都遠低於故事的點閱率,完讀率很低。 有點神奇的是,我在寫學習筆記跟趨勢觀察時的確會比較多障礙,如果這兩個項目要一直有產出有價值的內容,對....
Thumbnail
起初進方格子,到現在也滿三個月了,我覺得我才似乎剛寫完「方格新手七天小結」而已,時間過得有夠快,根本是時光機。如果真要把一個人的所有屬性都列出來,其它什麼素質我不知道,但幸運值這點我肯定是pr99。不管是在格子裡,還是現實生活中。
Thumbnail
2021年挑戰每月寫一篇文章,有持續一整年。但之後就因為工作和生活忙碌停了一年沒有更新。 直到去年2023年離職在家休養身體半年恢復身心狀況後,7月終於有動力重新在方格子上寫文章。 7~12月產出的文章數不多,還是來看看數據統計和廣告收入累積的結果如何。
Thumbnail
     算算日子,埋首在方格子寫專題文章,一晃眼已度過了14個月,到目前為止,包括發表和未發表的文字,總計已超過25萬餘字,單就自我成長而言,也稱得上是人生的一項小小成就吧!
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
看著方格子每月寄來的信件,一再的提醒我荒廢了多久沒有更新文章,從去年開始更新幅度就大幅降低,到今年才輸出兩三篇文章,距離上一篇發文居然超過了四個月。 這也不免讓我思索,是什麼原因開始不再輸出文字?我認真思考,一是這兩年多來開始將原有寫作時間,挪至學習影片製作,導致文字輸出大幅降低。二是工作
Thumbnail
最近比較少提筆寫文章,都已經Vcous官方被通知快要變成30天沒寫文章的魔法師(這個梗是來自『如果30歲還是處男,似乎就能成為魔法師』嗎?)。 有時候常常覺得自己很貪心,什麼事情都想要做,最後的結果就是過一陣子就出現倦怠放棄寫Vocus。 其實,有太多東西可以撰寫了!只是最近比較忙碌(藉
Thumbnail
距離第一篇文章居然已經過了兩年,當初發表後不久即找到正職工作,忙著學習打理一間小店的事務,卻放空了寫作的初衷。 期間信箱還是會不時收到方格子的通知,但直到最近平台轉型的樣態呈現出來,才讓我產生回頭研究的好奇心。比起初期主攻專業內容帶動虛擬貨幣收入,如今的方格子比較像是分享想法的社群平台,每個人開闢
Thumbnail
紀錄自己在方格子發表文章三個月的經驗與成長。 回顧3~5月的發文變化和互動成果。
Thumbnail
在方格子開了帳號,一轉眼兩個禮拜過去了。 為何明明心中有滿溢的想法想分享,卻連一篇文章都生不出來呢?
這篇是經營方格子一個半月後的自我經營策略反思。 因為方格子看的到後台數據,我發現我寫人生故事的點閱率跟完讀率都最好,學習筆記跟趨勢觀察的點閱率差不多,且都遠低於故事的點閱率,完讀率很低。 有點神奇的是,我在寫學習筆記跟趨勢觀察時的確會比較多障礙,如果這兩個項目要一直有產出有價值的內容,對....
Thumbnail
起初進方格子,到現在也滿三個月了,我覺得我才似乎剛寫完「方格新手七天小結」而已,時間過得有夠快,根本是時光機。如果真要把一個人的所有屬性都列出來,其它什麼素質我不知道,但幸運值這點我肯定是pr99。不管是在格子裡,還是現實生活中。
Thumbnail
2021年挑戰每月寫一篇文章,有持續一整年。但之後就因為工作和生活忙碌停了一年沒有更新。 直到去年2023年離職在家休養身體半年恢復身心狀況後,7月終於有動力重新在方格子上寫文章。 7~12月產出的文章數不多,還是來看看數據統計和廣告收入累積的結果如何。
Thumbnail
     算算日子,埋首在方格子寫專題文章,一晃眼已度過了14個月,到目前為止,包括發表和未發表的文字,總計已超過25萬餘字,單就自我成長而言,也稱得上是人生的一項小小成就吧!