分区
个性化频道

【教程】浅析Iwara网站及爬取技巧

之前自己试着发的第一篇视频文章还被锁了,找站长问了问最后才给解了,LOL

实战原理前往第三个标题

Iwara

一个全球最大的MMD视频分享平台。

虽然站内优质MMD视频数不胜数,但碍于DNS污染,时常你是没法进入的|(connect_abroad)。

既然网站时常没法进入,那何不自己搭建一份数据备份站呢?——IwaraCollector应运而生

IwaraCollector

IwaraCollector是我基于Iwara网站特性而编写的网站数据采集程序。

其中涵盖了:

  • 爬取视频列表
  • 爬取单份视频数据(作者、预览图、简介、发布日期、下载地址)
  • 数据的可视化
  • 下载地址的获取与缓存

虽然这些功能的实现经历了很多有趣的事情,但这不是文章的重点,故不赘述。

原理剖析

基础数据的爬取

Iwara网站网页是基于PHP编写的,其网页绝大多数数据由服务器渲染提供。

因此,视频标题、作者、作者链接、作者头像、视频封面、视频简介、视频上传日期 均可采集到。

另外,有一个很有趣的现象,那就是iwara的视频预览图片不止一张,根据爬取的预览图url可见:

/sites/default/files/videos/thumbnails/446193/thumbnail-446193_0003.jpg?itok=15PqZcc9

thumbnail-446193_{{ Number }}.jpg

是存在多张预览图的。

而这个Number的值一般不少于5张,不多于15张。由四个数字组成,空位补0。

但是,只有一个非常重要的数据是ajax动态获取的——视频下载链接。

视频数据的动态获取

Iwara使用了一个GET请求来获取下载地址:https://{{网站类型}}.iwara.tv/api/video/{{视频ID}}

访问这个地址,它会提供如下格式的JSON:

[
 {
  "resolution":"Source",
  "uri":"","mime":"video/mp4"
 },
 {
  "resolution":"540p",
  "uri":"","mime":"video/mp4"
 },
 {
  "resolution":"360p",
  "uri":"","mime":"video/mp4"
 }
]
其中,resolution代表分辨率,url代表对应的视频链接。

url示例://mikoto.iwara.tv/file.php?expire=1651217152%26hash=6dd27b94c9d6170dd31d36ae733a8bee52d1301e%26file=2018%2F11%2F28%2F1543407273_Nrm1bugrGgipoWrrD_Source.mp4%26op=dl%26r=0

//mikoto.iwara.tv/  是存储服务器域名

/file.php  附带以下参数:

  • expire=1651217152 //下载时间戳
  • hash=6dd27b94c9d6170dd31d36ae733a8bee52d1301e //经过加密的hash值,是限制链接有效时间的值
  • file=2018%2F11%2F28%2F1543407273_Nrm1bugrGgipoWrrD_Source.mp4 //文件
  • op=dl //应该是打开方式 dl可能代表下载,没找到其他值
  • r=0 //1 会报403 不知道什么意义

因为技术不精,hash值加密原理没有找到。所以视频在国内播放采用了另一条路子——CloudFlare代理

CloudFlare代理借道翻墙

我已经不记得从哪篇文章中提及,iwara的CDN使用的是cloudflare,

而使用cloudflare的CDN都有一个特点:你可以向任意cloudflare的服务器发送Host为挂载在cloudflare CDN上的域名的请求,并获取到和访问该域名时相同的数据。(这个方法同样适用于某些网站被墙了,但是可以用改hosts的IP为cloudflare的服务器来访问)

利用这个方法,你只需要在cloudflare中依次添加CNAME记录,将你的域名指向到对应的iwara资源服务器域名,

示例:

我将mikoto.wobbay.xyz指向mikoto.iwara.tv

此时,你访问

https://mikoto.wobbay.xyz/file.php?expire=1651217152%26hash=6dd27b94c9d6170dd31d36ae733a8bee52d1301e%26file=2018%2F11%2F28%2F1543407273_Nrm1bugrGgipoWrrD_Source.mp4%26op=dl%26r=0

https://mikoto.iwara.tv/file.php?expire=1651217152%26hash=6dd27b94c9d6170dd31d36ae733a8bee52d1301e%26file=2018%2F11%2F28%2F1543407273_Nrm1bugrGgipoWrrD_Source.mp4%26op=dl%26r=0

是等效的。前者可以直接访问,后者有时有DNS污染,没法访问。

这样,就实现了在线播放。

结语

这就是大体的原理和实现方法。有其他疑问和建议可通过邮箱问我或者在Github给我发issue

但我看着站内也已经有在用我的程序来发布资源的兄弟了,我还是建议用我提供的视频外链弄在线播放,而不是跳转到我的程序再播放。

程序demo:https://iwara.wobbay.xyz/

程序开源地址:https://github.com/liuyi0501/IwaraCollector

猜您喜欢

3 条回复 A文章作者 M管理员
  1. 123456123
    123456123

    大佬牛逼

  2. 2481aaa
    2481aaaA

    不知咋的,程序走的漏洞被官方堵了,整个程序寄了。我单方面宣布程序寄了

  3. 喇腊拉
    喇腊拉

    大佬666 [好样的]

打开客户端
取消
下载方式 X