Giter Site home page Giter Site logo

geektime-downloader's Introduction

geektime-downloader

geektime-downloader 支持下载以下极客时间网站资源。

极客时间

  • 专栏(PDF/Markdown/音频)
  • 视频课
  • 每日一课
  • 大厂案例
  • 训练营视频
  • 线下大会

企业版极客时间

  • 体系课
  • 每日一课
  • 大厂案例
  • 生态课
  • 训练营视频

部分资源暂未支持下载,欢迎PR。

go report card MIT license

Usage

Prerequisites

  • Chrome installed

Install form source

# Go 1.16+
go install github.com/nicoxiang/geektime-downloader@latest

# Go version < 1.16
go get -u github.com/nicoxiang/geektime-downloader@latest

Download binary files

See release page

Sample

## Windows 为例
## Windows 推荐使用 Windows Terminal 打开

## 账号密码方式登录(常用)
> geektime-downloader.exe -u "phone number"
## cookie 方式登录
> geektime-downloader.exe --gcid "gcid" --gcess "gcess"

Help

## Windows 为例
> geektime-downloader.exe -h

Geektime-downloader is used to download geek time lessons

Usage:
  geektime-downloader [flags]

Flags:
      --comments                是否需要专栏的第一页评论 (default true)
      --enterprise              是否下载企业版极客时间资源
  -f, --folder string           专栏和视频课的下载目标位置 (default "C:\\Users\\nico\\geektime-downloader")
      --gcess string            极客时间 cookie 值 gcess
      --gcid string             极客时间 cookie 值 gcid
  -h, --help                    help for geektime-downloader
      --interval int            下载资源的间隔时间, 单位为秒, 默认1秒 (default 1)
      --output int              专栏的输出内容(1pdf,2markdown,4audio)可自由组合 (default 1)
  -u, --phone string            你的极客时间账号(手机号)
      --print-pdf-timeout int   Chrome生成PDF的超时时间, 单位为秒, 默认60秒 (default 60)
      --print-pdf-wait int      Chrome生成PDF前的等待页面加载时间, 单位为秒, 默认8秒 (default 8)
  -q, --quality string          下载视频清晰度(ld标清,sd高清,hd超清) (default "sd")

Note

文件下载目标位置

文件下载目标位置可以通过 help 查看。默认情况下 Windows 位于 %USERPROFILE%/geektime-downloader 下;Unix, 包括 macOS, 位于 $HOME/geektime-downloader 下

如何查看课程 ID?

普通课程:

打开极客时间课程列表页,选择你想要查看的课程,在新打开的课程详情 Tab 页,查看 URL 最后的数字,例如下面的链接中 100056701 就是课程 ID:

https://time.geekbang.org/column/intro/100056701

训练营课程:

打开极客时间训练营课程列表页,选择你想要查看的课程,在新打开的课程详情 Tab 页,查看 URL lesson/后的数字,例如下面的链接中 419 就是课程 ID:

https://u.geekbang.org/lesson/419?article=535616

每日一课课程:

选择你想要下载的视频,查看 URL dailylesson/detail/后的数字,例如下面的链接中 100122405 就是课程 ID:

https://time.geekbang.org/dailylesson/detail/100122405

大厂案例课程:

选择你想要下载的视频,查看 URL qconplus/detail/后的数字,例如下面的链接中 100110494 就是课程 ID:

https://time.geekbang.org/qconplus/detail/100110494

公开课课程:

选择你想要下载的视频,查看 URL opencourse/intro/opencourse/videointro/后的数字,例如下面的链接中 100546701 就是课程 ID:

https://time.geekbang.org/opencourse/videointro/100546701

其他:

打开极客时间我的课程-其他,选择你想要查看的课程,在新打开的课程详情 Tab 页,查看 URL course/intro/ 最后的数字,例如下面的链接中 100551201 就是课程 ID:

https://time.geekbang.org/course/intro/100551201

企业版训练营:

选择你想要查看的课程,查看 URL mall/product/后的数字,例如下面的链接中 100618109 就是课程 ID:

