[心得] Synology NAS的創意應用 – Download Station遇上Python–做你想做又不想做的事

阿真

各位朋友大家好,我是scku,,可以叫我深紅,是一個普通宅宅。在文章的一開始就必須先說很抱歉,雖然這標題我想了很久,寫得很籠統,但…總還是怪怪的。想必很多人現在一定黑人問號中,什麼是Python?又到底什麼是「想做又不想做的事」?先賣個關子,且聽我娓娓道來吧。
啊,對了,我又得先說,這篇文章的應用實例比較傾向於已成年的男性。不過,不屬於這類的人,也不用急著上一頁離開,不妨直接跳到「解決方案」章節,仍有不錯且正常(?)的Synology NAS創意應用說明哦,可以激發你對NAS應用更深一層地想像。


====以下開始切入主題====


不知道大家是不是也跟我一樣,購入NAS的主要原因是保護自己重要的資料呢?我想,最大宗的應該就是照片了吧(你說不是?!)?那可是不見了就很難很難再找回的珍貴回憶呢!雖然Google也對照片提供其它免費的決解方案。但就我個人的了解,仍有不少人希望能夠自己管理重要的照片與資料,以保有絕對的隱私。



這是我近年來購入的(二手)DS1515+,座落在房間的一個小角落,不眠不休的執行我日常的檔案備份任務


抱歉,離題了。不過,把NAS當成純資料備份的機械之後,使用的日子一久,當備份資料變成了例行公事,就會開始想著,「NAS還可以為我做些什麼事」?接著,就會看看Synology官網或google,找尋NAS其它好用的功能,發揮它最大的效益。深紅在這裡建議大家,直接參考Synology的套件中心或google搜尋「synology nas 用途」等類似關鍵字,一大堆的好文章即可讓你對NAS的其它功能有更深一層認識,在此就不再贅述啦~



Synology官網中提供了許多套件的介紹,套件提供了多元的加值服務。其中位於中間的「Download Station」套件,就是這次要介紹的主角之一。


那,你心中是否浮現一個疑問就是:「這篇文章到底想幹嘛?想分享啥?」。呃…我想,科技始終來自於人性。是的,來自於「人」(的惰)「性」。所以我想在這裡跟讀者們分享,我到底懶到什麼程度,以致於在如此方便的Download Station下,又發展出了什麼樣的「科技」,什麼樣的「創意應用」,更如何讓Download Station與Python做你「想做又不想做的事」。



Download Station – Synology開發的下載服務器;Python - 一種程式語言,解決日常生活中重複性的簡單工作


相信講到這裡,大家應該心裡都有個底了。如果,你還沒有任何想法,一方面先恭喜你(?),另一方面…不妨就繼續看下去吧!
請容我在此先說明一下,Synology的Download Station,顧名思義,是個下載的好用工具,在幾乎所有的Synology NAS中都能下載使用,算是非常老牌的套件了。它提供我們很大的下載便利與調整性,可以讓我們使用一些常見的下載服務如BT、HTTP、免空等。並以簡易的操作方式提供搜尋、批次下載、排程與設定等等的下載規劃。在google的搜尋結果下也能找到相當多的資源與教學。



在Google搜尋中下「synology download station」等字眼,滿滿的套件介紹與教學文章,網路資源算是相當豐富,不怕找不到


Python是一個強大的直譯式程式語言,許多大公司都在使用它(Google, Facebook, Dropbox, Netflix等等),它免費且開源、平易近人、易讀易整合,算是相當親切的程式語言,也是此篇文章中的強力配角。
的確,好一陣子,Download Station所提供的這些功能確確實實地滿足了我下載檔案的需求,惠我良多。不過,如我前面所提,日子久了之後,就發生了以下的情境,這也逼著懶惰的我開始尋求解決之道 – 使用Python。


使用情境


深紅是一個重度的網路資源使用者,每天做著日復一日的辛苦工作…粗略可以分成以下步驟的循環:


1.打開chrome瀏覽器,打開熟悉的網頁,開始尋找適合的BT種子檔案。
2.如何知道種子是不是需要的呢,必須瀏覽該種子的相關介紹,有時候是一些文字說明、一些照片,而這些介紹,往往會需要滑鼠中鍵的滾來滾去、亦或是彈跳視窗的跳來跳去,最終才能取得介紹以作為判斷的依據。
3.決定好需要的種子之後,點選連結把種子下載至電腦(亦或是貼上Download Station中),然後開始下載與漫長的等待。
4.等了幾天,終於下載完成。選一個夜深人靜時,開開心心地將下載好的檔案資料夾拖進常用的播放軟體。結果,要跳過一堆介紹影片不說,等正片開始,又發現裡面內容與封面不符,一度氣到勃...勃然大怒。無奈為時已晚,褲子都脫了,檔案是砍還是不砍,不刪對不起自己的眼睛,刪了又對不起已脫下的褲子這幾天一路走來的努力。整體所花上的時間與報酬不成正比,得不償失。



