This commit is contained in:
2021-10-12 21:04:23 +08:00
commit b46a49dc30
6 changed files with 226 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
node_modules

12
main.js Normal file
View File

@@ -0,0 +1,12 @@
import BtDonwold from "./util/index.js";
const bt = new BtDonwold({
ip:"127.0.0.1",
port:17844
})
// const str = bt.base64_encode("C:/Users/116296/Desktop/debian-edu-11.0.0-amd64-netinst.iso.torrent")
// bt.addTask("C:/Users/116296/Desktop/debian-edu-11.0.0-amd64-netinst.iso.torrent")
// bt.getList()
// bt.delete("899d629411da83faf1893f77266d8b40b3adecde")

11
package.json Normal file
View File

@@ -0,0 +1,11 @@
{
"name": "btutil",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"axios": "^0.22.0",
"form-data": "^4.0.0"
},
"type": "module"
}

95
util/index.js Normal file
View File

@@ -0,0 +1,95 @@
import axios from "axios"
import fs from "fs"
import FormData from "form-data"
class BtDonwold {
constructor({ ip, port }) {
this.ip = ip
this.port = port
this.sessionId = ""
axios.defaults.baseURL = `http://${this.ip}:${this.port}`
this.baseURL = `http://${this.ip}:${this.port}`
// this.getTokne()
}
async getTokne() {
axios.post(`/transmission/rpc`, { "method": "torrent-get", "arguments": { "fields": ["id", "error", "errorString", "eta", "isFinished", "isStalled", "leftUntilDone", "metadataPercentComplete", "peersConnected", "peersGettingFromUs", "peersSendingToUs", "percentDone", "queuePosition", "rateDownload", "rateUpload", "recheckProgress", "seedRatioMode", "seedRatioLimit", "sizeWhenDone", "status", "trackers", "downloadDir", "uploadedEver", "uploadRatio", "webseedsSendingToUs"], "ids": "recently-active" } }, {
headers: {
'X-Transmission-Session-Id': this.sessionId
}
}).then((res) => {
console.log(res.data, "成功")
}).catch((err) => {
if (err.response.status == 409) {
// console.log(err.response.headers['x-transmission-session-id'])
this.sessionId = err.response.headers['x-transmission-session-id']
this.getTokne()
}
})
}
addTask(file) {
const form = new FormData()
form.append('savepath', 'd:/bt');
form.append("autoTMM", "false")
form.append("rename", "")
form.append("category", "")
// true 开始
form.append("startTorrentHidden", "")
form.append("skip_checking", "")
form.append("contentLayout", "Original")
form.append("sequentialDownload", "")
form.append("dlLimitHidden", "0")
form.append("upLimitHidden", "0")
form.append("fileselect[]", fs.createReadStream(file))
form.submit(`${this.baseURL}/api/v2/torrents/add`, function (err, res) {
// res response object (http.IncomingMessage) //
})
}
base64_decode(base64str, file) {
// create buffer object from base64 encoded string, it is important to tell the constructor that the string is base64 encoded
var bitmap = new Buffer.from(base64str, 'base64');
// write buffer to file
fs.writeFileSync(file, bitmap);
console.log('******** File created from base64 encoded string ********');
}
base64_encode(file) {
// read binary data
var bitmap = fs.readFileSync(file);
// convert binary data to base64 encoded string
return new Buffer.from(bitmap).toString('base64');
}
async getList() {
let { data: { torrents } } = await axios.get("/api/v2/sync/maindata")
// console.log(data.torrents)
// torrents
let list = []
for (let i in torrents) {
let info = {
name: torrents[i].name,
amount_left: (torrents[i].amount_left / 1024 / 1024).toFixed(2),
fileid: i
}
list.push(info)
}
console.log(list)
}
async delete(hashes) {
try{
const form = new FormData()
form.append("hashes",hashes)
form.append("deleteFiles","false")
form.submit(`${this.baseURL}/api/v2/torrents/delete`)
}catch (err){
console.log("删除失败", err)
}
console.log("删除成功")
}
}
export default BtDonwold

