电子书籍管理软件 – calibre

calibre是一个免费的跨平台电子书籍管理软件,可以完成对各种格式的电子书籍的管理和格式转换。尤其对于拥有手机/iPad等电子阅读器或E Ink设备的同学来说,这个软件尤其具有价值。如果把电子书想象成MP3音乐的话,calibre的功能可以类比于iTunes。它还可以把网络上的新闻或RSS下载转换成电子书格式,同步到相关的阅读设备中,这是一个非常实用的功能。

calibre可以从Google Books或Amazon等网站下载书籍的元数据,包括书籍的名称、作者、出版社、封面或者读者评价等信息。对中文图书而言,豆瓣上的数据应该是一个不错的书籍元数据来源,所以我就给它加上了这个功能。

今天发布的0.7.7版本中正式具有了从豆瓣下载书籍元数据的功能,可以从“首选项”->“插件”->“元数据下载插件”中启用它。由于考虑到这个功能只对中国用户比较有价值,所以这个插件默认是被禁用的。

本来还实现了从豆瓣下载书籍封面的功能,但calibre的作者不喜欢我的实现方法,所以还在进一步讨论合适的实现方法。需要尝鲜的朋友,可以参考我在Launchpad上的calibre-experimental代码树中的版本号为5550-5553的代码改动。

对这个插件有任何建议或功能改进需求,可以在此留言或去calibre的Trac上提交一个Ticket。

