From b46a49dc30304e617d20a91846947f144ee10d2d Mon Sep 17 00:00:00 2001 From: theluyuan <1162963624@qq.com> Date: Tue, 12 Oct 2021 21:04:23 +0800 Subject: [PATCH] init --- .gitignore | 1 + main.js | 12 +++++++ package.json | 11 ++++++ util/index.js | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++ yarn-error.log | 54 ++++++++++++++++++++++++++++ yarn.lock | 53 ++++++++++++++++++++++++++++ 6 files changed, 226 insertions(+) create mode 100644 .gitignore create mode 100644 main.js create mode 100644 package.json create mode 100644 util/index.js create mode 100644 yarn-error.log create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/main.js b/main.js new file mode 100644 index 0000000..9e824f5 --- /dev/null +++ b/main.js @@ -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") \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..ca78d2b --- /dev/null +++ b/package.json @@ -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" +} diff --git a/util/index.js b/util/index.js new file mode 100644 index 0000000..facf8e1 --- /dev/null +++ b/util/index.js @@ -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 \ No newline at end of file diff --git a/yarn-error.log b/yarn-error.log new file mode 100644 index 0000000..37c3aac --- /dev/null +++ b/yarn-error.log @@ -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== diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..d172f6a --- /dev/null +++ b/yarn.lock @@ -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"