我想使用脚本下载一本书,但脚本无法正常工作,它应该从网站下载所有页面,但最后它下载第一个封面并显示有关该页面的信息,还应该有其他页面,但它们没有被下载。
代码:
#!/bin/bash
token="<eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMDUyOTEyLCJncm91cF9pZCI6MjE4LCJib29rX2lkIjo5NTE3MTMsImJvb2tfYWNjZXNzIjoxLCJ1c2VyX2VtYWlsIjoiZGFuc21pcjc0N2VAZ21haWwuY29tIiwidXNlcl90eXBlIjo4LCJleHAiOjE3MDI1ODU1MjgsImlhdCI6MTcwMjU2Mzg5OH0.CsU54Qvq3b03vYY92h2qXNP2GeLAiDYyx2bditM9WWqjfto-JvdGUD5iqG7nz4H-ONrJ78UYDXOiREUhyUYOIw>"
echo "Извлекается информация о книге..."
curl 'https://reader.new.book.ru/api/reader/book' \
-H 'authority: reader.new.book.ru' \
-H 'accept: application/json, text/plain, */*' \
-H 'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6,zh-TW;q=0.5,zh;q=0.4,ko;q=0.3,tt;q=0.2' \
-H 'authorization: Bearer '$token \
-H 'cookie: _ym_uid=1673594313647687580; _ym_d=1673594313; _ym_isad=1' \
-H 'referer: https://reader.new.book.ru/?t='$token'&v=0' \
-H 'sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "macOS"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: same-origin' \
-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' \
--compressed --output description.json 1> /dev/null
author=$(cat description.json | jq -r '.message .data .author')
name=$(cat description.json | jq -r '.message .data .name')
pages=$(cat description.json | jq '.message .data .pages')
echo "Скачивается книга \""$author" - "$name"\" ("$pages" страниц)"
for i in {1..$(expr $pages + 0)}; do
curl 'https://reader.new.book.ru/api/books/page_view/'$i'/'$token \
-H 'authority: reader.new.book.ru' \
-H 'accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8' \
-H 'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6,zh-TW;q=0.5,zh;q=0.4,ko;q=0.3,tt;q=0.2' \
-H 'cookie: _ym_uid=1673594313647687580; _ym_d=1673594313; _ym_isad=1' \
-H 'referer: https://reader.new.book.ru/?t='$token'&v=0' \
-H 'sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "macOS"' \
-H 'sec-fetch-dest: image' \
-H 'sec-fetch-mode: no-cors' \
-H 'sec-fetch-site: same-origin' \
-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' \
--compressed -v --output `printf %04d $i`."png" 1> /dev/null
done
bookname=$author' - '$name'.pdf'
echo "Конвертируется книга в файл \"".$bookname"\""
convert *.png $bookname
如果它只下载第一页,则循环可能有问题。
让我们检查。
让我们删除所有不必要的东西,只留下一个参数、一个带有条件的循环,以及至少一些表明循环正在工作的指示:
我看到如下结果
字符串是 output
line #{1..10},这意味着变量 $i (表达式的结果)等于{1..10},这可能不是您所期望的。在我看来,在这种情况下,比任何其他情况都更适合以下循环
循环的定义由三个表达式组成
初始化
报告从什么值开始循环?
i=1从1开始计数
condition是
一个表达式,观察到哪个,我们就可以继续循环,
i<=pages循环计数器会增加,直到小于或等于书本的页数
步骤
循环计数器将随着哪一步而改变。
i++这个表达式相当于 挤出
i=i+1,即 增加一因此,需要替换脚本中的循环表达式
该视频超短,因为 gif 的大小有限制,但如果您给它时间,它会下载所有内容