顯示具有 calibre 標籤的文章。 顯示所有文章
顯示具有 calibre 標籤的文章。 顯示所有文章

星期四, 7月 26, 2012

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 )。

星期一, 7月 09, 2012

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 或其他方式,暫時就這樣用吧。