https://b.geekbang.org/mall/product/100618109

为什么我下载的PDF是空白页?

首先下载课程请保证VPN已关闭。在此前提下如果仍然出现空白页情况,说明后台Chrome网页加载速度较慢,可以尝试加大--print-pdf-wait参数,保证页面完全加载完成后再开始生成PDF。

为什么我下载PDF一直提示超时?

首先下载课程请保证VPN已关闭。在此前提下如果下载持续出现超时,有可能是因为课程章节图片等内容较多,生成速度慢,比如课程《AI 绘画核心技术与实战》中的部分章节,可以尝试加大--print-pdf-timeout参数,并耐心等待。

如何下载专栏的 Markdown 格式和文章音频?

默认情况下载专栏的输出内容只有 PDF,可以通过 --output 参数按需选择是否需要下载 Markdown 格式和文章音频。比如 --output 3 就是下载 PDF 和 Markdown;--output 6 就是下载 Markdown 和音频;--output 7 就是下载所有。

Markdown 格式虽然显示效果上不及 PDF,但优势为可以显示完整的代码块(PDF 代码块在水平方向太长时会有缺失)并保留了原文中的超链接。

现在部分新课程的专栏文章中会包含视频,如课程《Kubernetes 入门实战课》等,目前程序会自动下载文章所包含的视频,视频目录在文章所在目录的子目录 videos 下,此类文章PDF的下载会耗费更多时间,请耐心等待。

退出程序和继续下载

Ctrl + C 退出程序。如果选择“下载所有”后中断程序,可重新进入程序继续下载。

隐私相关

通过密码登录的情况下,为了避免多次登录账户,会在目录 UserConfigDir/geektime-downloader 下存放用户的登录 cookie,如果不是在自己的电脑上执行,建议在使用完毕程序后手动删除

geektime-downloader's People

Contributors

conbein49 avatar dependabot[bot] avatar leslieleung avatar nicoxiang avatar yinyicao avatar yola-0316 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

geektime-downloader's Issues

建议下载完成后提示已完成

当我下载完一门课时,并没给出下载完成的提示,而我也无法确定是否下载成功还是失败,也担心是否有漏下的才没有成功的提示

正在下载专栏 《许式伟的架构课》 中的所有文章
x 请输入课程 ID: █

建议,关于视频下载

基本上专栏都可以下载,但是视频好像都是标清的,下载下来的视频有些会出现音画不同步现象。项目整体还是很好用的,感谢大佬开源

支持训练营课程的下载

from #35

我的个人账号没有训练营,所以不太清楚训练营课程的接口是什么样的,欢迎有训练营账号的同学的 PR,只要底层内容形式都是普通课程那样的文章或者视频,下载的方法都是可以复用的。

支持展开评论的选项

from #35

pdf目前下载的评论看不到折叠的评论 能够支持将一个评论里的多条回复全部展开吗

目前只实现了主评论如果过长会默认展开,但是下面的跟评在页面(Ipad设备下)上点击后会新打开页面,这个暂时不能很简单的通过 js 模拟动作完成加载,需要考虑别的办法。

command not found: geektime-downloader.exe

请问大佬们,这个应该怎么办? 我实在是搞不懂为啥,go的配置不对?

我的操作

  1. clone 项目到本地
  2. cd geektime-downloader
  3. go install github.com/nicoxiang/geektime-downloader@latest
  4. geektime-downloader.exe -h

报错:
zsh: command not found: geektime-downloader.exe

视频下载出现连接错误

n error occurred: Get "https://media001.geekbang.org/2b67e6717d5d49b49a4fd1b220588a1b/d000806f075d49a34f930f43e3a10598-ld-encrypt-stream-00028.ts": dial tcp 112.19.5.225:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
发生 n 个错误: 获取“ https://media001.geekbang.org/2b67e6717d5d49b49a4fd1b220588a1b/d000806f075d49a34f930f43e3a10598-ld-encrypt-stream-00028.ts”: 拨打 tcp 112.19.5。225:443: connectex: 连接尝试失败,因为连接的一方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应。
视频下载出现这种错误,每次下载都会出现连接错误,如果重新下载,问题依旧,能不能调节一下设置,防止连接失败。

