批量获取API接口内容并下载(文本,视频等)(shell脚本)
简介
最近看到很多api接口网站,有视频,图片,文字,鸡汤等内容,看到这么多好的内容想收藏,一条一条弄又很浪费时间,于是写了一个脚本,需要找一个比较好的api站点(没有做访问限制的),不然一下子次数很多占用服务器资源的话管理员可能就会把你IP封掉。
适用范围
只适用于返回值为文本格式的内容,或者格式,如果返回值直接是mp4或图片请观看其他文章
脚本
脚本1
#!/bin/bash
# 脚本名称:api_download.sh
# 版本:1.0.0
# 作者:诺言
# 创建日期:2023年8月2日
# 最后修改日期:2023年8月2日
API_URL="XXXXX" # 替换为你的 API URL
OUTPUT_FILE="response.txt" # 保存返回内容的文本文件名
ITERATIONS=5 # 循环的次数
DOWNLOAD_DIR="/opt/downloaded_files" # 下载文件保存的目录
# 清空输出文件
echo "" > "$OUTPUT_FILE"
# 循环请求 API 并将返回内容追加写入文本文件
for ((i=1; i<=$ITERATIONS; i++))
do printf "正在获取第 %s 个返回内容...\n" "$i"
response=$(curl -s "$API_URL")
echo "https:$response" >> "$OUTPUT_FILE"
###这里的https://看需求可以酌情删掉,如果你获取调用php接口返回的值带https的话删掉就行了
done
# 创建下载目录
mkdir -p "$DOWNLOAD_DIR"
# 使用 wget 批量下载文件
counter=0
while IFS= read -r url
do
((counter++))
printf "正在下载文件 %s...\n" "$counter"
wget -q "$url" -P "$DOWNLOAD_DIR" --content-disposition
done < "$OUTPUT_FILE"
echo "已经批量下载到 $DOWNLOAD_DIR 目录下。"
脚本2
这个脚本显示的进度比较详细
#!/bin/bash
# 脚本名称:api_download.sh
# 版本:1.0.0
# 作者:诺言
# 创建日期:2023年8月2日
# 最后修改日期:2023年8月2日
API_URL="XXXX" # 替换为你的 API URL
OUTPUT_FILE="response.txt" # 保存返回内容的文本文件名
ITERATIONS=5 # 循环的次数
DOWNLOAD_DIR="/opt/downloaded_files" # 下载文件保存的目录
# 清空输出文件
echo "" > "$OUTPUT_FILE"
# 循环请求 API 并将返回内容追加写入文本文件
for ((i=1; i<=$ITERATIONS; i++))
do
echo "正在获取返回内容..."
response=$(curl -s "$API_URL")
# 每行一个返回内容
echo "https:$response" | while IFS= read -r line
###这里的https://看需求可以酌情删掉,如果你获取调用php接口返回的值带https的话删掉就行了
do
echo "$line" >> "$OUTPUT_FILE"
done
# 显示保存每个返回内容的进度
progress=$((100 * i / ITERATIONS))
echo "已保存 $progress% 的返回内容"
done
# 创建下载目录
mkdir -p "$DOWNLOAD_DIR"
# 使用 wget 批量下载文件
counter=0
while IFS= read -r url
do
((counter++))
printf "\n正在下载文件 %s...\n" "$counter"
wget --progress=bar:force "$url" -P "$DOWNLOAD_DIR" -nc
done < "$OUTPUT_FILE"
echo "网址已经批量下载到 $DOWNLOAD_DIR 目录下。"
脚本3
去重
#!/bin/bash
API_URL="https://v.api.aa1.cn/api/api-girl-11-02/index.php?type=url" # 替换为您的API接口地址
DOWNLOAD_DIR="/path/to/download" # 替换为您的下载目录
# 创建下载目录
mkdir -p "$DOWNLOAD_DIR"
# 获取API接口返回内容并保存到文本文件
for ((i=1; i<=20; i++)); do
RESPONSE=$(curl -s "$API_URL")
echo "https:$RESPONSE" >> responses.txt
###这里的https://看需求可以酌情删掉,如果你获取调用php接口返回的值带https的话删掉就行了
# 计算并显示获取内容进度百分比
PROGRESS=$((i * 100 / 20))
echo -ne "获取API内容: $PROGRESS%\r"
done
echo -e "\nAPI content fetched successfully."
# 批量下载文件
cat responses.txt | xargs -n 1 -I {} wget -P "$DOWNLOAD_DIR" {}
# 删除下载目录中的重复文件
rsync -a --remove-source-files "$DOWNLOAD_DIR/" "$DOWNLOAD_DIR/../temp/"
rm -r "$DOWNLOAD_DIR"
mv "$DOWNLOAD_DIR/../temp/" "$DOWNLOAD_DIR"
# 显示下载文件进度百分比
TOTAL_FILES=$(wc -l < responses.txt)
DOWNLOADED_FILES=0
echo -e "\nAll files downloaded successfully."
上图
阅读剩余
本站代码模板仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END