这已经是去年的事情了,但是由于忙,一直没有时间写

漫月 API 是个图片 API,你请求一次它的 PHP 文件就会返回一张动漫图片,是 302 重定向

我有一天想把它的图片全部拉下来

于是我想到了使用 bash 脚本

wget https://api.ikmoe.com/moeu-rand-background.php

虽然终端有提示进行了重定向,但是下载的文件还是一个 moeu-rand-background.php 但内容是一张图片

于是我想到了另一个命令:curl,可以用它来获取 HTTP 的头部

curl https://api.ikmoe.com/moeu-rand-background.php -I

于是终端返回如下信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HTTP/1.1 302 Found
Server: Apache
Connection: keep-alive
Date: Fri, 26 Jan 2018 11:33:27 GMT
Last-Modified: Fri, 26 Jan 2018 11:30:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 32
Location: ./manu-img/埃罗芒阿老师10.jpg
X-Powered-By: PHP/7.0.19
Set-Cookie: yunsuo_session_verify=b48d07353e43c356abccfd86b0ab47d3; expires=Mon, 29-Jan-18 19:33:27 GMT; path=/; HttpOnly
Set-Cookie: yunsuo_session_verify=b48d07353e43c356abccfd86b0ab47d3; expires=Mon, 29-Jan-18 19:33:27 GMT; path=/; HttpOnly
Upgrade: h2
Vary: Accept-Encoding
X-Daa-Tunnel: hop_count=2
X-NWS-LOG-UUID: a14dc274-6f93-42d5-8b13-6432a20b5fe0 523fdd7ca3162cadaa26b14db1b7aa59
X-Cache-Lookup: Hit From Upstream
X-Cache-Lookup: Hit From Upstream
X-Cache-Lookup: Hit From Upstream

用 grep 和 cut 两个工具可以提取出图片链接的那段文本

curl https://api.ikmoe.com/moeu-rand-background.php -I|grep 'location'|cut -b 12-

然后就写成了一下 bash 脚本

1
2
3
echo http://api.ikmoe.com$(curl https://api.ikmoe.com/moeu-rand-background.php -I|grep 'location'|cut -b 12-)>tmp
wget -i tmp
rm tmp

使用 for 和 do 循环运行了一节数学课,的确获得了一些图片,但里面有重复,也有遗漏

删除重复后,把同一系列的整理到一个文件夹中

捕获.PNG

用 tree -f 命令列出每一个的文件列表

1
2
3
4
echo %1
set filefor=%1
cd %filefor%
tree /f>>%filefor%.txt

改成 bat 后缀,把每一个文件夹的图标都拖到 bat 图标上一次,上级文件夹中就多出许多文本文档

打开一个,里面像这样

捕获.PNG

要找出遗漏的,可以用 Excel 公式

文件列表在第一列粘贴,把第一个文件的名字复制的第二列,拖出一列更多的,第三列对应的格子使用公式

=IF(COUNTIF(A:A,B4),"",B4)

拖成和第二列一样多

由于是 tree 出的文件列表,天生多了四个空格,于是就可以用这四个空格进行查找替换

第四列对应公式

=SUBSTITUTE(C1,"    ","https://api.ikmoe.com/manu-img/")

把第四列的内容复制到刚刚那个文本文档中,再用 bat 脚本就可以下载缺漏的图片了

1
2
cd %1
wget -i %1.txt