希望 增加支持训练营课程视频下载的功能

1.目前只支持下载专栏的视频 训练营的方法应该差不多 希望增加
2。pdf目前下载的评论看不到折叠的评论 能够支持将一个评论里的多条回复全部展开吗
3. 支持html形式下载专栏 目前PDF形式如果是代码块的话 经常因为代码过长不能滑动导致显示不全

谢谢大佬

能否 批量下载?

比如输入多个课程id,例如 大厂案例输入10个连续的id。一个一个下载太麻烦了。

视频下载部分失败

屏幕截图 2022-08-22 105245

视频下载过程中会出现部分下载失败后跳过的情况,目前暂时可以通过重新选择 “下载当前视频课说有视频” 所有解决。

视频课使用新接口

普通视频课接口已发生变更,加密方式已发生变化,目前旧的接口还能使用,暂未影响到视频的下载。如后续极客时间废弃老接口,启动新项目修改实现。

FR: 有没有 pdf 合并支持计划

  • 目前下载下来的都是单 pdf, 多个文件不太方便, 单文件 方便拷贝和导入 talebook 之类的.

  • 自动合并过程中, 能把原文件名(或者直接把原本的目录)作为 pdf 章节插入pdf 吗?.(这个是主要想法)

  • 想请问一下, 有没有这样的工具或者支持计划或者思路

还能用吗

为了方便就不发邮件了,想咨询一下现在是否还能下载视频呀。

我看隔壁geektime-dl的readme标注了说用了阿里云私有加密,没办法解密视频了?

ts转mp4

视频课下载的ts文件是否可以转为MP4,尝试用ffmpeg转换出现异常,是因为加密的原因吗?

下载总是超时,并且每次都要重复步骤?

总是下载超时,不知道是不是反爬虫机制。
超时后,都需要这样做吗?

.\geektime-downloader.exe -u ""
 x 请输入课程 ID: █

如果我操作方式正确的话,这方面能不能优化一下逻辑,直接

.\geektime-downloader.exe -u "" -id "课程id"

这样方便一些?

视频下载异常

[正在下载 05 | 微服务通信的济世良方:什么是Service Mesh?它能帮你做什么?] 8.31 MB / 85.96 MB [>__] 9.67%panic: context deadline exceeded (Client.Timeout or context cancellation while reading body)

goroutine 118 [running]:
github.com/nicoxiang/geektime-downloader/internal/video.writeToTempVideoFile(0x18327c0, 0xc00007ea00, 0xc0000b01e0, 0xc00015e0e0, 0xc0000a20b0, 0xc000434380, 0x3f, 0xc00042e5a0, 0x99)
/Users/xxx/go/src/github.com/nicoxiang/geektime-downloader/internal/video/video.go:98 +0x4dc
github.com/nicoxiang/geektime-downloader/internal/video.DownloadVideo.func2(0x18327c0, 0xc00007ea00, 0xc0000b01e0, 0xc00015e0e0, 0xc0000a20b0, 0xc000434380, 0x3f, 0xc00042e5a0, 0x99)
/Users/xxx/go/src/github.com/nicoxiang/geektime-downloader/internal/video/video.go:67 +0x8b
created by github.com/nicoxiang/geektime-downloader/internal/video.DownloadVideo
/Users/xxx/go/src/github.com/nicoxiang/geektime-downloader/internal/video/video.go:66 +0x47e

无法下载『左耳听风』专栏

专栏ID:100002201

效果图:
image

错误日志:
time="2023-02-02T13:55:28+08:00" level=error msg="Request Timeout" func=github.com/nicoxiang/geektime-downloader/internal/pkg/logger.Error file="C:/Users/Administrator/go/pkg/mod/github.com/nicoxiang/[email protected]/internal/pkg/logger/logger.go:58" error="context deadline exceeded"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.