cdhigh / KindleEar

Aggregates RSS and web content(Calibre recipe), sends to Kindle, and includes an e-ink optimized online reader.
http://cdhigh.github.io/KindleEar/
MIT License
2.73k stars 630 forks source link

get_or_none() got an unexpected keyword argument 'user' #674

Closed Steven630 closed 5 months ago

Steven630 commented 6 months ago

用chrome插件做了个recipe,上传,高级设置手动立即推送。提示:Failed to execute recipe "주요뉴스 연합뉴스": get_or_none() got an unexpected keyword argument 'user'

另外这个扩展真的很好用,有三个小建议供大佬参考:

  1. 目录页面可选择获取不同section
  2. 目录页可获取文章发布时间,再设定时区/时间格式,方便筛选oldest articles
  3. 正文部分除了获取需要内容的规则,能否考虑增加remove rules。这样可以更快去除广告等内容。
cdhigh commented 5 months ago

你看我收到的内容是这样的

<a href="https://manual.calibre-ebook.com/news_recipe.html" target="_blank">
  https://manual.calibre-ebook.c<wbr>om/news_recipe.html
</a>
<div style="color:rgb(34,34,34);font-size:14px">
  <a href="https://manual.calibre-ebook.com/news.html" target="_blank">
    https://manual.calibre-ebook.c<wbr>om/news.html
  </a>
</div>

你的应用发送邮件时在网址的字母c后面添加了一个标签\<wbr>,所以导致解释错误。 现在的KindleEar提取链接逻辑是优先在显示的文本中提取,显示文本提取不到才到href属性中提取。

我以前之所以这么做是为了“所见即所得”,就是你发邮件时显示的链接就是最后提取的链接。 我想想怎么修改,现在有两个方案:

  1. 修改为优先使用href属性的值
  2. 提前删除\<wbr>标签

你的建议呢?

Steven630 commented 5 months ago

原来是这样。用第一个方案是不是更容易避免错误?另外Calibre的canonicalize_internal_url似乎也可以把链接不需要的部分去除掉(当然对这种标签是无能为力的)

Steven630 commented 5 months ago

或者可以先按原来的逻辑,要是出错了,再用href?收件箱的功能也很实用,期待。

另外这两天还在想避免重复推送的功能。有个recipe,每天只更新一篇文章,所以目录页面可能会有最近三周的二十几篇文章。一开始测试的时候设置最多推送3篇,本意是只看到最新的3篇文章。oldest_article设了2。如果更改了recipe重新上传,它第一天会把最近的三篇推送过来。接下来除了当天的文章,还会不重复推送之前的两篇文章。比如今天重新上传了,推送5.15、5.14、5.13,明天就是5.16、5.12、5.11,后天5.17、5.10、5.09(实际上双休日不更新,打个比方。)对于这种不常更新的网页源,不知道有什么办法。当然要是直接改成最多推送一篇也能解决。

还想到一个小问题。月刊推送,如果要每月自动推送,oldest_article无论选择30还是31,由于每个月有时30天,有时31天,时间一长日期就会错开。可能原来想要中旬推送的,过了几个月变成了上旬或者下旬,可能推送的时候月刊还没更新。不知道这样理解对不对?要是干脆改成每周推送,完全依靠已推送链接查重实现,那是不是每周KE都会抓取分析目录页,再比对文章是否重复?好像有点浪费资源。

cdhigh commented 5 months ago
  1. 收件箱功能已经实现,url提取bug也已修正。
  2. 防止重复推送的问题暂时没有很好的方案,这种情况还是建议使用传统calibre的方式写recipe,可以控制更多参数。
  3. 增加实现了一个按日期推送的设置,解决月刊推送的问题。
cdhigh commented 5 months ago

在高级设置的邮件白名单选项卡里面。 现在入站邮件会被转发。 我打算增加一个选项,可以选择仅保存不转发,在需要的时候可以关闭转发,就当一个最简陋的webmail使用,用来接收垃圾邮件还是可以的~

Steven630 commented 5 months ago

找到了,这个功能对GAE免费资源的消耗如何呢,只要没邮件就没事?每次收邮件都增加backend hours吗

另外能再教一下怎么手动清理临时文件吗,每周下TE,怕哪天就不够了。这个清理不会有其他副作用吧,比如避免重复推送的记录没了

cdhigh commented 5 months ago

打开dispatch.yaml就可以看到,只有/worker和/url2book才会消耗后台实例小时额度,其他的都使用前台额度。

dispatch:
  - url: "*/worker*"
    service: worker

  - url: "*/url2book*"
    service: worker

前端实例每天有28个小时免费额度,对于我们的应用来说,放心用。 如果还是有所担心,避免焦虑的方法是修改 app.yaml,将最大实例数也修改为1。

automatic_scaling:
 max_instances: 1
 min_instances: 0
 max_idle_instances: 1
 min_idle_instances: 0

app_engine_apis: true
entrypoint: gunicorn -b :$PORT -w 1 main:app

一天才24小时,这样就永远永远不会超免费额度了(至少对于CPU实例小时数而言) 至于数据库什么的,不要担心,免费额度足够。

临时文件会每天自动清零,不需要费心。

Steven630 commented 5 months ago

4月是这项:Artifact Registry Network Inter Region Egress Intercontinental (Excl Oceania),单位是gibibyte

5月最新的弄了半天也不知道该怎么展开细目

cdhigh commented 5 months ago

之前因为这个功能bug挺多的,我就想先屏蔽,既然如此,还是恢复好了,等以后慢慢改进。

同时,增加了一个裁剪内置recipe的功能,可以仅保留每个人需要的语种而删除其他语种,也能节省一些资源消耗,此功能也已经在文档中更新,部署时增加一行,比如下面的例子,仅保留:英文,中文,韩文。