「悔不當初」之情境說明示意圖


以上情境相信是許多已成年的男性可能會碰到的問題。其實,你可以不必那麼辛苦的,你只是還沒找到方法罷了。(還是有人為此甘之如飴?)


解決方案


只要使用Synology所提供的Download Station套件,並配合Python程式語言,問題便能迎刃而解,從而得到相對高的投資與報酬,也就是省時、費力,卻不費人力。
然而,醜話還是先說在前頭,目前的解決方案還是不盡理想的,它無法滿足每個人的使用需求,至今也只滿足了目前的我,而日子一久呢?還是無法保證。所以,僅供大家參考囉。
在不考慮任何技術面與其它複雜的可能,一言以蔽之的解決方案就是:「我不希望把人工消耗在找尋、判定、下載、上傳BT種子之類繁雜的工作」。我希望Synology的Download Station能幫我解決以上的問題,並在最後使用下載的檔案時,再以人工來判斷檔案的去留。
如果以上的任務能夠達成,因為沒有投入或投入相對較少的時間成本,相對的得失心也不會那麼重,進而坦然看待這一切,因內容物不符的刪檔動作自然也就沒有留下任何遺憾啦。



自動化任務達成時的說明示意圖,僅剩下人工判斷檔案去留的部份


只是,好景不常,使用Download Station提供的基本功能,僅能解決上面所說的一部份,哪一部份?呃…對不起我看錯了,沒有。對的,沒有。因為Download Station提供的基本功能裡,真的沒有不用人來操作的部份,全部都需依賴使用者進入Download Station的使用者網頁介面進行操作。那…我這篇到底跟Download Station有什麼關係…?



Download Station的基礎功能需搭配網頁介面,以人為操作控制與調整


唔…有的。事實上,Synology為他們開發的套件提供了所謂「進階」的功能,在Download Station搭配其「進階」的功能後,是能達成上述的某些需求的,也就是本篇實際想分享的主要用途,至於會選用如此不潔(?!)的使用情境是因為…呃…我就是個宅宅,That’s it。
礙於一些技術面、相關版權與尺度的問題,在此文章中能分享的部份其實並非常有限,這部份還請見諒。不過我想,精髓還是有的。
讓我們移動到Synology官網中的「開發者專區」,在「取得開發人員SDK」的分頁下,可以看到「Download Station開發指南」,這就是上面所提的Download Station進階功能,言下之意,此進階功能可以像yoyodiy大師那樣地繞過Download Station使用者介面,透過Web API直接對Download Station下達相關的命令以達到自動化的可能。值得一提,說明網頁中的中文頁面真是令人感到心慰。



Synology官網的開發者專區 – 友善開發平台、創造無限可能



取得開發人員SDK的分頁下,許多的套件開發指南與說明下載


於是,下載「Web API模組」點開一看,呃…我收回我剛剛的感動,還是全英文的pdf啊…而且不多不少的44頁內容令人進退兩難。不過由於宅宅如我的惰性,比起重複又辛苦的滑鼠中鍵左鍵的動作,我還是選擇性的將它閱讀完,並掌握此解決方案需要的部份。



Download Station的Web API模組說明,滿滿的44頁英文pdf


Web API,簡單的說,是一種「透過HTTP協定為基礎來進行與服務間溝通的介面」,然後,好,我知道我不能再多說了。翻成白話就是,「我可以不透過Download Station的網頁使用介面,對Download Station進行操控」。
套一句在魔物獵人世界台灣冠軍ptt心得文中看到的一句名言:「如果我看得比別人更遠,那是因為我站在巨人的肩膀上」by 牛頓。雖然我不是巨人,我仍希望大家能站在我已努力過的肩膀上,繼續向前。
於是,我選擇了Python程式語言來對Download Station的Web API進行整合,讓一般使用者更易於去使用這樣進階的功能。你一定會問:「Python是啥?要用還不是要先學會Python」。是的,沒錯。但是我如果有勇氣拿Python去整合,並分享給各位。相信我,我整合開發出來的Python工具,一定比開發人員的Web API文件要更平易近人。誇張地講,就我的觀點,只要有心,就連顯示卡中氧化的金手指部份,它,也學得會。(謎:誰啊?)