54
yarn-error.log Normal file
View File

@@ -0,0 +1,54 @@
Arguments:
C:\Program Files\nodejs\node.exe C:\Users\116296\AppData\Roaming\npm\node_modules\yarn\bin\yarn.js add form-data
PATH:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\libnvvp;C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64\compiler;C:\Program Files (x86)\VMware\VMware Workstation\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\PuTTY\;C:\Program Files\nodejs\;C:\Users\116296\Downloads\annie_0.10.3_Windows_64-bit;C:\Users\116296\Downloads\ffmpeg-2021-06-02-git-071930de72-full_build\bin;C:\Program Files\dotnet\;C:\Program Files\Git\cmd;C:\Users\116296\AppData\Local\Yarn\bin;C:\Program Files\NVIDIA Corporation\Nsight Compute 2020.2.1\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\Go\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Users\116296\AppData\Local\Android\Sdk\platform-tools;C:\Users\116296\AppData\Local\Programs\Python\Python39\Scripts\;C:\Users\116296\AppData\Local\Programs\Python\Python39\;C:\Users\116296\AppData\Local\Microsoft\WindowsApps;;C:\Users\116296\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\116296\AppData\Roaming\npm;C:\Program Files\JetBrains\WebStorm 2021.1.1\bin;;C:\Users\116296\.dotnet\tools;C:\Users\116296\go\bin
Yarn version:
1.22.11
Node version:
14.17.0
Platform:
win32 x64
Trace:
Error: Client network socket disconnected before secure TLS connection was established
at connResetException (internal/errors.js:607:14)
at TLSSocket.onConnectEnd (_tls_wrap.js:1554:19)
at TLSSocket.emit (events.js:388:22)
at endReadableNT (internal/streams/readable.js:1336:12)
at processTicksAndRejections (internal/process/task_queues.js:82:21)
npm manifest:
{
"name": "btutil",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"axios": "^0.22.0"
},
"type": "module"
}
yarn manifest:
No manifest
Lockfile:
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
axios@^0.22.0:
version "0.22.0"
resolved "https://registry.npmjs.org/axios/-/axios-0.22.0.tgz#bf702c41fb50fbca4539589d839a077117b79b25"
integrity sha512-Z0U3uhqQeg1oNcihswf4ZD57O3NrR1+ZXhxaROaWpDmsDTx7T2HNBV2ulBtie2hwJptu8UvgnJoK+BIqdzh/1w==
dependencies:
follow-redirects "^1.14.4"
follow-redirects@^1.14.4:
version "1.14.4"
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379"
integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==

53
yarn.lock Normal file
View File

@@ -0,0 +1,53 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.nlark.com/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
axios@^0.22.0:
version "0.22.0"
resolved "https://registry.npmjs.org/axios/-/axios-0.22.0.tgz#bf702c41fb50fbca4539589d839a077117b79b25"
integrity sha512-Z0U3uhqQeg1oNcihswf4ZD57O3NrR1+ZXhxaROaWpDmsDTx7T2HNBV2ulBtie2hwJptu8UvgnJoK+BIqdzh/1w==
dependencies:
follow-redirects "^1.14.4"
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=
dependencies:
delayed-stream "~1.0.0"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
follow-redirects@^1.14.4:
version "1.14.4"
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379"
integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==
form-data@^4.0.0:
version "4.0.0"
resolved "https://registry.nlark.com/form-data/download/form-data-4.0.0.tgz?cache=0&sync_timestamp=1618846951886&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fform-data%2Fdownload%2Fform-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
integrity sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
mime-types "^2.1.12"
mime-db@1.50.0:
version "1.50.0"
resolved "https://registry.nlark.com/mime-db/download/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f"
integrity sha1-q9SslOmNPA4YUBbGerRdX95AwR8=
mime-types@^2.1.12:
version "2.1.33"
resolved "https://registry.npmmirror.com/mime-types/download/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb"
integrity sha1-H6EqkERy+v0GjkjZ6EAfdNP3Dts=
dependencies:
mime-db "1.50.0"