calibre-haodoosearch 為 Calibre 增加搜索好讀網站並下載的功能

昨天在用 Calibre 時,突然想到如果可以直接在 Calibre 裡直接做搜索與下載的動作不是很好嗎?原本是先去好讀網站上搜索,然後下載到某個資料夾以後,再放到 Calibre 裡,這樣的動作很繁瑣。

有起了念,就趕緊去找,之前是看過幾次寫 Calibre plugin 的文,但這次是增加對書籍的搜索,不知道是不是可以寫這樣的 Plugin。在 Calibre 的源碼裡翻找了一下,大致知道這樣是要寫個 Store,所以就用 Calibre store plugin 去搜索,就找到 Store plugin 的討論串。這個討論串裡面正好有提供框架,就直接拿來改了。今天改了一上午,就改的差不多了,源碼放在 github 上 。有需要的人就自行取用,使用上有一天一百次的限制,這是 Google APIs 的限制,你可以試著申請 developer key,然後把 haodoo.py 裡的 key 改掉,就可以自己擁有一天 100 次 query 的限額。

順便記錄一下幾個心得:

  • 可以直接用 print() 印訊息,然後搭配 calibre-debug 就可以看到輸出。
  • 在設定 actual_plugin 時,搞了好久,然後才發現是自己忽略了框架plugin裡的 .txt 檔案。這個檔案名稱決定了 actual_plugin 屬性該怎麼寫。
  • 實驗結果,Calibre 從 UI 傳下來的字串是 utf-8,然後直接宣告字串變數的話,該字串變數則是 unicode 。
  • 最好不要使用 Calibre 裡面沒包的 library,要不然會很麻煩。我本來是打算用 Google API client library 來執行 custom search,但是後來發現有太多依存關係,就放棄了。
  • 有些字串在印完會丟出例外,我後來乾脆都用 try except 包起來,要不然會沒辦法繼續執行/除錯。
  • 可以自己寫批次檔來做快速佈署的工作,這在 Writing your own plugins to extend calibre‘s functionality 有介紹,會省掉很多工夫。主要就是 calibre-customize 這指令,當這樣用時 calibre-customize -b /your_plugin/ ,會自動幫你把 your_plugin 壓縮成 your_plugin.zip ,並且放到 Calibre 的 plugins 目錄 (Windows 上是在 $USERPROFILE\Application Data\calibre\plugins )。

 

電影流水帳(2012/6/30~2012/7/12)

A Princess of Mars

  • John Carter(IMDB, Wikipedia),中譯:強卡特戰記。這是改編小說的電影,小說的原名是A Princess of Mars(火星的公主),原文小說可以在古騰堡計畫裡下載。故事採取倒敘法,一開始主角就突然死去,留下家產給他的姪子,他的姪子趕緊趕來,然後開始閱讀他的日記。歷史背景是在美國建國初期,主角原本是個軍人,他把自己奉獻給國家,但是後來卻因為妻小被殺害,萬念俱灰,就不再從軍,改去淘金。淘金時,他被軍隊抓住,之後他挾持軍隊的長官逃出,逃到某個洞穴時,遇到 Thern,被傳送到火星去。在火星,由於重力的關係,主角變得很厲害,一開始是被Tharks(火星上的某個種族)抓住的,之後救了Dejah公主,之後在一連串冒險之後,他找到自己的目標,就在Dejah為了Helium的和平與Zodanga結婚之時,帶領著Tharks打倒Zodanga救了Dejah公主。然後新郎就變成了主角,主角與Dejah公主成親的當晚,他把Thern的項鍊丟掉,決定不再回地球,造化弄人,Thern的領袖突然出現,把他傳送回了地球。主角為了再回到火星,開始運用他找到的金子四處考古,想找到那個可以傳送他回火星的項鍊,但一直都沒找到。這一天,他突然想到一個方法,於是他就發電報找了他的姪子回來…結尾的這個梗我覺得很有趣,暗示了可能拍下一集,我就不破梗了。
  • The RAID: Redemption(IMDB, Wikipedia),中譯:全面突襲。超讚的動作片,從頭打到尾,氣氛跟武打都很到位!主角是個特警,局裡出任務,正好是要去他弟弟所在的地方進行勦滅任務。進去那個屋子以後,就開始打打打,打的很精彩,也很血腥。最後靠著他弟弟的幫忙,打倒了大魔王,然後也帶回那個串通敵方的人。

Calibre小補強

是這樣的,我在公司的電腦安裝了Calibre,想利用send to kindle把電子書寄到指定的e-mail位址,這樣Kindle就會自動更新。但是公司的郵件伺服器不提供SMTP,而Calibre本身的郵件設定又只有跟SMTP相關的部份,因此只能作罷。

這幾天想了又想,本來已經放棄,想要開始hack Calibre源碼,自己作一個 plugin 來補強了。但是正好看到有Open With這個 plugin ,靈機一動,就想到有這個,不就可以自己寫一個 script 來搭配使用了嗎?於是就開始實驗。

  1. 先開始一個 sendmail.vbs 檔案,然後利用 WScript.Arguments 來取參數。這裡首先遇到的問題是 Calibre 直接呼叫 sendmail.vbs 時,會出現 Error 193 的錯誤。這是因為 python subprocess 模組(Calibre是用Python寫得)不認為 sendmail.vbs 可以被執行,所以要繞路一下,多寫一個 sendmail.cmd,裡面則是用 wscript sendmail.vbs 來呼叫,這樣就可以了。
  2. 取得的參數是帶有完整路徑的檔名,因為我不想郵件的主旨又臭又長,所以就用 Scripting.FileSystemObject 的 GetFileName ,這樣就可以只取得檔案名稱。
  3. 寄信,需要附件,我是參考這篇,利用 Outlook 來寄信。使用 Outlook 寄信會跳出一個安全警告,這個沒辦法避掉,要避掉就只能改用 CDO 或其他方式,暫時就這樣用吧。

 

django-navbar

django-navbar 簡單說就是提供 navigation 的解決方案,類同於 ASP.Net 裡的 sitemap。

使用方法不難,但也讓我摸索了一陣子,這邊記錄一下:

  1. INSTALLED_APPS 加入 navbar
  2. TEMPLATE_CONTEXT_PROCESSORS 要加入 “navbar.context_processors.crumbs”, “navbar.context_processors.navbar”, “navbar.context_processors.navtree”, “navbar.context_processors.navbars”,預設原來的 settings 裡並沒有 TEMPLATE_CONTEXT_PROCESSORS,所以要自己加。但不是只加入這4個就好,而是還要加入原來的幾個
  3. 要 syncdb ,這會加入兩個 table。
  4. admin 裡會多出 NavBarEntry 的項目設置,注意:在 admin 設置完成以後,要重新 runserver,這是因為 navbar 是把資料預先塞到 Context Processor 裡,只有一開始才會去資料庫撈資料。
  5. 樣板有好幾個用法,但都要先 {%load navbar%},這可以參考 navbar/templates/navbar/ 下的檔案來進行使用。
  6. 有提供 breadcrumbs (就類似 “首頁 / 大功能 / 小功能” 這樣),但是沒有提供樣板,你可以自己刻,變數是在 crumbs 裡,用 {{ crumbs }} 就可以看到。