設置教學


別管顯示卡中氧化的金手指部份了,讓我們就這樣開始吧!首先,跳脫一切世俗的想法,這次,我們要用Python操作DSM (DiskStation Manager,就是點開網頁連到的NAS介面)中的相關套件。想法上,我們需要DSM的IP位置、埠號與使用者帳號密碼等相關資訊。我們可沒辨法真的像yoyodiy大師什麼都繞得過。當然,實作上,我們也需要這次的配角 - Python。



Python官網的下載頁面,找到「Downloads」,取得適合自己作業系統的Python版本


首先,我們必須安裝Python。該怎麼做呢?進入Python官網,雖然是英文,但是別忘了,我們要時常站在巨人的肩膀上。網路上已有相關的安裝教學,在此不再說明(請參考安裝Python)
接著,我們必須像NAS一樣,安裝所需的Python套件模組 – requests。安裝方法相當簡單,在鍵盤按住windows鍵(通常在左下,長得像旗子的),再按下R,會跳出以下視窗,在視窗中輸入“cmd”,按下Enter鍵





便會跳出dos的視窗。





鍵入“pip install requests”,再按下Enter,即可安裝完成(需連上網路)。會出現類似以下的畫面





至少最後一行要有的:「Successfully installed requests-2.19.1」
再來,我們必須下載Python與Download Station的整合Python檔案,也就是本人的拙作。請下載並放在你能找到的路徑底下。
整合檔下載網址: 本人的拙作
下載完成後,按下Windows桌面的左下角“搜尋”按鈕(或旗子圖示也行)並鍵入“python”等文字,如已順利安裝Python,應該可以找到最佳比對為IDLE Python。








點擊開啟它,





然後點選「File」->「Open…」後,選擇下載的Python整合檔並打開





會看到如下畫面





