Skip to content
把极客时间装进Kindle
Branch: master
Clone or download
Latest commit 4ebc415 Jan 8, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/ISSUE_TEMPLATE
geektime_dl fix readme Dec 18, 2018
requirements update readme.md: push to kindle Dec 5, 2018
tests add data_client and debug_log Nov 26, 2018
.gitignore add subcmd __doc__ for help desc Nov 21, 2018
.travis.yml
Dockerfile
README.md Update README.md Jan 8, 2019
geektime.py rename Nov 21, 2018
setup.py fix readme Dec 18, 2018

README.md

把极客时间专栏装进Kindle

travis codecov Python versions PyPI - Downloads PyPI

左耳听风

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

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

把极客时间装进Kindle

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

一、项目结构

流程图

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

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

  • geektime_ebook: 主要将抓取到的数据转化为 kindle_maker 需要的源文件,主要是 html 文件

  • utils: 提供了mp3和mp4下载器等工具

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

  • store_client: 存储相关数据至sqlite3

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

二、依赖

三、使用

安装

虚拟环境 virtualenv

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

代码

pip install -U geektime_dl

安装kindlegen

  1. Linux:
wget http://kindlegen.s3.amazonaws.com/kindlegen_linux_2.6_i386_v2_9.tar.gz -O - | tar -xzf - -C ~/venv3/bin
  1. macOS:
brew install homebrew/cask/kindlegen
  1. Windows:
not test now!

use docker, see below

运行

查看帮助信息

1、查看 cli subcmd

geektime help

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

geektime <subcmd> --help

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

登录保存登录token

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> [--out-dir=<out_dir>] [--enable-comments] [--comment-count=<comment_count>]
  • course_id: 课程ID,可以从 query subcmd 查看
  • --out_dir: 电子书存放目录,默认./ebook/
  • --enable-comments: 启动评论下载,默认不下载评论
  • --comment-count: 在启动评论下载时,设置评论条数,默认10条

notice: 此 subcmd 需要先执行 login subcmd

批量下载所有已订阅专栏的方法geektime query | grep '是' | cut -d ' ' -f 1 | xargs -I {} geektime ebook {}

下载mp3

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

notice: 此 subcmd 需要先执行 login subcmd

下载mp4

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

notice: 此 subcmd 需要先执行 login subcmd

推送到kindle

如果你想把制作完成的电子书推送到kindle的话,需要在工作目录(当前目录)下添加 smtp.conf smtp配置文件,文件格式如下(以qq邮箱为例),

{
    "host": "smtp.qq.com",
    "port": "465",
    "user": "1234@qq.com",
    "password": "psd",
    "encryption": "ssl",
    "email_to": "xxx@kindle.cn"
}

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

geektime ebook 42 --push

至于邮箱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 ebookbatch --all --enable-comments
docker run -v `pwd`:/output --rm geektime mp4batch --all
docker run -v `pwd`:/output --rm geektime mp3batch --all

五、效果

我把免费试读的课程章节的电子书、音频、视频都下载下来,并上传到网盘,你可以把资源下载下来查看效果

六、Todo list

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

七、其他

  1. 注意版权,勿传播电子书及音视频
  2. pr or issue is welcome
You can’t perform that action at this time.