实例介绍
2024年5月1日 KindleEar 3正式发布
重要更新:
- 完全支持Python 3
- 重新设计的软件架构
- 跨平台支持,摆脱对GAE平台的依赖
- 支持Calibre的菜谱格式,无需修改即可使用
- 内置超过千个Calibre菜谱文件的库
- 集成双语翻译功能,打破语言障碍,轻松获取信息和学习语言
- 内置文本转语音功能,将每日新闻转换为音频,方便消化而无需阅读
- 包括浏览器扩展,无需编码即可轻松创建网络抓取菜谱,实现从任何网站无缝交付内容
简介
KindleEar是一个网页应用程序,可部署在各种Python托管平台或VPS上。
它可以自动聚合各种网络内容并将其每日传送到您的Kindle或其他电子书阅读器。
【实例截图】

【核心代码】
文件清单
└── KindleEar-980eb2611d9857561509fd08a7e7f8153ee32ff8
├── application
│ ├── back_end
│ │ ├── db_models_nosql.py
│ │ ├── db_models.py
│ │ ├── db_models_sql.py
│ │ ├── __init__.py
│ │ ├── send_mail_adpt.py
│ │ ├── task_queue_adpt.py
│ │ ├── task_queue_apscheduler.py
│ │ ├── task_queue_celery.py
│ │ ├── task_queue_gae.py
│ │ └── task_queue_rq.py
│ ├── base_handler.py
│ ├── images
│ │ ├── cover0.jpg
│ │ ├── cover1.jpg
│ │ ├── cover2.jpg
│ │ ├── cover3.jpg
│ │ ├── cover4.jpg
│ │ ├── cover5.jpg
│ │ ├── cover6.jpg
│ │ └── mastheadImage.gif
│ ├── __init__.py
│ ├── lib
│ │ ├── build_ebook.py
│ │ ├── calibre
│ │ │ ├── constants.py
│ │ │ ├── customize
│ │ │ │ ├── builtins.py
│ │ │ │ ├── conversion.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── profiles.py
│ │ │ │ └── ui.py
│ │ │ ├── ebooks
│ │ │ │ ├── BeautifulSoup.py
│ │ │ │ ├── chardet.py
│ │ │ │ ├── compression
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── palmdoc.py
│ │ │ │ ├── constants.py
│ │ │ │ ├── conversion
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── plugins
│ │ │ │ │ │ ├── epub_input.py
│ │ │ │ │ │ ├── epub_output.py
│ │ │ │ │ │ ├── html_input.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── mobi_output.py
│ │ │ │ │ │ ├── oeb_output.py
│ │ │ │ │ │ └── recipe_input.py
│ │ │ │ │ ├── plumber.py
│ │ │ │ │ ├── preprocess.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── css_transform_rules.py
│ │ │ │ ├── epub
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── pages.py
│ │ │ │ │ └── periodical.py
│ │ │ │ ├── html_entities.py
│ │ │ │ ├── html_transform_rules.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── metadata
│ │ │ │ │ ├── book
│ │ │ │ │ │ ├── base.py
│ │ │ │ │ │ ├── formatter.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── json_codec.py
│ │ │ │ │ │ └── serialize.py
│ │ │ │ │ ├── epub.py
│ │ │ │ │ ├── html.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── kfx.py
│ │ │ │ │ ├── meta.py
│ │ │ │ │ ├── mobi.py
│ │ │ │ │ ├── opf2.py
│ │ │ │ │ ├── opf_2_to_3.py
│ │ │ │ │ ├── opf3.py
│ │ │ │ │ ├── opf.py
│ │ │ │ │ ├── sources
│ │ │ │ │ │ ├── base.py
│ │ │ │ │ │ ├── identify.py
│ │ │ │ │ │ └── prefs.py
│ │ │ │ │ ├── toc.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── xisbn.py
│ │ │ │ ├── mobi
│ │ │ │ │ ├── huffcdic.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── langcodes.py
│ │ │ │ │ ├── mobiml.py
│ │ │ │ │ ├── reader
│ │ │ │ │ │ ├── containers.py
│ │ │ │ │ │ ├── headers.py
│ │ │ │ │ │ ├── index.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── markup.py
│ │ │ │ │ │ ├── mobi6.py
│ │ │ │ │ │ ├── mobi8.py
│ │ │ │ │ │ └── ncx.py
│ │ │ │ │ ├── tweak.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ ├── writer2
│ │ │ │ │ │ ├── indexer.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── main.py
│ │ │ │ │ │ ├── resources.py
│ │ │ │ │ │ └── serializer.py
│ │ │ │ │ └── writer8
│ │ │ │ │ ├── cleanup.py
│ │ │ │ │ ├── exth.py
│ │ │ │ │ ├── header.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── main.py
│ │ │ │ │ ├── mobi.py
│ │ │ │ │ ├── skeleton.py
│ │ │ │ │ ├── tbs.py
│ │ │ │ │ └── toc.py
│ │ │ │ ├── oeb
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── normalize_css.py
│ │ │ │ │ ├── parse_utils - 7.3.0.py
│ │ │ │ │ ├── parse_utils.py
│ │ │ │ │ ├── polish
│ │ │ │ │ │ ├── container.py
│ │ │ │ │ │ ├── cover.py
│ │ │ │ │ │ ├── css.py
│ │ │ │ │ │ ├── errors.py
│ │ │ │ │ │ ├── images.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── main.py
│ │ │ │ │ │ ├── opf.py
│ │ │ │ │ │ ├── parsing_html5_parser.py
│ │ │ │ │ │ ├── parsing.py
│ │ │ │ │ │ ├── pretty.py
│ │ │ │ │ │ ├── replace.py
│ │ │ │ │ │ ├── split.py
│ │ │ │ │ │ ├── toc.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── reader.py
│ │ │ │ │ ├── stylizer.py
│ │ │ │ │ ├── transforms
│ │ │ │ │ │ ├── cover.py
│ │ │ │ │ │ ├── data_url.py
│ │ │ │ │ │ ├── filenames.py
│ │ │ │ │ │ ├── flatcss.py
│ │ │ │ │ │ ├── guide.py
│ │ │ │ │ │ ├── htmltoc.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── jacket.py
│ │ │ │ │ │ ├── linearize_tables.py
│ │ │ │ │ │ ├── manglecase.py
│ │ │ │ │ │ ├── metadata.py
│ │ │ │ │ │ ├── page_margin.py
│ │ │ │ │ │ ├── rescale.py
│ │ │ │ │ │ ├── split.py
│ │ │ │ │ │ ├── structure.py
│ │ │ │ │ │ └── trimmanifest.py
│ │ │ │ │ └── writer.py
│ │ │ │ └── unihandecode
│ │ │ │ ├── __init__.py
│ │ │ │ ├── jacodepoints.py
│ │ │ │ ├── jadecoder.py
│ │ │ │ ├── krcodepoints.py
│ │ │ │ ├── krdecoder.py
│ │ │ │ ├── pykakasi
│ │ │ │ │ ├── h2a.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── itaijidict.utf8
│ │ │ │ │ ├── j2h.py
│ │ │ │ │ ├── jisyo.py
│ │ │ │ │ ├── k2a.py
│ │ │ │ │ ├── kakasidict.utf8
│ │ │ │ │ ├── kakasi.py
│ │ │ │ │ └── kanadict.utf8
│ │ │ │ ├── unicodepoints.py
│ │ │ │ ├── unidecoder.py
│ │ │ │ ├── vncodepoints.py
│ │ │ │ ├── vndecoder.py
│ │ │ │ └── zhcodepoints.py
│ │ │ ├── __init__.py
│ │ │ ├── library
│ │ │ │ ├── comments.py
│ │ │ │ ├── field_metadata.py
│ │ │ │ └── __init__.py
│ │ │ ├── prints.py
│ │ │ ├── ptempfile.py
│ │ │ ├── spell
│ │ │ │ └── __init__.py
│ │ │ ├── utils
│ │ │ │ ├── cleantext.py
│ │ │ │ ├── config_base.py
│ │ │ │ ├── config.py
│ │ │ │ ├── date.py
│ │ │ │ ├── exim.py
│ │ │ │ ├── filenames.py
│ │ │ │ ├── formatter_functions.py
│ │ │ │ ├── formatter.py
│ │ │ │ ├── html2text.py
│ │ │ │ ├── icu.py
│ │ │ │ ├── imghdr.py
│ │ │ │ ├── img.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── iso8601.py
│ │ │ │ ├── localization.py
│ │ │ │ ├── random_ua.py
│ │ │ │ ├── resources.py
│ │ │ │ ├── serialize.py
│ │ │ │ ├── short_uuid.py
│ │ │ │ ├── smartypants.py
│ │ │ │ ├── speedups.py
│ │ │ │ ├── terminal.py
│ │ │ │ ├── threadpool.py
│ │ │ │ ├── wordcount.py
│ │ │ │ ├── xml_parse.py
│ │ │ │ └── zipfile.py
│ │ │ └── web
│ │ │ ├── feeds
│ │ │ │ ├── __init__.py
│ │ │ │ ├── news.py
│ │ │ │ ├── recipes
│ │ │ │ │ ├── collection.py
│ │ │ │ │ └── __init__.py
│ │ │ │ └── templates.py
│ │ │ ├── fetch
│ │ │ │ ├── __init__.py
│ │ │ │ ├── simple.py
│ │ │ │ └── utils.py
│ │ │ ├── __init__.py
│ │ │ └── site_parsers
│ │ │ ├── __init__.py
│ │ │ └── nytimes.py
│ │ ├── clogging.py
│ │ ├── css_selectors
│ │ │ ├── errors.py
│ │ │ ├── __init__.py
│ │ │ ├── ordered_set.py
│ │ │ ├── parser.py
│ │ │ ├── select.py
│ │ │ └── tests.py
│ │ ├── ebook_translator
│ │ │ ├── engines
│ │ │ │ ├── baidu.py
│ │ │ │ ├── base.py
│ │ │ │ ├── chatgpt.py
│ │ │ │ ├── custom.py
│ │ │ │ ├── deepl.py
│ │ │ │ ├── google.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── languages.py
│ │ │ │ ├── microsoft.py
│ │ │ │ └── youdao.py
│ │ │ ├── html_translator.py
│ │ │ └── __init__.py
│ │ ├── ebook_tts
│ │ │ ├── engines
│ │ │ │ ├── azure.py
│ │ │ │ ├── chatgpt.py
│ │ │ │ ├── google.py
│ │ │ │ ├── __init__.py
│ │ │ │ └── tts_base.py
│ │ │ ├── html_audiolator.py
│ │ │ └── __init__.py
│ │ ├── filedownload.py
│ │ ├── filesystem_dict.py
│ │ ├── html5_parser.py
│ │ ├── html_form.py
│ │ ├── html_json_extract.py
│ │ ├── image_tools.py
│ │ ├── __init__.py
│ │ ├── justext_extract
│ │ │ ├── debug
│ │ │ │ ├── css
│ │ │ │ │ └── style.css
│ │ │ │ └── js
│ │ │ │ ├── jquery.qtip.min.css
│ │ │ │ ├── jquery.qtip.min.js
│ │ │ │ └── tooltip.js
│ │ │ ├── __init__.py
│ │ │ ├── justext_extract.py
│ │ │ └── stoplists
│ │ │ ├── chinese_simplified.txt
│ │ │ ├── chinese_traditional.txt
│ │ │ ├── japanese.txt
│ │ │ └── korean.txt
│ │ ├── languages_countries.py
│ │ ├── mechanize.py
│ │ ├── opml.py
│ │ ├── pocket.py
│ │ ├── polyglot
│ │ │ ├── binary.py
│ │ │ ├── builtins.py
│ │ │ ├── functools.py
│ │ │ ├── html_entities.py
│ │ │ ├── http_client.py
│ │ │ ├── http_cookie.py
│ │ │ ├── http_server.py
│ │ │ ├── __init__.py
│ │ │ ├── io.py
│ │ │ ├── plistlib.py
│ │ │ ├── queue.py
│ │ │ ├── reprlib.py
│ │ │ ├── smtplib.py
│ │ │ ├── socketserver.py
│ │ │ └── urllib.py
│ │ ├── pymp3cat.py
│ │ ├── readability
│ │ │ ├── browser.py
│ │ │ ├── cleaners.py
│ │ │ ├── compat
│ │ │ │ ├── __init__.py
│ │ │ │ ├── three.py
│ │ │ │ └── two.py
│ │ │ ├── debug.py
│ │ │ ├── encoding.py
│ │ │ ├── htmls.py
│ │ │ ├── __init__.py
│ │ │ └── readability.py
│ │ ├── recipe_helper.py
│ │ ├── requests_file.py
│ │ ├── simpleextract.py
│ │ ├── smtp_mail.py
│ │ ├── tinycss
│ │ │ ├── color3.py
│ │ │ ├── css21.py
│ │ │ ├── decoding.py
│ │ │ ├── fonts3.py
│ │ │ ├── __init__.py
│ │ │ ├── media3.py
│ │ │ ├── page3.py
│ │ │ ├── parsing.py
│ │ │ ├── token_data.py
│ │ │ ├── tokenizer.py
│ │ │ └── version.py
│ │ ├── urlopener.py
│ │ └── wallabag.py
│ ├── recipes
│ │ ├── builtin_recipes.xml
│ │ └── builtin_recipes.zip
│ ├── routes.py
│ ├── static
│ │ ├── add-upload.png
│ │ ├── apple-touch-icon57.png
│ │ ├── apple-touch-icon.png
│ │ ├── banner-bg.png
│ │ ├── base.css
│ │ ├── base.js
│ │ ├── book128.png
│ │ ├── cn.gif
│ │ ├── favicon.ico
│ │ ├── grids-responsive-min.css
│ │ ├── iconfont.ttf
│ │ ├── iconfont.woff
│ │ ├── jquery-3.7.1.min.js
│ │ ├── library.js
│ │ ├── prism.css
│ │ ├── prism.js
│ │ ├── pure.css
│ │ ├── pure-min.css
│ │ ├── robots.txt
│ │ ├── tr.gif
│ │ ├── us.gif
│ │ ├── webmail.css
│ │ └── webmail.js
│ ├── templates
│ │ ├── admin.html
│ │ ├── adv_archive.html
│ │ ├── adv_base.html
│ │ ├── adv_calibre_options.html
│ │ ├── adv_delivernow.html
│ │ ├── adv_import.html
│ │ ├── adv_inboundmail.html
│ │ ├── adv_uploadcover.html
│ │ ├── adv_uploadcss.html
│ │ ├── autoback.html
│ │ ├── base.html
│ │ ├── book_audiolator.html
│ │ ├── book_translator.html
│ │ ├── change_password.html
│ │ ├── home.html
│ │ ├── library.html
│ │ ├── login.html
│ │ ├── logs.html
│ │ ├── my.html
│ │ ├── reset_password.html
│ │ ├── setting.html
│ │ ├── signup.html
│ │ ├── tipsback.html
│ │ ├── user_account.html
│ │ └── webmail.html
│ ├── translations
│ │ ├── messages.pot
│ │ ├── tr_TR
│ │ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ └── zh
│ │ └── LC_MESSAGES
│ │ ├── messages.mo
│ │ └── messages.po
│ ├── utils.py
│ ├── view
│ │ ├── admin.py
│ │ ├── adv.py
│ │ ├── deliver.py
│ │ ├── extension.py
│ │ ├── inbound_email.py
│ │ ├── __init__.py
│ │ ├── library_offical.py
│ │ ├── library.py
│ │ ├── login.py
│ │ ├── logs.py
│ │ ├── setting.py
│ │ ├── share.py
│ │ ├── subscribe.py
│ │ └── translator.py
│ └── work
│ ├── __init__.py
│ ├── url2book.py
│ └── worker.py
├── app.yaml
├── config.py
├── cron.yaml
├── dispatch.yaml
├── docker
│ ├── Caddyfile
│ ├── compose_up.sh
│ ├── default.conf
│ ├── docker-compose-nginx.yml
│ ├── docker-compose.yml
│ ├── Dockerfile
│ ├── gunicorn.conf.py
│ ├── ke-docker.sh
│ ├── postfix
│ │ ├── Dockerfile
│ │ ├── install.sh
│ │ └── readme.md
│ ├── run_docker.sh
│ └── ubuntu_docker.sh
├── docs
│ ├── Chinese
│ │ ├── changelog.md
│ │ ├── config.md
│ │ ├── deployment.md
│ │ ├── extension.md
│ │ ├── faq.md
│ │ ├── intro.md
│ │ └── README.md
│ ├── _config.yml
│ ├── English
│ │ ├── changelog_en.md
│ │ ├── config.md
│ │ ├── deployment.md
│ │ ├── extension.md
│ │ ├── faq.md
│ │ ├── intro.md
│ │ └── README.md
│ ├── Gemfile
│ ├── images
│ │ ├── cnn1.png
│ │ ├── cnn2.png
│ │ ├── cnn3.png
│ │ ├── cnn4.png
│ │ ├── cnn5.png
│ │ ├── cnn6.png
│ │ ├── extension_menu.png
│ │ └── scrshot.gif
│ ├── Makefile
│ └── README.md
├── LICENSE
├── main.py
├── pyproject.toml
├── queue.yaml
├── readme.md
├── readme_zh.md
├── requirements.txt
├── tests
│ ├── __init__.py
│ ├── readme.developer.md
│ ├── runtests.py
│ ├── test_admin.py
│ ├── test_adv.py
│ ├── test_base.py
│ ├── test_inbound_email.py
│ ├── test_library_official.py
│ ├── test_login.py
│ ├── test_logs.py
│ ├── test_setting.py
│ ├── test_share.py
│ └── test_subscribe.py
├── tools
│ ├── archive_builtin_recipes.py
│ ├── babel.cfg
│ ├── bookmarklet_src
│ │ └── send_to_kindle.js
│ ├── gae_deploy.sh
│ ├── mp3cat
│ │ ├── arm64_mp3cat
│ │ ├── mp3cat
│ │ ├── mp3cat.exe
│ │ └── readme.md
│ ├── nginx
│ │ ├── gunicorn.conf.py
│ │ ├── gunicorn_logrotate
│ │ ├── gunicorn.service
│ │ └── nginx_default
│ ├── pybabel_commands.txt
│ ├── pybabel_compile.bat
│ ├── pybabel_extract.bat
│ ├── run_flask.bat
│ ├── start_celery.bat
│ ├── trim_recipes.py
│ └── update_req.py
├── typings
│ └── __builtins__.pyi
└── worker.yaml
68 directories, 451 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论