Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

把极客时间装进Kindle

Project description

左耳听风

把极客时间装进 Kindle

travis codecov Python versions PyPI Actions Status

极客时间专栏文章的质量都是非常高的,比如耗子哥的《左耳听风》、朱赟的《朱赟的技术管理课》和王天一的《人工智能基础课》,都是我非常喜欢的专栏。这些专栏深入浅出,将知识和经验传授于读者,都是值得多次阅读的。

然而,每当空闲时间时,都需要掏出手机才能阅读专栏文章,这在某种情况下是很不便的,尤其坐地铁且没有网络时。作为一个kindle党,最好的解决方案就是kindle电子书。于是有了这个项目

把极客时间装进Kindle

现在,这个项目除了将专栏制作成kindle电子书,还提供了下载mp3mp4等功能,具体见下使用方法。

一、项目结构

项目主要包括下边这几个部分:

  • kindle_maker: 一个 mobi 电子书制作工具。用户只需要提供制作电子书的 html 文件,和一个包含目录信息的 toc.md 文件,kindle_maker 即可制作出一本精美的 kindle 电子书。这部分已拎出来放在单独的项目里,具体使用方式见该项目文档 kindle_maker

  • utils: 提供了 mp3/mp4 下载、邮件发送、html 文件生成等功能

  • gk_apis: 封装了极客时间的若干 api

  • store_client: 存储极客时间专栏数据至本地 json 文件

  • cli: 提供若干cmd 命令,将上面这几个部分连接在一起,最后使用 kindle_maker 制作电子书,或者使用下载器下载相关音视频

二、主要依赖

三、安装

虚拟环境 virtualenv

virtualenv -p python3 ~/venv3 && source ~/venv3/bin/activate

代码

pip install -U geektime_dl

# 或者安装最新代码
pip install -U git+https://github.com/jachinlin/geektime_dl.git

四、使用

查看帮助信息

1、查看 cli subcmd

geektime help

2、查看具体 cli subcmd 帮助信息

geektime <subcmd> --help

<subcmd> 为具体的子命令名,可以从 help 子命令查看。

登录

geektime login  [--account=<account>] [--password=<password>] [--area=<area>]

[]表示可选,<>表示相应变量值,下同

  • account: 手机账号,不提供可稍后手动输入
  • password: 账号密码,不提供可稍后手动输入
  • area: 注册手机号所属地区,默认86

查看课程列表

geektime query

执行该命令后,我们可以看到专栏、视频、微课等课程的课程标题、订阅情况、更新频率还有课程ID,这个课程ID很重要,咱们下边的操作就是基于这个ID进行的。

专栏
        课程ID        已订阅       课程标题             更新频率/课时·时长
        49             否         朱赟的技术管理课      (全集)
        48             是         左耳听风      (全集)
        ......
微课
        课程ID        已订阅       课程标题             更新频率/课时·时长
        75             是         深入浅出gRPC  (全集)
        73             否         Service Mesh实践指南  (全集)
        ......
视频
        课程ID        已订阅       课程标题             更新频率/课时·时长
        138            是         Nginx核心知识100讲    (100课时,约600分钟)
        130            否         算法面试通关40讲      (40课时·约500分钟)
        ......
其他
        课程ID        已订阅       课程标题             更新频率/课时·时长
        69             否         零基础入门 Python 机器学习    (None)
        70             否         零基础入门 TensorFlow (None)

制作电子书

geektime ebook <course_id> [--output-folder=<output_folder> [--comments-count=<comments_count>]
  • course_id: 课程ID,可以从 query subcmd 查看
  • output_folder: 电子书存放目录,默认./ebook/
  • comments_count: 在启动评论下载时,设置评论条数,默认0条

notice: 此 subcmd 需要先执行 login subcmd

下载mp3

geektime mp3 <course_id> [--url-only] [--output-folder=<output_folder>]
  • course_id: 课程ID,可以从 query subcmd 查看
  • --url-only: 只保存音频url,不下载音频
  • output_folder: 音频存放目录,默认./mp3/

notice: 此 subcmd 需要先执行 login subcmd

下载mp4

geektime mp4 <course_id> [--url-only] [--hd-only] [--output-folder=<output_folder>]
  • course_id: 课程ID,可以从 query subcmd 查看
  • --url-only: 只保存视频url
  • --hd-only:下载高清视频,默认下载标清视频
  • output_folder: 视频存放目录,默认./mp4/

notice: 此 subcmd 需要先执行 login subcmd; 推荐开启--url-only,只保存 mp4 url

推送到kindle

如果你想把制作完成的电子书推送到kindle的话,需要提供以下 smtp 配置(以qq邮箱为例):

smtp_encryption = ssl
smtp_host = smtp.qq.com
smtp_password = psd
smtp_port = 465
smtp_user = 1234@qq.com
email_to = xxx@kindle.cn

然后在制作电子书 ebook subcmd后添加 --push 以及上面参数即可,例如,

geektime ebook -c 42 --push --smtp-host=smtp.qq.com --smtp-port=465 --smtp-encryption=ssl --smtp-user=1234@qq.com --smtp-user=psd --email-to=xxx@kindle.cn

至于邮箱smtp配置和kindle邮箱配置就自行google吧。

五、Docker

如果你对 Python 不是很了解,我们还提供了 docker 版本,只要安装好 docker ,依次复制下边指令并执行, 就能下载全部已购买专栏文章、mp3、mp4,如果专栏更新完毕的话,我们还会把该专栏做成kindle电子书。

# 构建
docker build https://github.com/jachinlin/geektime_dl.git -t geektime

# 登录
docker run -v `pwd`:/output -it --rm geektime login

# 下载
docker run -v `pwd`:/output -it --rm geektime ebook all
docker run -v `pwd`:/output --rm geektime mp4 al
docker run -v `pwd`:/output --rm geektime mp3 all

六、Todo list

  • [X] MP3 and MP4
  • [X] comments
  • [X] batch download
  • [X] docker
  • [X] push to kindle
  • [ ] support mathjax
  • [ ] ...

七、其他

  1. 注意版权,勿传播电子书及音视频
  2. pr or issue is welcome

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for geektime-dl, version 1.1.0
Filename, size File type Python version Upload date Hashes
Filename, size geektime_dl-1.1.0-py3-none-any.whl (27.5 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size geektime_dl-1.1.0.tar.gz (22.7 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page