看到這是啥東東時,千萬別擔心,只有前五行是需要調整的部份,其它都是那44頁Web API的濃縮精華,可以不用理它。這邊會想辨法讓你了解這五行在做些什麼,分別為:
IP:
你的Synology NAS位置,區域網路通常是192.168.1.100,外網或是DDNS就是一串網址,如awesome.synology.me或你自己申請的網址(請去掉http(s)://部份),記得文字兩邊的單引號要留著,那在Python裡是指字串(文字)的意思。
PORT:
你的Synology NAS的埠號,通常是5000(http)或5001(https),如果你有自己的設定,請直接修改它,它是一個數字。
SECURE:
是否為加密連線,是的話輸入True,不是則為False(注意大小寫),預設在區網內,此值為False。若使用DDNS網址等對外網路,強烈建議此值要為True(當然NAS也要打開相對應的加密),否則你的帳密將透過網際網路以明碼傳送(相當危險)。
USER:
你的Synology登入使用者名稱,預設是admin。請更換為你的使用者名稱
PASSWORD:
你的Synology登入使用者密碼,沒有預設。


執行程式的方式在已開啟的Python檔案下(標題是mysyno.py的那個)按下F5鍵,程式會問你是否儲存,請按下確定儲存以執行程式。





如果沒有填入登入密碼,程式執行時會要求輸入(如下圖,注意:輸入的密碼將以明碼顯示,且需輸入兩次。包含登入File Station與Download Station套件)。





每次輸入完請按下Enter鍵完成登入。


又如果你在填入密碼後才按F5執行,則會看到類似以下畫面(如果密碼正確的話)



看到此畫面,表示套件已登入完成。


That’s it. 你已經成功用Python掌握Synology的套件了,恭喜!
現在我們可以開始使用整合的Python程式了。例如,你可以透過它連上File Station(你已經連上了),在IDLE Python介面(標題有Shell的互動介面)輸入以下指令,來幫你的NAS建立一個資料夾:
fs.createFolder('/home/test/a_folder')
這個指令會在使用者的home目錄下建立一個test資料夾(如果沒有的話),再在其中建立一個a_folder資料夾,酷吧!





然後,你可以用你常用的方式連上NAS(本例是Windows的網路磁碟機連線),去看看資料夾是否已建立。



有,這真是太棒了!


這邊也嘗試用一點程式基礎來亂數產生一些資料夾名稱,說明這個過程如果用人工來操作,應當會非常辛苦。




如果需要手動建立資料夾,很多,很辛苦


再來,當你以同樣的方式將Python連上Download Station後(你也已經連上了),你可以開始上傳你的BT種子檔案了,以這個ubuntu的作業系統種子為例。你可以在IDLE Python下輸入以下指令:
ds.uploadTorrent('http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-amd64.iso.torrent?_ga=2.50384809.1281756310.1534536911-1914665641.1534536911', '/home/test/a_folder')
就能將此種子上傳Download Station並指定下載完成時存放的資料夾哦~這裡我們指定下載的資料夾位置為指令中的第二個參數,也就是'/home/test/a_folder',是我們之前用Python結合File Station時所建立的資料夾。





再到Download Station的網頁介面看看,種子已經上傳上去並開始執行了哦。再次,這真是太棒了!



種子照著我們的預期上傳Download Station並開始下載


你當然會說,何不用滑鼠直接把檔案圈起來,一次拖拉上Download Station網頁不也是一樣?Yes, you are right。但,就是這個“but”,對懶到一個不行的我,時間就是金錢,能省則省。懶得拖曳檔案,懶得選取目的地資料夾,懶得勾掉顯示視窗來選擇下載的檔案,懶得按下確定。一兩個檔案是還好,但日積月累,Sorry, I can’t。


總結與討論


OK,至此,文章已進入尾聲,能看到這裡的讀者們,深紅在此由衷感謝。你已經學完了本文能夠教你的東西了。回過頭來看看,我們能把這些技巧發揮在情境的哪裡呢?


第一
當整個Python程式執行時,會自動找出程式執行當下的日期,並在指定的NAS資料夾位置中,建立關於該日期的資料夾(這裡運用了Python與File Station的連結 - fs.createFolder)。這方便我們將每次執行的下載任務依日期分別存入,才不會發生「往事又重提」的窘境。
第二
找尋熟悉的網頁,不由分說的找尋需要的BT種子。這裡沒有任何的人為操作。僅是使用Python程式傻傻的找出網頁中BT種子的網址,並記錄下來。(僅使用Python,並無使用Synology相關套件)。這裡其實是相對最費時費力的部份,但除了有公開的限制外,與本次主題相關性也不大,請容我簡單帶過。
第三
將所記錄(或下載)的BT種子,依序上傳至Download Station(這裡運用了Python與Download Station的連結 – ds.uploadTorrent)。此時還可同時指定下載的資料夾位置,幫助分開由不同日期執行的Python程式所下載的檔案。也因為不花任何人力時間成本,程式選擇將BT種子內所含的檔案都下載。


題外話,如果下載下來的檔案,有重複或不需要的檔案,可以再由額外的Python程式來判斷處理,例如將下載資料夾內的小檔案全部移除,以減少在播放軟體中額外選取正確檔案的時間,不過那又是另一個懶惰的故事了。總之,以Python結合Synology NAS – Download Station,幫我做了「想做又不想做的事」,這真是太好了。


個人用後感


就個人使用此篇提到的Download Station進階技巧並搭配Python程式語言後的使用感想,我覺得,它真的幫我在日常生活中,減少了很多不必要且無趣的重複性工作。雖然人工過濾檔案的時間反而變多了(因為下載的檔案也變多了)(笑),在某種程度上也不失為一個「美好的過程」,畢竟每次打開檔案都有不一樣的體驗。
然後,整體所花費的時間一定是變少的。而且,時間都花在(自認)美好的事物上呢。
最後,我想我還是必須強調,如我前面所提,這篇文章完完全全地無法為讀者們解決這次的使用情境(礙於一些限制),以解決問題這個目的來說,實屬不及格。
在文章評分的要求上,套件的使用者介面截圖也不符評分標準(不過我想澄清一下,因為本文的重點就是使用Download Station的進階功能啊,那是沒有使用者介面的…不能怪我QAQ)。
不過,本人仍努力在有限的條件下說明與分享,期望能為讀者們提供創意的思維、創新的用法、解決問題的參考!當然,也歡迎大家與我討論,我會盡可能回答大家的疑惑(如果不適合留言發問,還請寄到我的信箱: scku208@gmail.com)。


以上,本篇文章將陸續發表於以下平台:
-- T17「科技行動派」
-- PTT Storage_Zone & Python
-- Mobile 01
-- 巴哈姆特
-- XFastest
如果覺得文章還可以,也歡迎將本文轉載至以上未提及之其它平台,但希望能夠在你原先所看到的平台上,留下轉載相關訊息,以方便追蹤,謝謝您的合作。

原文網址:https://t17.techbang.com/topics/50764-creative-application-of-synology-nas-download-station-meet-python-do-what-you-want-to-do-and-dont-want-to-do?page=1