我如何检测 qBittorrent 是否正在下载?

我如何检测 qBittorrent 是否正在下载?

如何编写批处理/脚本文件来查询qBittorrent查看它是否正在下载某些内容?

根据结果​​,我想执行进一步的命令。

答案1

下面是两段代码(一段用于 Windows,一段用于 Linux),它们使用qBittorrent v4.1(或更高版本)API根据是否正在下载内容返回消息。

视窗

@echo off

rem Remove existing cookie jar
del /F %temp%\cookies.txt 2>nul

rem Login to qBittorrent
curl -s -b %temp%\cookies.txt -c %temp%\cookies.txt --header "Referer: http://localhost:8080" --data "username=admin&password=secret" http://localhost:8080/api/v2/auth/login >nul

rem Get list of downloading torrents
curl -s -b %temp%\cookies.txt -c %temp%\cookies.txt --header "Referer: http://localhost:8080" "http://localhost:8080/api/v2/torrents/info" | jq | findstr """state""" | findstr /R "stalledDL downloading metaDL" >nul

if errorlevel 0 (
    echo Something downloading
) else (
    echo Nothing downloading
)

rem Remove used cookie jar
del /F %temp%\cookies.txt 2>nul

Linux

#!/bin/bash

# Remove existing cookie jar
rm -f ~/.cookies.txt

# Login to qbittorrent
curl -s -b ~/.cookies.txt -c ~/.cookies.txt --header "Referer: http://localhost:8080" --data "username=admin&password=secret" http://localhost:8080/api/v2/auth/login >/dev/null 2>&1

# Get list of downloading torrents
if [[ $(curl -s -b ~/.cookies.txt -c ~/.cookies.txt --header "Referer: http://localhost:8080" "http://localhost:8080/api/v2/torrents/info" | jq . | grep "state" | egrep "(stalledDL|downloading|metaDL)") ]]; then
        echo "Something downloading"
else
        echo "Nothing downloading"
fi

# Remove used cookie jar
rm -f ~/.cookies.txt

关于两个版本需要注意的几点

  • 您需要在 qBittorrent 中启用 Web UI 并设置用户名和密码。
  • 代码中有用户名admin和密码secret,你需要更改它们
  • 该代码连接到localhost:8080,您需要将其所有实例更改为正确的计算机名称/IP 和端口号
  • 我们创建一个 cookie jar(称为cookies.txt)来保存 SID。成功登录后会提供给我们这个 SID,执行其他命令时必须发送它。一旦我们完成操作,就会删除 cookie jar。
  • 没有错误处理,如果出现故障,它可能会(也可能错误地)报告“正在下载某些内容”
  • 此代码考虑了stalledDLdownloadingmetaDL以便下载。您可以通过查看记录的各种状态来更改此设置这里
  • jq从 qBittorrent API 获取 JSON 输出并以更易于读取/解析的方式对其进行格式化。

针对 Windows 版本的一些要点

  • 如果你没有运行 Windows 10,那么你需要安装卷曲
  • 您需要下载杰奇,将其重命名为 justjq.exe并将其放在与此脚本相同的文件夹中 - 我个人将它放在其中,C:\Windows\System32以便它可以在任何文件夹中工作
  • jq至关重要,因为 qBittorrent 的输出可能包含非常长的行,findstr无法处理(并引发错误)。

Linux 版本特有的一些要点

  • 代码使用了 curl,它通常是默认可用的。如果没有,那么在 Debian 上你可以使用sudo apt-get install curl
  • 您需要安装jq才能使用此功能,它在大多数存储库中都可用。在 Debian 上,这是sudo apt-get install jq
  • 如果你觉得jq在技术上不需要,egrep可以修改以过滤状态和值

相关内容