前言

  前段时间开发完成了Pluralsight下载器,然后还痛苦地呻吟Lynda没法破解。
  功夫不负有心人,经过了长达一周的测试,甚至到最后是推倒重做,我终于解决了Lynda的token获取问题。
  兴不兴奋、想不想学 <( ̄▽ ̄)>
  直到今天总算完成了,快2000行的代码,而且很可能还有些BUG,真是累死我了。

Lynda问题解决

  Lynda的问题一直是因为我的form表单传错了。
  Lynda并非使用传统的form表单,而是使用urlencoded的表单。
  这个在头文件中写得很清楚,然而我又傻乎乎地以为没有问题(被Pluralsight的顺利给误导了)
错误的form表单
错误的form表单
正确的form表单
正确的form表单

  另外比较坑爹的是,Lynda的登录比Pluralsight复杂许多。
  登录需要获取到隐藏在登录界面的验证码
  通过验证码和生成的不含登录信息的token值进行匹配。
  匹配成功之后token值会长了许多。
seasurf值
正确的form表单
  登录成功后可以看到form表单的处理
form表单处理
  另外这里额外再提一下,Content-Type已经提示了这个form表单是 urlencoded 处理的
Content-Type
  另外再翻到上面可以看到有token的set-cookie值
set-cookie
  但是我当时在postman一直测试不出这个结果。
  但是偶尔postman会返回出正确的token值,这让我非常不解。

  后面我利用python测试代码。
  思路是首先获取一次页面的 seasurf 的值。
  后面将相关的用户信息输入获取token值
set-cookie
  通过这个代码的测试,我才发现,token值已经在header里面更新了,而不是通过set-cookie
  另外运行的时候偶尔还会发生没有更换token的值的情况
set-cookie
  所以Lynda的处理比Pluralsight要麻烦得多。

  顺利获取到token值之后一切都好办了,后面就应该和Pluralsight一样一马平川了。
  然而我大错特错了。
  Lynda使用了最纯粹的动态网页技术,居然不使用接口API
  而是将数据写在html页面里面,这样我就无法找到相关的接口来直接抓取数据了。
  后面只好通过正则表达式强行获取了。

  后面也还算顺利。
  虽然有不少数据需要在页面中获取,不过也还是有一些可以获取数据的接口的。
  (没能找到教程列表信息,无奈只能在网页中获取)


https://www.lynda.com/ajax/player/conviva?courseId=758611&videoId=775845
  这个地址输入教程的courseId 和 videoID 就可以获取到详细的信息
json数据
  通过VScode排版可以看到获取到的json数据
排版之后的json数据


https://www.lynda.com/ajax/course/382570/418615/play
  这个地址就是获取视频下载链接的部分
排版之后的json数据
  当然如果是锁住的教程就需要带登录的token信息才能获取到数据了。
  这个就是下载视频的核心地址。


https://www.lynda.com/player/oembed?url=https://www.lynda.com/Flask-tutorials/course-overview/521200/533057-4.html
  这个地址则是非常偶然在网页的链接中发现的
排版之后的json数据
  通过这个可以获取到教程每一集的封面,不过有些教程就没有设置这个封面。


https://www.lynda.com/ajax/player/transcript?courseId=521200&videoId=533057
  这个地址算是了解了大一的字幕下载心愿了。
排版之后的json数据
  想当初我还付费50元购买了个字幕下载器,现在自己也开发出了字幕下载器了。

PLB downloader 整合

  在Lynda下载器的开发过程中,我就在想是否可以三个下载器整合到一起,
  于是当前的 PLB downloader 就诞生了。
  其实我只是取了三个机构首字母命名的。
排版之后的json数据
  比起最初版本的Pluralsight downloader 我加入了许多功能。
  基本上就是通过最上面三个状态按钮识别当前是什么下载模式。
  然后通过调整UI布局,匹配出最适合的界面。
  这个过程其实非常繁琐,也没有什么太高深的技术含量,就是改改UI的位置,隐藏和禁用一些UI而已。

  目前下载器最大的问题依然是下载稍微大一点的文件就会陷入无响应的状态,
  需要看控制台打印的信息才能知道当前的执行情况。

  在不断的测试也遇到了每次都要按一堆按钮的烦恼,
  于是我还加了个json文件,记录上次打开的按钮界面。

总结

  这个下载器开发完了,感觉也算是了结了自己的心愿。
  从最初青年之声爬虫里面提到自己想弄出教程的下载,到如今实现心愿。
  前路漫漫不堪回首。
  近两千行的代码就是努力的见证。
  11月的心头大计划完成了,目前也顺利进入方特实习了,感觉心情特别好。