用 GitHub Actions 让 Calibre 定时推送新闻到 Kindle

“Calibre教程”相关阅读

给这篇文章写一条留言

提示:带 * 标记的是必填项。您填写的邮箱地址将会被保密。首次留言将会在通过人工审核后显示。如果是提出问题,请务必提供尽可能多信息,这有助于他人更好地理解你所提出的问题。

小伙伴们写下了 30 条留言

  1. 非常感谢开发这个工具,请问这两个例子不能删除吗,我删了recipe_list.txt,就报错了。
    另外,能否开发一个功能,就是不要推送,保留在云端,因为有些杂志文件有点大,推送可能失败。

    • 例子可以删除,脚本文件直接删除即可,内置的需要清空 recipe_list.txt 里面的内容。不过考虑到在使用过程中有可能永远不需要内置 Recipe,我会更新一下让项目允许删除这个文件。

      关于“保存在云端”,你想要把文件保存到什么地方?我想到的是,可能需要配合其他可以调用 API 的云存储服务(如 Google Drive)。已支持临时存放云端,请参考文中“下载文件”一节。

      • 我也有这种需求,有些报纸往往转换成epub后超过50m的邮箱附件上限,导致推送失败。
        如果可以增加生成epub后,通过webdav协议上传epub到指定地址就更好了。

      • 或者这个方案也可以考虑,压缩新闻报纸的jpg图片,如减少图片分辨率、降低jpg保存质量等方法,将epub文件整体压缩成50m以内再推送

          • 谢谢,但我使用的是calibre的内置recipe,请问如何设置压缩图片的参数开关呢?

              • 非常感谢,我就是从这个库里下载的,BBC和科学美国人是正常的,但是经济学人就不可以,the times mag看上去是文件尺寸的问题了。如果保存,是否可以就保存在github上吗,比如说保存一个月。

                • 刚更新了一下项目,添加了临时保存电子书的功能,最长可存放 90 天,你可以在工作流详情中找到“Artifacts”下载打包好的文件。文中也更新了相关内容以供参考。

                  • 在Recipe中增加compress_news_images = True后,目前都正常了,我再学习一下,万分感谢。

      • 下载文件这个功能,需要重新配置一次吗,之前的有配置过吗?另外,如果是双周刊,时间上怎么设?谢谢!
        还有一个就是The Economist看上去很不稳定,其它几个都正常,不知道是什么原因。

        • 如果你用的是 Fork 方式同步一下就可以,如果是用的是复制模板的方式,需要手动更新一下相关文件。如果想要半个月推送一次可以用 0 22 */14 * *。如果脚本与预期不符,建议在本地测试没问题后再上传。

  2. 39
    smtplib.SMTPAuthenticationError: (535, b’5.7.8 Username and Password not accepted. For more information, go to\n5.7.8 https://support.google.com/mail/?p=BadCredentials 6a1803df08f44-6ac162ef6d8sm21378366d6.103 – gsmtp’),部署时出现这个错误,请问该如何处理,我用的邮箱是我的gmail,为什么会提示邮箱和密码不对呢?

    • 你可以用 GitHub 的在线上传功能,即你的项目库文件列表右上角的【Add file → Upload files】,把脚本文件上传到项目根目录。也可以用 Git 工具提交。

  3. 很棒,已经部署成功,感谢作者。
    有个期望不知道是否能实现,每个推送都相当于一本书,有什么办法能设置时间定时删除推送的新闻吗?否则越来越多,而且新闻也没有必要留存。

    • 如果不想存档,登录亚马逊网站进入“管理内容和设备”的偏好页面,找到个人文档设置的存档功能并将其关闭即可(发送的邮件都会存到邮件的发件箱,也没必要存档)。不过 Kindle 没有定时删除电子书的功能,除非你的 Kindle 已经越狱,否则没有办法“自动”删除推送的电子书。

  4. 有没有中文报纸的脚本啊?看到脚本全英文的,想看经观报有脚本吗?

    • 内置的中文目前有以下几种。如果没有,并且你要看的内容是开放的,可以自己写脚本。

      • 中時電子報
      • 人民日报
      • 日本経済新聞(朝刊・夕刊)
      • 日経新聞電子版(Free, MAX)
      • 日経新聞電子版(MAX)
      • 星島日報 (香港)
      • 時事通信
      • 毎日新聞
      • 毎日新聞(Science)
      • 河北新報
      • 联合早报网 zaobao.com
      • 聯合新聞網
      • 自由電子報
      • 蘋果日報 (台灣)
      • 蘋果日報 (香港)
      • 费了很大劲终于写个recipe,因为我要抓的网站大多数内容是用JS更新的,目前只能抓少许简讯数据,对JS更新的网站没什么好办法吧?还有recipe_list.txt要取消掉,只在calibre-news.yml找到一行done < recipe_list.txt,取消要注释掉多少代码能说下?

        • 对,抓取 JS 生成的内容需要用额外的技术实现。不需要内置脚本,清空 recipe_list.txt 里面的内容即可。

    • 感谢楼主思路,写 Recipe 后有点感想,对本文作些补充。

      基本上网站分 HTML 和 JS 动态两种,HTML 难写点,而 JS 动态我碰到的直接是 JSON,反而更方便了,下面我提供下 JSON 解析思路,需要一些基础知识,不负责教会。

      首先:Chrome 浏览器访问网站按 F12 键,右侧点【 Network → JS 】,按 F5 刷新一下找到 JSON 网址,用浏览器访问确认一下,基本上 JSON 是包含在 {} 中的数据结构,可以拷到 https://jsonlint.com 验证 JSON 数据结构。

      然后,编写 Recipe,大约有下面代码思路,不细写,能看懂就看懂

      import urllib
      import json
      
      url="your json address"
      news = json.loads(urllib.urlopen(url).read())['data']  # 我示例网站把数据组放在data名下,可在jsonlint中看出数据结构名称
      for new in news:
      url=new['m_url']  # jsonlint中找出URL地址
      title=new['title']  # jsonlint中找出新闻标题

      剩下的参考 Recipe 标准模板写,Python 注意代码缩进对齐,感觉比爬 HTML 代码更简洁。

      随便用几个 JSON 就生成了 500 页电子书,有的看了。

  5. 感谢,成功部署。提一点建议:推送过来的文章,里面的字体不是很好看,影响体验….能不能优化一下。

    • 电子书中的文本样式可通过 Recipe 脚本自定义。比如你想要设置字体,可修改脚本中的 extra_css 属性:

      extra_css = 'p { font-family: serif; }'

      其实通过 Recipe 脚本可以非常精细的按照自己的需要优化电子书的排版,具体可参考其 API 文档。同样,还是建议在本地测试好后在上传到项目中。

      但是这个方法对内置脚本来说有点麻烦。为解决这个问题,项目会添加一个为所有脚本附加 CSS 的功能,和封面一样,可以把与 Recipe 同名的 CSS 文件放到 styles 文件夹中。

      需要注意的是,通过 Send to Kindle 推送到 Kindle 的电子书好像不保留字体样式,你需要通过 Kindle 的字体设置功能才能更改字体。