电子书籍管理软件 – calibre》上有77条评论

  1. @楼上
    最新版0.7.21版本的calibre已可以直接支持豆瓣的元数据和图书封面下载。
    这两个插件在非中文界面下默认禁用,可以手工启用。在中文界面下会自动启用。

  2. 我刚刚下载了0.7.23,在Windows 7 中文旗舰版 64位下使用。

    发现即使已经把“将所有非英文字符转换为英文对应字符”选项不打勾,中文文件名还是会变成拼音!反复试过都是一样。

    不晓得你是否也碰到这个问题?

  3. @flyisland
    我以前也发现过一样的问题,那时没有分析过原因,后来没有再在意这个问题。
    回头有空我来看看代码,看什么问题引起的。
    您也可以直接去calibre的网站提交Bug Ticket。

  4. @Fanxi, 已经在官网上提交ticket,但kovidgoyal说不是bug,因为“The filenames in the calibre library will always be ASCII. ”(http://bugs.calibre-ebook.com/ticket/7174)。

    真是无语,不晓得非英语国家有没有人用这个软件来管理电子书,实在不能接受用文件名“拼音”。

  5. 请问calibre的豆瓣插件具体应该怎么用?插件已经启用了,但是在元数据搜索时,怎么选择使用豆瓣的元数据?

  6. @flyisland
    我自己又试了一下,在书库下文件名永远是用拼音存的,但在用“保存到磁盘”功能时,会按你设定的模式来生成实际的文件名,这时如果选了“将所有非英文字符转换为英文对应字符”,就会用汉字来作为文件名,所以可以用“保存到磁盘”来导出你书库中的书,而不要直接从里面把文件挎贝出来。

    @Mingqing
    启用了以后在元数据搜索时就会包含豆瓣的上搜到的信息,它们会与其它元数据下载插件的搜索结果合并在一起一同显示,选择你觉得最合适的结果就可以了。从搜索结果中无法获知这个结果来自哪个元数据下载插件。
    如果你强调非豆瓣的数据不要,那就只能从选项中把别的元数据下载插件全部禁用掉,只留豆瓣的那个来使用。

  7. @fanxi,
    是的,我考虑过你说的方式,只不过我更想用”sending to device”功能。不过已经在论坛得到作者的答复,他没有打算让文件名支持non-ascii在这方面做什么更改。

  8. @flyisland
    从技术上来说,他的选择也没什么错。因为确实大部分设备是用FAT32文件系统的,这样的话,文件名存多国文字是不合理的。同时,由于大部分阅读器设备在显示书籍目录时,应该是使用书籍文件中的元信息,而不是文件名,所以文件名用英文字母并不会影响到使用体验。calibre从设计上来说,希望是做成一站式的管理工具,原则上用户不需要自己去动那些物理文件,也就不用关心文件名是什么。
    不知道你强烈要求文件名以原始中文保存的具体原因是什么?看看有没有什么合理的解决方法,比如写个插件之类的。不过如果没有强烈的理由,可以这样行为是没有机会进入官方的代码中的。

  9. @flyisland
    我刚才在hi pda上看到你们对这个问题的讨论,不过我的帐号还没有激活,不能回贴,所以在这里写下回复。
    calibre早期就是专门为SONY PSR-500设计的软件,后来才转变成一个通用的软件,所以很多设计都跟PSR-500有关,由于500不支持非ASCII的文件名,那作者就把它们转换一下,对于大部分电子书而言,文件名并不是一个重要的东东,所以这样的设计就一直沿用下来了。

  10. 我使用ebook管理软件calibre0.7.57版本,在编辑书籍信息时总是提示无法找到元信息(我只输入ISBN)。特向您请教。

  11. @fbwang
    我在0.7.59版本上没有重现你的问题。请你确认一下在选项中启用了哪几个元信息获取插件。
    同时可以提供我你无法获取的ISBN号以便我测试,谢谢。
    另外,不久后会发布的0.8.x系列的calibre中会对元信息获取插件做完全的重写,如果实在没办法解决问题,也可以期待一下新的版本。

  12. 刚刚更新了calibre0.8,但是无法从douban下载元信息了,有0.8可用的douban元信息获取插件吗?

  13. @Fly
    calibre 0.8.1中已经重新包含了重写以后的豆瓣元信息插件,请试用。如有问题欢迎反馈,谢谢!

  14. 不知道在这里说合不合适,launchpad的注册服务太难用,总注册不上,往见谅
    今天在用calibre0.8.1 for win的Download metadata 的时候总报错,不知道是什么问题,特此请教
    ****************************** Douban Books ******************************
    Request extra headers: [(‘User-agent’, ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1′)]
    Found 0 results
    Downloading from Douban Books took 0.610000133514
    Failed to make identify query: u’http://api.douban.com/book/subjects?q=%E7%BE%8E%E4%B8%BD%E7%9A%84%E5%87%B6%E5%99%A8+%E4%B8%9C%E9%87%8E%E5%9C%AD%E5%90%BE?apikey=0bd1672394eb1ebf2374356abec15c3d’
    Traceback (most recent call last):
    File “site-packagescalibreebooksmetadatasourcesdouban.py”, line 302, in identify
    File “site-packagesmechanize-0.2.4-py2.7.eggmechanize\_mechanize.py”, line 199, in open_novisit
    File “site-packagesmechanize-0.2.4-py2.7.eggmechanize\_mechanize.py”, line 255, in _mech_open
    httperror_seek_wrapper: HTTP Error 403: Forbidden
    在ie里面直接访问
    http://api.douban.com/book/subjects?q=%E7%BE%8E%E4%B8%BD%E7%9A%84%E5%87%B6%E5%99%A8+%E4%B8%9C%E9%87%8E%E5%9C%AD%E5%90%BE?apikey=0bd1672394eb1ebf2374356abec15c3d
    豆瓣会说
    You API access rate limit has been exceeded. Contact webmaster@douban.com if you want higher limit. Check http://www.douban.com/service/apikey/ for more detail.

  15. @benben_wab
    从出错提示看,是因为豆瓣API访问次数超限,豆瓣允许在1分钟内发起40次查询请求,如果限过这个限制就会出现你说的问题。
    从你提供的信息中,我发现是我程序有问题,没有正确传递API Key,导致允许的访问次数变成了1分钟10次,所以很容易就触发了限制条件。
    我已经把问题修复,预计会在0.8.3或0.8.4版本中包含这个问题的修复。
    感谢您的问题报告。

  16. 0.8.3中已经包含了一些修复,但我又发现有别的类似bug存在,所以仍然可能出现API访问次数超限的问题。我已经修复了,预计会包含在0.8.4中。

  17. 版主:一个问题困扰,中英文网站都没找到答案,不知你能否有办法?

    具体就是用txt转换成kindle字典。
    用calibre转成mobi成功,也能在kindle3打开阅读。
    然后设置成Primary Dictionary,但见不到这个文件名。

    其他字典看来都是mobi文件的,为什么呢?

  18. @楼上
    不知道。我没有Kindle,不知道它是怎么处理字典文件的,也许这是一种特殊的mobi文件吧。
    你可以试试去hi-pda论坛问问看有没有人知道。

  19. calibre的豆瓣插件非常好,但是豆瓣中的元数据信息很明显需要isbn,对于现在网络上大量流传的网络小说,绝大部分都是没有isbn的,因此希望能有一个对于中文电子书元信息的补充插件。
    下面是我找到的两个比较好的网站,yankanshu.com和verydu.net,这两个网站的搜索模式都差不多,我很希望能获得相关的插件,可惜我不会编写插件,你能不能开发一个新的插件。

    • 豆瓣插件不要求有ISBN,有图书名或作者名就可以模糊匹配,虽然结果不是完全理想(这跟豆瓣自身提供的搜索功能的效果一致),但是还是可以用的。

      您提供的第一个网站没有API,从网页做搜索实现起来比较复杂,而且效果也不好。第二个网站打不开。所以可能并不适合用这两个网站来做相关的元信息下载插件。

      • 第二个和第一个差不多,才注意到必须加上www才能访问(www.verydu.net)。如果第一个无法抓取,第二个估计也一样。
        我看网上有小说采集站,他们都是从别的站点直接采集,删除不需要的信息,同样能得到元数据。js+dom估计就能做到吧,可惜我也就只是看到过,自己不会做。
        http://www.yankanshu.com/search.php?keywords=%s&type=0
        http://www.verydu.net/search.php?keyword=%s&type=bookname
        (%s代替关键词),上面使用chrome抓取到的两个站点的搜索引擎。希望能有所启发。

      • 豆瓣搜索是不需要isbn,但是豆瓣收录的书籍全都有isbn,没有isbn,无法添加书籍信息,因此对于网络书籍,很多用豆瓣几乎搜不到匹配信息。

      • 有个作者的信息也可以了,对于网络小说,一般除了标题,作者,简介,貌似其他信息很少有人会看,评分,标签这类元信息除非有数据提供的,否则也没办法。
        对了,你做好的插件能不能提供以下,我不会做这个插件,手上收集了一大堆书籍,就是想整理一下,对于我现在来说,就是想要作者这一个元信息罢了。
        给个最基本的就行了,剩下的,自己纠结。
        yjc980121@163.com

        • 上面给您的回复中已经提供了参考代码,可以参考一下。无非就是创建一个搜索请求和解析返回结果而已,并不是很难。由于这两个网站不是返回标准 XML而是返回HTML,也许你可以用Beautiful Soup之类的库来帮助你解析页面的内容。

          但我个人最近没有足够的时间和精力来完成这个插件的编写。非常抱歉。

  20. 用calibre修改元数据(比如仅仅修改作者)以后,为何点击「保存到磁盘」,不能正确显示……

    是不是只能点击「转换书籍」,重新生成一遍,才能生效?

    可是这样话,效率太低了。

    • 默认情况下,首选项->保存书籍到磁盘->更新保存版本的元数据是勾上的,这种情况下,用“保存到磁盘”后,新存下来的书的元信息是会更新到与书库中一致的。如果把这个选项禁用,则保存下来的书不会更新元信息,如果要更新元信息就只能重新做一次格式转换了。

  21. 博主你好,我想问两个问题。calibre从豆瓣下载元数据能不能把calibre里的“series”和豆瓣的“丛书”对应起来呢?能不能实现从中国亚马逊下载元数据呢?谢谢!

    • 我试了下,应该是可以的,我有空实现一下试试。
      从z.cn下载元数理论上也是可以的,不过实现起来有点麻烦,而且我觉得z.cn的数据质量也只是一般般,最近我应该没时间和兴趣去做,抱歉。

  22. 您开发的豆瓣插件非常好用,我用了好多年了,用来管理我的在calibre中电子图书的元数据,最近三天开始,这个插件无法下载数据了,可能是豆瓣更改API,麻烦能否更新一下插件

    • 目前看是豆瓣关闭了API或者是封禁了我用的API Key,暂时没有办法。我试试联系一下豆瓣看看。

      • 今早也是不断尝试,发现出现了这个问题。感谢作者回复,终于找到大概是什么问题了!我还以为是我更新出错了……

      • 新版本的API可以用,但不知道怎么改这个插件https://api.douban.com/v2/book

      • 实测下面这个apikey还可以用,不过只支持v2版本的接口,博主有空麻烦更新一下,谢谢!https://api.douban.com/v2/book/isbn/9787214075710?apikey=0df993c66c0c636e29ecbb5344252a4a

        • 从V1的API改成V2还是有一些工作量。另外,盗用别人的API Key也不是一个长久之计。

          按社区正在讨论的,可能改成直接抓取Web页面会是一个更稳固的做法,但是也涉及很多的代码重写。

          抱歉,最近一段时间我暂时还没有精力投入相关的开发。

  23. 大神,calibre豆瓣插件最近好像不能用了嘛,有啥解决方案嘛,已经严重依赖这超好用的插件了,感谢。

    • 抱歉,目前没啥办法,只能重新开发,我暂时没有时间和精力投入。可以考虑改成爬网页的方式,有能力的朋友可以尝试一下,如果需要,我可以提供必要的技术支持。

  24. 现在好像恢复了,win7 Calibre 3.48
    在“首选项–插件管理”Douban book 2.1.1
    但是在下载元数据时,点开日志,插件版本似乎是3.1.0

    取数据副标题功能已勾选,但获取不到,日志也没有

    • 感谢xcffl、lewixliu和jnozsc等朋友重写了Douban插件,目前的实现是用Douban API v2来做的,跟原来的API不太兼容,我猜可能是漏做了相关的功能。我晚点可以看下代码,如果好修就修一下,如果不好修就去提个Issue吧。

  25. 你好,再请教个问题。
    我已经建了一个库,里面有很多书都有豆瓣ID,我还自己建了个column,叫douban_rating,我想根据豆瓣ID获取到这本书的评分,再写到douban_rating里,请问有什么资料或者建议么?谢谢!
    PS 我打算用Python写个脚本来完成。

      • 貌似可以用Python 3了,但是我不确定,可参考:https://github.com/kovidgoyal/calibre/blob/master/README.python3

        • 多谢解答,我看了下,好像是可以,不过还是需要先用py2 setup一下:
          python2 setup.py bootstrap

    • 豆瓣元数据自带获取评分的功能,你可以改下插件把它写到你自己的字段里。也许有其它更简单的做法,但我一时没想到。

      • # Ratings
        if rating:
        try:
        mi.rating = float(rating[‘average’]) / 2.0
        except:
        log.exception(‘Failed to parse rating’)
        mi.rating = 0

        你说的是这段代码么?
        我还不太清楚怎么给我自定义的字段赋值,能举例说明一下么?多谢!
        另外,这段代码只是获取豆瓣数据,我想遍历我目前的库,获取每个记录的豆瓣ID(或ISBN),该看哪部分代码呢?
        再次感谢!

        • 我又想了想,似乎现在元数据插件并没有提供把数据写到别的字段的里的能途径,所以也许直接修改这个插件是行不通的。

          可以考虑的方式是用豆瓣插件批量自动下载所有书籍的评分(如果书籍元信息中的Ids字段中包含douban:xxxx这样的ID,就会按这个豆瓣ID去下载元数据,而不是用书名去匹配),它会自动填入rating字段,然后通过批量修改字段元数据的方式,把rating字段的值填入你自定义的douban_rating字段中。

          • 我试了下,如果批量更新数据metadata的话,会把其他数据(比如标签等)都更新,但我不想更新这些信息,因为我手动做了一些修改。我只想更新rating值,可以办到么?

            “把rating字段的值填入你自定义的douban_rating字段中”,请问这个是自己写脚本实现么?还是calibre自带这个功能?

            非常感谢!

          • 可以在插件配置或元数据下载配置中配置只下载或只更新rating值。

            把一个字段写入另一个字段是通过自带的查找替换功能:右键,修改元数据,批量修改元数据,查找与替换。

  26. 非常不好意思,我试了下你说的:
    把一个字段写入另一个字段是通过自带的查找替换功能:右键,修改元数据,批量修改元数据,查找与替换。
    我还是没弄明白,怎么把rating值复制到自定义的douban_rating上。能具体说一下么?
    多谢!
    PS 我改了一下douban.py 把“/2”去掉了,但rating字段好像最大只能是5?

    • 批量替换可以参考:https://ebooks.stackexchange.com/questions/6752/calibre-switching-title-and-series-column

      rating 字段确实是5分制的。如果你要记录5分制的豆瓣评分,目前我还没有想到有什么好办法。

      • 我试了下,确实可以复制了,但复制出来的值只有2、4、6、8、10,这和五分制并没有什么区别。要是可以把原来的rating改为十分制的float就好了。

  27. 我在calibre\src\calibre\ebooks\metadata\book\base.py里查到这个方法:
    def set_user_metadata(self, field, metadata):
    于是改了一下douban.py:
    mi.rating = float(rating[‘average’])
    v = {‘#value#’: float(rating[‘average’])}
    mi.set_user_metadata(‘#douban_rating’, v)

    可执行的时候失败了,提示数据下载失败,能帮我看看有什么问题么?多谢!

    • 抱歉,这部分代码我不是很熟悉,看上似乎确实是用用于处理自定义元数据的。最近我可能抽不出时间来具体复现和分析你的问题,建议你自己再调试一下看看。提示下载失败应该可以看到详细的出错日志吧?看看是哪里的问题。

      • 好的,我再查一下。我看代码里有写日志,但没找到日志文件是放在哪里?

  28. douban plugin is not working again? i cannot get metadata from douban anymore these days.

  29. 您好,再请教个问题,怎么创建书单,比如“2020年书单”,可以把我当前书库里的一些书放到这个书单里。不是新建书库,而是类似于数据库里的视图功能。谢谢。

    • 我试了下“虚拟书库”,不符合我的需求,这个是把搜索结果保存到一个书单,我希望是我自己手动添加一些书,并且最好可以调整。一个workaround是把书单名写到标签里,然后根据书单名搜索标签,但这样感觉有点麻烦。不知道有没有更好的办法?

      • 我是用那个插件解决的,并没有使用tag,觉得用tag会比较长:“2021年必读书单”,后期还要维护这些tag。

    • 抱歉,由于时间精力关系,我并没有参与当前豆瓣元数据插件的开发和维护工作。如果当前的版本中的插件无法正常工作,可以联系相关的插件作者咨询。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据