rm -rf kindleear && \
git clone --depth 1 https://github.com/cdhigh/kindleear.git && \
chmod +x kindleear/tools/gae_deploy.sh && \
python kindleear/tools/trim_recipes.py en,zh,ko && \
kindleear/tools/gae_deploy.sh B1,1,t2,15m
Steven630 commented 5 months ago

-bash: git : command not found 用这个最新的出来这个提示,原来的没问题

cdhigh commented 5 months ago

原来是多行的命令,拷贝粘贴就行了嘛,你非得将它们都合并为一行,当然出问题,以前不出问题是偶然巧合。 如果你非得要一行,请将里面的斜杠去除。

rm -rf kindleear && git clone --depth 1 https://github.com/cdhigh/kindleear.git && chmod +x kindleear/tools/gae_deploy.sh && python kindleear/tools/trim_recipes.py en,zh,ko && kindleear/tools/gae_deploy.sh B1,1,t2,15m
Steven630 commented 5 months ago

好的,因为手机复制的,大概自动成了一行。以前还真都没问题,可能因为比较短

Steven630 commented 5 months ago

好像还是没有自动推送。明天早上再观察一下。刚才又用了邮件推送,正文只有五个链接,结果收到的是链接(书名是Kindleear+日期时间,作者是unknown),而不是链接指向的文章。

又试了一次,标题加了!links,推送正常了(书名是邮件名)。

另外可以把每个链接文章的标题提取出来变成目录标题吗?

cdhigh commented 5 months ago
  1. 说明链接提取功能还有缺陷,可以发到我的邮箱看看是什么格式。
  2. 理论上应该是要提取链接title的,但是这样就相当与同一篇文章联网两次,我再想想有没有好的办法。 邮件推送的链接最后相当与你在recipe里面写下面的代码, feed里面是需要提前提供title的,但是在邮件里面发送链接暂时没有好的方法,因为不想把格式搞的太复杂,就一行一个链接最符合直觉。
    feeds = [
    (title, url),
    (title, url),
    ]
Steven630 commented 5 months ago

刚发了邮件。

还有个小缺憾是语言好像默认都是英语

cdhigh commented 5 months ago
  1. 邮件链接中间又出现了很多“非法字符” <0x200b>,导致解释失败,看来还需要修正。
  2. 发邮件链接的电子书语言是对应用户设置的自定义RSS的语言,你修改这个语言即可。
Steven630 commented 5 months ago

明白了。可以在邮件标题那里再加个语言的参数吗,或者自动用第一篇文章网页的语言?大概还是太繁琐了

目录不用标题的问题,不知道能否在转换的时候尝试用h1或h2或干脆文章第一部分当作标题,是不是能避免两次打开链接?对这个还是不太懂

cdhigh commented 5 months ago

还是不能直接在邮件链接标签的a里面提取链接,这样就无法去除有些邮件客户端在邮件末尾添加的广告链接了,现在改回来先在文本中提取,提取不到再考虑到a标签里面提取。 现在发现 \<wbr>作祟,就先删除\<wbr>标签,等以后再发现更多影响链接提取的标签再升级。

现在的版本应该你不需要你添加 !links了。 额外的:

  1. 在邮件标题添加 !lang=ko 可以设置推送的语言代码
  2. 提前下载邮件链接并保存为临时文件用于之后生成电子书(仅下载一次),提取出标题用于目录
Steven630 commented 5 months ago

好的,我再试试邮件推送。昨晚更新到了3.0.6(可以过滤recipe的版本),今天早上定时推送还是都没有执行,手动是可以的

Steven630 commented 5 months ago

再请教一下费用,从5.14开始每天都有Artifact Registry的费用,而且在慢慢递增(如图)。不明白,是不是项目有什么东西占空间,并一直在增加?可能14号之前没超额度,14号就超了,而且越超越多。

Screenshot_20240520_214528.jpg

cdhigh commented 5 months ago

尽管查了一些资料,但是我还是不明所以,反正IT行业就是不停的造新词。 Artifact Registry 好像就是存储库,造新词感觉高大上吧,其计费不单按照存储容量计算,还计算数据传输流量,所以很难一下子确定究竟是什么子项目超了,你可以到GAE的配额页面搜索Artifact Registry,看里面有什么具体的信息?

定价信息可以参考: https://cloud.google.com/artifact-registry/pricing

这篇文章我看不懂,你可以了解一下是否和你的情况类似。 https://support.terra.bio/hc/en-us/articles/4408985788187-How-to-configure-GCR-Artifact-Registry-to-prevent-data-transfer-egress-charges

cdhigh commented 5 months ago

自动推送的代码有bug,已更新。 这个bug有可能已经在数据库创建了多个重复的 LastDelivered 项目,建议你在gae后台的datastore先将其删除,否则可能还是推送不成功。

cdhigh commented 5 months ago

!lang=ko !前面要有空格

dbSchemaVersion是在数据库结构升级后用来判断是哪个版本创建的数据库,然后才能有针对性的做兼容,不过只对SQL有意义,GAE使用NOSQL,所以这个字段没意义,你删掉后还会重建的,不管它就好。

Steven630 commented 3 months ago

大佬,反馈一下GAE费用的问题。后来我重新建了个项目,因为觉得当前功能已够用,初次部署后就没再更新代码。现在用了两个月都没有费用。看来以前的费用是多次用cloud部署产生的。奇怪的是以前一旦有了费用,每天都会有,哪怕接下来不再部署更新都一直有。

cdhigh commented 3 months ago

你这个反馈很有意义,说明是每次部署的代码都被暂存起来了,占用空间大小超过免费额度导致产生费用,我再研究一下gae文档,看有没有办法删除这些暂存的代码。