fugary / calibre-web-douban-api Goto Github PK
View Code? Open in Web Editor NEW新版calibre-web已经移除douban-api了,添加一个豆瓣api实现
License: Apache License 2.0
新版calibre-web已经移除douban-api了,添加一个豆瓣api实现
License: Apache License 2.0
calibre pc版的插件已更新豆瓣封面问题了。请问,docker版本的calibre-web DouBan.py 会更新吗?
2021-11-19 07:37:35 | stdout | 下载书籍:https://book.douban.com/subject/27194530/成功,耗时1881ms |
---|---|---|
2021-11-19 07:37:35 | stdout | 下载书籍:https://book.douban.com/subject/35217390/成功,耗时1860ms |
2021-11-19 07:37:35 | stdout | 下载书籍:https://book.douban.com/subject/25985021/成功,耗时1622ms |
2021-11-19 07:37:35 | stdout | 下载书籍:https://book.douban.com/subject/26953606/成功,耗时1587ms |
2021-11-19 07:37:35 | stdout | 下载书籍:https://book.douban.com/subject/26768418/成功,耗时1154ms |
2021-11-19 07:33:40 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=11, family=10, type=1, proto=0>: Expected GET method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03:Þ:¸±_åÎ9\x10\x02ZÁ\x87Îb¿ö\x8fb¸õÙu÷Þ¾sß\x95Ò\x10 S\x92Êyê\x9fÉd\x88O#Ød\x88\x9b\x95?\x11Ò\x9cî\x1a5Ô\x7f\x84§ëÕÒj\x95\x00 \n' |
2021-11-19 07:33:40 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03$¤z2´Ùeô÷Å\x8e\x1a\x0bG^³\x9a\x82à\t\x92pk"¤\x97¤Ç[äÜo º(!\x9c±\x14?£d\x1anÙ;\xa0\x96púÃ~Éñ%&âßój\x0f\x97¾\xa0n\x00 ÊÊ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ºº\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:40 | stdout | <gevent.socket3.socket at 0x7f39e14b8ee0 object, fd=11, family=10, type=1, proto=0>: Expected GET method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03ú1¡\x12\x03\x8cæÎYßâë|\x0f\x86\x17~§Ê\x1c$R\x03ÓMÊ\n' |
2021-11-19 07:33:40 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x031b'S\x1c\x17þ\xa03\x941\x86×*\x8eA\x8e!Í\xa0yú.\x07i\x9f\x92cÚÑD¹ 3j{cÉÀÏ¢.\x89Ä\x02\x01dk\x91\x876·bö¦\x00Ó¦f\x9f%r);,\x00 zz\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93jj\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n" |
2021-11-19 07:33:39 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03[YI\x08Ç}§\x18²S\x83~ý\x90gÆzÂ\rì ~\x0fm\x86\tÐð:\x16d\r Nù\x92-ù\x85Çz1\x07°JÁ\x10|ßúf} ¬ÁpS\x9dDø\x8f\x96ìëÇ\x00 jj\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93úú\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:39 | stdout | <gevent.socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03±\x8bk`9k½\x96Tkþmª£\x99§ü\x0fíR)U\x07mw\x05\x13Õ\x1ai\x94¶ ?þQ/.ðv}ã¡\x1f\x02\x14\x82\x94\x06;\x88\x8dãF»k¯S¬Æ ¨ä@\x00 ZZ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ªª\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:39 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03ö\x13¡#0\n' |
2021-11-19 07:33:39 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03ä\x83Úbaæ[\x82Bk^*¾\x03µTå`\x86p\x89³\x8b\x9eç)\x1eêz¤\x80ô LJ@ô ÑÁI\x92ßÂ\x9aÞ\x9f]&\x10O\x9bï\x18\x94ÖúÇÛ\x8cÀ&\n' |
2021-11-19 07:33:38 | stdout | <gevent.socket3.socket at 0x7f39e14b8fa0 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03à$ìaa|\x0c\x88µ\x15%uNYg·\t¹½ZçÇ?¬?\x18/Ñ"àÊ úa\x96\x8a\x02û\x99e\x9f3çs£é¦ê\x90mêWy+Ûrgch\x0cò\x88\x00 \n' |
2021-11-19 07:33:38 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03/\x1b;\x97\x925\x9fB\n' |
2021-11-19 07:33:38 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x035\x1d\x1asà§\x92ʲ\x04\x91µ\x98²×\x1cNâEi\x19\x1eÛ±$¿ÔË:g\x83¯ \x8fn\x08qu~]°/\x1a\x80êÉi¿±îíÎõÎ\x8dW>Í\x1fy¸^ßÄ:\x00 úú\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93\x9a\x9a\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:38 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03Ãx\x8e\x15\x1f\x11¤\x07:îµé\x83¦âÅ\x1dÂ\x9aÚáY\x91ÊØ\x13¡}ü@\x04@ ÁWϨ?#Bƾð\x16omñ\x87IZì\x91çÃzNmк¦ Í'\x16E\x00 ::\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93jj\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n" |
2021-11-19 07:33:38 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=10, family=10, type=1, proto=0>: Expected GET method: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03ͱõ¦z=鲶='¥Ù\x94bü5Þ\x89R\x14Hêäúo9\x8c\x1bgòê \x81\x88\x04ê\\x83ýQÜ*ìmµ±\x10\x8e\n" |
2021-11-19 07:33:38 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03äÄÙ£i\x13\x83ï\x90V\x11G\x14\x98¨o\x99\x1fô\x15¹T\x9beÒ\x07\x1eh\x86±\x14J \x81+\x04ðVªÃi-b³\x05)´Ó¶Å£D-\x19ÌVVR/\x9a\rþȲx\x00 ºº\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93\x9a\x9a\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:38 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03Ó«ßöÓOøæñ(\x05X]äs\x8b\x18\x94ð\x15K=Ë\x18réó\x9c\x9eB\x88[ 8\x1c\x95ÿ,\x06e0C\óÒ\x9e2\x88J\x90\x88.[Ry\x0e»\x8a£ªºX\r#¶\x00 ºº\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93\x8a\x8a\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:38 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid http version: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03W\x9a\x1f\xa0h3|;*Â\x85WÓåâÑeòÁüôJº%2O<\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03;\x15s\x14\x07ûô²1äI^Ð\x92?Ø»26À\x01q+.\x98\xad\rM¤úÃù ÿ\rpÕåRðã(#òëZó¥*ò»\x087L\x13]0\x0ew\x83o= ãZ\x00 ::\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93**\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03ºxDC\x1añg\x85Ñ?:Ó,\x1b\x94\x9aI\x04·(\x05ÂY0J\x9a]ú×\x82\x0f\x94 ?©Ê52V(º\x82u/F\x12¨¼Z¤HÓ3\x15+¶\x0bO\\x81\x83\x12µZÑ\x00 úú\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ºº\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03[¥\x1fShÝ6ÂÏ0rbß\x15Å\x84Ô\xa0\x95ew&`\x05-ÞÞü\x98\x02)\x0b <!\x9bgNÈ\x1aÕ=\xa0\x94CH\x17¾øzÇð\x05¤[Ð~ñb%Ú\x83\x17gÚ\x00 \n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03²\x1e\tCÓ\x91K\x1f\x90Í\x93j\x83\x8c¾lå²\x7fiÁ%Ñ/ïÕ\x8aa\x98°\t\x91 Ò0Þ2"å\ó-ª]L[\xa0\x9a_Ùlxç\x00sVÕï@Ì6%g¦e\x00 ::\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ÚÚ\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03÷9\x9e\x8fî_HKÀxY\x0c8j\x82Y:\x17iï\x0f\x9cð\x10\x00H\x07ÀI\x99¸\xa0 \x82®\x8cÏ\x1f\x03\x9bnb\l«~Eáx%ôq¤¬\x10Y\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid http version: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x99\x96\x0e\x00\x03\x08Ä#\x1b\x93ö\x7f'$V\x89Â)\x10H\x08s\x9fçùq{ºêg\x07\x0f (\x06\x90\x7f\x06\x15Û\x1al\x06,¨Í{ǧ»g3Úêö3\ëM\x17¾çJ^°\x00 ºº\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ªª\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n" |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03ò\x07Ao\x97·Ä4\x8dÙ%\x9bê\}h\x96\x04\x07\x13ż\x86~p´\x0cÄ\x7fÁM+ )Aeá\x05ê\x17ø\x1d\x9c\x01ð&\x9e\x9bÙìK\x17Þ¤û\x94UËø0_ñ\x8dq)\x00 ªª\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93**\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03Þkº{\x7fp\x88\x1a~Ì\x88\x98*Íö3ÞÙÿó\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x037~<\x93ñ\x19\x02*[\x90=À\x87ÿ»ÃX\x03ÿ\x99\x1f+vÔ,J\x86\xad\x93\x8eü\x99 \x89oÁ\x81@\x98\x8e\x95å\x8a®\x8e}VÄ,~³\x07\x12òÚ©ÓW¾ôWá\x0e\x14§\x00 ZZ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93zz\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x13Ê\x96ÄB÷\x12'õ¦©\x11\x19¼Â\x8cE\x01ÆÄú\x88\x1dÃË©ì<\x82\x9f\x89\x82 \x0fàMá\r³y«eH\x91Ó\x9fÓÝÌ°O>ª\x9dðRÜ\x08ó9ëOÈJ\x8c\x00 JJ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93\x1a\x1a\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n" |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x1cß"!¼ZÂpȹ\x05ÇÄ°\x1fJ¤²Ò^\x97±\x10èÙ\x981ë\x18ã»e ÁWx\x16¡¾\x12É\x8b©<½£VPr2\x1f\x84\åר'z\x8aU1\x0c\x94\x96Ï\x00 ZZ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93**\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03Ú;\x18É\x11\x0c\x0b\x80d\x95û0øÙ)/§\x1f?\xad\x03±¹ÜØo\x02¼¬ìaq R¾Es\x84±\x8dÀzÜ¿PR\x88\xa0,\x82ù5²\x89\x00\x94ëgáóÒ\x7fÕ(ì\x00 \x1a\x1a\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ZZ\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=10, family=10, type=1, proto=0>: Expected GET method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x033\x9erî<Ä\x8a¸¹*ªk\x0c\x08©§P\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03>\x9duªj\x87¯ÐQ-Méf\x94N\x0c;ëFØ\x80\x83K;\x94\x7fÞçG\x0fÞS Ê\x9dè¶ÖN-ÓN·\x8c\x87fÐO\x1e\x90C½¡Öjaz\x06\x11Õ\x81Ú²ãÄ\x00 ZZ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93**\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x86NL}O_X/Ð\x88Z\x95,£"j°Û©\x82¼/F\x05\r±\x99¹\x8aSòÉ UÇ\tÂO\x91¥"\x01kÛ4\x83|,ê\x0e\x11!Ò5COý`|vû\x13Ò©\x06\x00 úú\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93\x1a\x1a\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03غÅìö\x0fµü¨êí¹§î}\x8b#v(ò¾ßsÚ¢q±\x08O}å\x87 Ç2w,\x14aH,Ï/\x11Ì\x95úà©\+Ó<?P\x1d¾\x9c\x9cÇ\x9e×[¹:\x00 êê\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03¯\x02=ZZ\x89 áá\\x1bôhÏ\x80yc°Ê\x9aÓ±fBw?8\\x0bV\x150 ©SÜf¼\n' |
2021-11-19 07:33:37 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=11, family=10, type=1, proto=0>: Invalid http version: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03BG§¹5û^4\x1a3\x10\x0fÉ\x81rxT\x1f¯ñ0\x9c4%1Ñç?@\x8c\x13§ \x95#%\x97Û¤Ç\x12æô¨¡Ö\x87²ü¯\x9aö\n' |
2021-11-19 07:33:36 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=10, family=10, type=1, proto=0>: Invalid http version: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03"7F9úÚ$ôÓ\xadÐÔ"+kÜÐqf®Íª&\x81\x93ÕÔ07if¼ (\x16s«æët\x00£\xad´V>γ´1Á\x02\x05½ò!\x93ü¢«Ò,Pob\x00 ÊÊ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ZZ\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:36 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x19\x7f\x10Ia!nç¨4\x16¤Æg\x96\\x19\x12è%RÌ\x06W\x1f°ï*ÛyÞ\x16 4øSs~-µ5\x08eÖ\x92n{\x93Yjß<Óq«£´^D;}×Û\x0c0\x00 jj\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ZZ\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:36 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03$0Ó\x16´×\x15FHWVLV\xadOVfßTùÒOú\xa0½Îù<zC\xa0ý à{µ¿qy_gØOé\x90·\x12\x94\x85\x15çàùf(Áµ}¤\x05S¬nÚÊ\x00 úú\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ºº\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:36 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=11, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x9d7\x1dçjMQî\x88\x81ümj³áì\x8c\t£ó\x1eSü4¯[\tÁ\x9e-º+ \x86;Å\x8e\x1e\x832y»£²¯\x1b\x0e|\x06÷ÈÓ\x0eq5ì6\x873\x95=l\x14!N\x00 ÚÚ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93\x1a\x1a\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:36 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\n' |
2021-11-19 07:33:35 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03Þ¦¶\x80\x1fÄ[´z\x10÷æÒj,TÞÿ¤ÌðÍû\x14¡e´å¥\x1cW \x04ÿ\x18Î0ßg\x10l£á$KçÆw #\x94Ô`?ý\x13¦¾<n*iÝ\x86\x00 \x9a\x9a\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ºº\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:35 | stdout | <gevent.socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03H\x0c)9¢0,6\x8e\x95^l7©»o)6T¤B/L\x85P?\x9cí\x93ÇÍ7 c"ð6¼1\x12äYµ\t\x14i¿ã\x86\x12ì\x17æ\x12(ø}=]g½Ïüs\x00 êê\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93\n' |
2021-11-19 07:33:35 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid http version: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03c|\x8e/<ßÉ\L!\x8d\x10nÛ\x97}y¬9.èè\xad;¿hêt3OÍ\x96 \x98ö\x12a\x88\x9eÔâm.æÅSláGjmÜöæ\x8bëc~¬º\x0e\x9f<î¼\x00 êê\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ºº\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:33:35 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=11, family=10, type=1, proto=0>: Invalid http version: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03ÁÇ×\x91¥Ærá+a\x9cìd\x15æÐ\xadnoZMxú^E\x06øE\x94Ù\x8a\x9d m0QÖ¾zw)6ÊoÒ\x0f.jÒ\x0c·á\x96.\x8fÝ\x9eFg'iI¼\x8f¿\x00 \n" |
2021-11-19 07:32:48 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03óóJ>Ïð±´¶\råË>Øuå4\x81RJAzδSìÔ&ÓT\x81p uê¼°\x13½¼ãJ\x12¥ºNu°ÓÄ\x92\xadÀ\x96;¯\x82¾\x86*ÕëòÑ\x1c\x00 êê\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93**\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:32:48 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=9, family=10, type=1, proto=0>: Invalid http version: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03óV'\x9dϬ7\x8e.¹\x9dP´\x14M\x01\x95\x9a¬±|\x08\x7fªêÕ»X×\x01xÍ eò\x18þQ©=Ö\x99VÐ\x8d\x1bþI\x82.¨\x81\x89\a\x86¢\x15·£\à\x94\x05\x8c\x00 êê\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93JJ\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n" |
2021-11-19 07:32:48 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03cÐA\x89e\x80ý\x81¡UÎYB^À\x17/¤i\x1c\x01U'\x10·»@\x17tyIb \x18@\x83³\x1cÕ\x04´ö\x1dKÅ\x86ß©PËf\x10\x85å\x9dvó\x11äDÚ'¬ò\x9b\x00 ºº\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ºº\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n" |
2021-11-19 07:32:48 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=9, family=10, type=1, proto=0>: Invalid http version: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03%Ç+\x07U¾%\x8fz±mxÐj\x95s)J~\x0fÇz¸*ìD\x98\x97l¥â% q,fo\x17\x13(\\Ðkþ\x08]®EßN\x8b[ü\x18Rgç\x8c\x9d\x9b»X½W\x00 **\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ZZ\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:32:45 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x84\x93lÉ?{AR\x19ê*är׸à)\x10áf¤\x0bÒ@sä#\x05ÏX±| \x1b\x8a`\x80ï\xa0âùICXä\x1bS¤BBV0Ç?ö ©\x98\x8b\x9fB¶¬¢Ò\x00 ÊÊ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ªª\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:32:45 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=9, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03ðüé\x8a$È\n' |
2021-11-19 07:32:45 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x9d¶£Ãmêg\x9b¼ùDXÖ¿L4¢ÍGº\x87\x8bG4o\x9a0Þ%\x97\x9eÞ ù\x8b\tV£J\x02ª\x06X\x99âFÿ׳Z¯\x8bërÛ´"_Þxß°\x08,\x04\x00 JJ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93\x9a\x9a\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:32:44 | stdout | <gevent.socket3.socket at 0x7f39e14b8fa0 object, fd=9, family=10, type=1, proto=0>: Invalid HTTP method: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03ÌÖ'UD©OÕ\x97ÖyÁ\x95\x14²<Ø1£çuËon¦Bld5ãçâ \x1f\x92ð\x19^Þµ¼\x1be§üË,¶\x1dþ[«Ýd½\x1dÜãv4\x97×\x04y\x00 zz\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ÊÊ\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n" |
2021-11-19 07:32:44 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=9, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03,ÙT\x80JuD\x96ÏÓì\x15!õTñ\x00Iý>?Q£.Dè\x11¿\x9añÉ^ \x08NJ(\x80|îb\x9c\x1bÛ~fp˨C¸Á\x1bBXÁ ¨\x97\\x1e}yU¯\x00 **\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93úú\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:32:44 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=9, family=10, type=1, proto=0>: Invalid HTTP method: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x1dnç\\x8d\x19ú\x93éÕo'\x7fTI1aßÕbâö2T|\x93îÑçrRï Î\x13\xadj¸¶ÈË©³ÁY\x8b\xade÷¥z¡\x04§IÍ4±³ÉþvqLæ\x00 \x9a\x9a\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93::\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n" |
2021-11-19 07:32:44 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03P\x81/\x8b¡\x8cÛé\x16\x01\x0cJ×¾ôêÒ\x92\x1f²\x1dìÑ\r«;¡\x1cÿºÂ\x88 î\x93p\x13ò\x14\x8fÑb\x85öé)D¸gè\x07Ã\x15\x8a\x9e÷>9kB\x1ah\r\r1\x00 ªª\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93zz\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:32:44 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=9, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03z~yÝëÐ+\x81*Á\x92\x83<4\x9fèò\x95\x05À¡\x1eÍÒ&:V§!LFÇ ìª)\x02õ¯\x99£:0uk¯Þ÷\x8d\x1cfy|ª»NÕòðõÉAråÏ\x00 jj\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93\n' |
2021-11-19 07:32:43 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03¸HÊ[ïÿ\x17-\x89'ëR?XÔª¹\rí"\x86\x04"£¶\x1cÜ\à¿\x9aU r\x02\x96\x1c$\x95õª&E\x12\x1anV\x8b3\x8döñÈÏ\xadf\x13©òR4®ïÔ\n' |
2021-11-19 07:32:43 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=9, family=10, type=1, proto=0>: Invalid http version: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03úYk6¢\x9aI\x1cGºæÜì¢wÇ\rä\n' |
2021-11-19 07:32:43 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03Dðî\n' |
2021-11-19 07:32:43 | stdout | <gevent._socket3.socket at 0x7f39e14b8fa0 object, fd=9, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x88\x9b0\x93\x06\x15¤\x06Üw\x8câ\x91ae\x03\x83ãµÁñ÷ìE¨\x08.]óÔ¤{ vN[9åÃö}Ã\x1eÔ\x04\x0c!\x92û¼\x07\n' |
2021-11-19 07:32:32 | stdout | <gevent.socket3.socket at 0x7f39e14b8fa0 object, fd=10, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x14âÎË|Àªî\x83ï\x91\x9a¶¼wÏ%K\x98\x9aY]\x13ft\x01úR\x8eb\x93 \n' |
2021-11-19 07:32:32 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=9, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x07¶3ü<Ñ\x0büd\x95w\x83nrñ<\x00¥½\x85»A\vq\x18ì^<;\t\x0f Òùª\x0f\x10Z2L\x82\x1ac)\x19.íc¨\x81uÛH\x15\x99|9/àÇ>ÃGÏ\x00 ºº\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93jj\x00\x00\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00\n' |
2021-11-19 07:32:32 | stdout | <gevent._socket3.socket at 0x7f39e14b8ee0 object, fd=10, family=10, type=1, proto=0>: Invalid http version: "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03B¤ã\x8bm@'¼¶c\x87\x81¸°\x16öG/öpÈÑ\x06ë½±d4\x19\x7f \x05 \x9f\x82Ð\x0e-û\x99(CW\x9dÀv\n" |
2021-11-19 07:32:32 | stdout | <gevent._socket3.socket at 0x7f39e14b8e80 object, fd=9, family=10, type=1, proto=0>: Invalid HTTP method: '\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03õI\n' |
但是界面并没有显示,显示加载失败,想请教一下是什么原因,谢谢
我的操作步骤如下:
sudo -i
,输入密码进入root权限。johngong-calibre-web:/usr/local/calibre-web/app/cps/metadata_provider
下的douban.py。docker cp NewDouban.py johngong-calibre-web:/usr/local/calibre-web/app/cps/metadata_provider
,在群晖docker里能看到NewDouban.py已经成功复制进去。1、作者的链接变由/author
变为了/serach
def author_filter(self, a_element):
a_href = a_element.attrib['href']
return '/search' in a_href
2、简介内容上层div标签不完整导致包含简介之外的其他内容。剪去</div>
之后的内容
book['description'] = ''
if len(summary_element):
summary = etree.tostring(summary_element[-1], encoding="utf8").decode("utf8").strip()
book['description'] = summary[0:(summary.index("</div>") + 6)]
怎么启动
描述如题,用的镜像是linuxserver的,挂载.py文件到 /app/calibre-web/cps/metadata_provider/NewDouban.py。容器连不上。。不知是挂载目录有误,还是我忘了做哪一步。。
05:55:03 Traceback(most recent call last):
05:55:03 File"/app/calibre-web/cps.py",line 40,in
05:55:03 from cps.search_metadata import meta
05:55:03 File"/app/calibre-web/cps/search_metadata.py",line 48,in
05:55:03 importlib.import_module("cps.metadata_provider."+ a)
05:55:03 File"/usr/lib/python3.8/importlib/init.py",line 127,in import_module
05:55:03 return _bootstrap._gcd_import(name[level:],package,level)
05:55:03 File"/app/calibre-web/cps/metadata_provider/NewDouban.py",line 7
05:55:03
05:55:03 A
05:55:03 SyntaxError:invalid syntax
获取元数据后,不能正常保存。会提示“标识符不区分大小写,覆盖旧标识符删除图书”,也会出现只能删除数据库记录的情况。似乎是获取的数据格式不兼容。
calibre-web 0.6.21
搜书的元数据的时候,搜索页无结果。第一行显示 搜索错误,第二显示 加载中...再后面都是空白。
单选google刮削结果能出来
单选douban不行
双选google和豆瓣也不行。
下面是日志:
[2022-02-24 20:00:54,033] ERROR {cps:1457} Exception on /metadata/search [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 2073, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/usr/local/lib/python3.8/dist-packages/flask_login/utils.py", line 272, in decorated_view
return func(*args, **kwargs)
File "/app/calibre-web/cps/search_metadata.py", line 133, in metadata_search
data.extend([asdict(x) for x in future.result()])
File "/usr/lib/python3.8/concurrent/futures/_base.py", line 437, in result
return self.__get_result()
File "/usr/lib/python3.8/concurrent/futures/_base.py", line 389, in __get_result
raise self._exception
File "/usr/lib/python3.8/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
TypeError: search() takes from 2 to 3 positional arguments but 4 were given
大佬您好!我使用群晖johngong的docker版本,calibre_web版本是0.6.18,将metadata_provider文件夹中别的文件全部删除,只留了NewDouban.py一个文件,搜索时结果是空白,请问有可能是哪里出了问题?
在豆瓣刮削太多次会出现错误(大概50本左右吧),第二天就好了,不管是calibre-web本身的豆瓣还是这个插件好像都有这问题,作者有遇到吗
成功添加了NewDouban 的源,并且可以更新除封面外的所有元数据。
calibre-web 报错:下载封面时出错
手动尝试把豆瓣网页上,书籍封面的链接填写在元数据表格中,有的可以成功获取封面,有的不能,报同样的错:下载封面时出错。
我使用豆瓣获取图书信息后,在封面那一览会自动填入封面网址信息,但是每次都会出现错误提示:
“You are not allowed to access localhost or the local network for cover uploads”
但同时也提示:已成功更新元数据
如果把封面那一栏留空,就不会出现这个。
请问这是什么问题?是我哪里没有设置好吗?
补充一下,上传电脑中的图片就没有这样的问题。
23年12月
系统:威联通 NAS
安装模式:johngong的calibre-web docker。配置正常,可正常运行。
docker内的环境:
calibre版本 0.6.21 python版本3.11.6 flask版本2.3.3 requests版本2.31.0
安装脚本后,进入获取元数据页面,可以看到new douban books这个tab。
能正常显示douban的书籍信息、包括封面、isbn、简介。
点击某个封面能正常获取除了封面之外的其他数据。
就是无法获得封面图。
与issue #5 的问题相同。
主要是因为上游[4f3c39]中对cps/search_metadata.py
和cps/services/Metadata.py
的更改。
Metadata
的search
方法增加了locale
参数,并修改返回类型为List[MetaRecord]
。
也就是说版本0.6.17对metadata_provider产生了breaking change,无法与前面的版本兼容了。
以下为日志:
[2022-03-11 05:07:57,224] ERROR {cps:1457} Exception on /metadata/search [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 2073, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/usr/local/lib/python3.8/dist-packages/flask_login/utils.py", line 272, in decorated_view
return func(*args, **kwargs)
File "/app/calibre-web/cps/search_metadata.py", line 133, in metadata_search
data.extend([asdict(x) for x in future.result()])
File "/usr/lib/python3.8/concurrent/futures/_base.py", line 437, in result
return self.__get_result()
File "/usr/lib/python3.8/concurrent/futures/_base.py", line 389, in __get_result
raise self._exception
File "/usr/lib/python3.8/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
TypeError: search() takes from 2 to 3 positional arguments but 4 were given
添加传入参数后:
[2022-03-11 05:28:23,011] ERROR {cps:1457} Exception on /metadata/search [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 2073, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/usr/local/lib/python3.8/dist-packages/flask_login/utils.py", line 272, in decorated_view
return func(*args, **kwargs)
File "/app/calibre-web/cps/search_metadata.py", line 133, in metadata_search
data.extend([asdict(x) for x in future.result()])
File "/app/calibre-web/cps/search_metadata.py", line 133, in <listcomp>
data.extend([asdict(x) for x in future.result()])
File "/usr/lib/python3.8/dataclasses.py", line 1072, in asdict
raise TypeError("asdict() should be called on dataclass instances")
TypeError: asdict() should be called on dataclass instances
对DoubanBookHtmlParser进行修改后可以正常使用:
def parse_book(self, url, book_content):
book = MetaRecord(
id = "",
title = "",
authors = "",
url = "",
source=MetaSourceInfo(
id=PROVIDER_ID,
description=PROVIDER_NAME,
link="https://book.douban.com/"
)
)
html = etree.HTML(book_content)
title_element = html.xpath("//span[@property='v:itemreviewed']")
book.title = self.get_text(title_element)
share_element = html.xpath("//a[@data-url]")
if len(share_element):
url = share_element[0].attrib['data-url']
book.url = url
id_match = self.id_pattern.match(url)
if id_match:
book.id = id_match.group(1)
img_element = html.xpath("//a[@class='nbg']")
if len(img_element):
cover = img_element[0].attrib['href']
if not cover or cover.endswith('update_image'):
book.cover = ''
else:
book.cover = cover
rating_element = html.xpath("//strong[@property='v:average']")
book.rating = self.get_rating(rating_element)
elements = html.xpath("//span[@class='pl']")
book.authors = []
book.publisher = ''
for element in elements:
text = self.get_text(element)
if text.startswith("作者"):
book.authors.extend([self.get_text(author_element) for author_element in filter(self.author_filter, element.findall("..//a"))])
elif text.startswith("译者"):
book.authors.extend([self.get_text(author_element) for author_element in filter(self.author_filter, element.findall("..//a"))])
elif text.startswith("出版社"):
book.publisher = self.get_tail(element)
elif text.startswith("副标题"):
book.title = f"{book.title}:{self.get_tail(element)}"
elif text.startswith("出版年"):
book.publishedDate = self.get_tail(element)
elif text.startswith("丛书"):
book.series = self.get_text(element.getnext())
summary_element = html.xpath("//div[@id='link-report']//div[@class='intro']")
book.description = ''
if len(summary_element):
book.description = etree.tostring(summary_element[-1], encoding="utf8").decode("utf8").strip()
tag_elements = html.xpath("//a[contains(@class, 'tag')]")
if len(tag_elements):
book.tags = [self.get_text(tag_element) for tag_element in tag_elements]
return book
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.