From 3ee29c7e9a8457b36e421046ca613a5677a7e855 Mon Sep 17 00:00:00 2001 From: ycvk Date: Wed, 8 May 2024 14:24:59 +0800 Subject: [PATCH 1/4] =?UTF-8?q?Feat:=20=E6=96=B0=E5=A2=9Ewindows=E6=89=98?= =?UTF-8?q?=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release_binary.yml | 4 ++- go.mod | 16 +++++----- go.sum | 39 ++++++++++------------- readme.md | 46 ++++++++++++++-------------- 4 files changed, 50 insertions(+), 55 deletions(-) diff --git a/.github/workflows/release_binary.yml b/.github/workflows/release_binary.yml index b9ba30f..34beff3 100644 --- a/.github/workflows/release_binary.yml +++ b/.github/workflows/release_binary.yml @@ -22,4 +22,6 @@ jobs: github_token: ${{ secrets.MY_TOKEN }} goos: ${{ matrix.goos }} goarch: ${{ matrix.goarch }} - binary_name: "deeplx" \ No newline at end of file + binary_name: "deeplx" + extra_files: url.txt + executable_compression: upx --best \ No newline at end of file diff --git a/go.mod b/go.mod index 9e17aff..765faec 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module deeplx-local go 1.22 require ( - github.com/gin-gonic/gin v1.9.1 + github.com/gin-gonic/gin v1.10.0 github.com/imroc/req/v3 v3.43.3 github.com/samber/lo v1.39.0 github.com/sourcegraph/conc v0.3.0 @@ -25,7 +25,7 @@ require ( github.com/go-playground/validator/v10 v10.20.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/google/pprof v0.0.0-20240430035430-e4905b036c4e // indirect + github.com/google/pprof v0.0.0-20240507183855-6f11f98ebb1c // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -36,7 +36,7 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/onsi/ginkgo/v2 v2.17.2 // indirect + github.com/onsi/ginkgo/v2 v2.17.3 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/quic-go v0.43.1 // indirect @@ -46,13 +46,13 @@ require ( go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/arch v0.8.0 // indirect - golang.org/x/crypto v0.22.0 // indirect - golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f // indirect + golang.org/x/crypto v0.23.0 // indirect + golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.24.0 // indirect + golang.org/x/net v0.25.0 // indirect golang.org/x/sys v0.20.0 // indirect golang.org/x/text v0.15.0 // indirect - golang.org/x/tools v0.20.0 // indirect - google.golang.org/protobuf v1.34.0 // indirect + golang.org/x/tools v0.21.0 // indirect + google.golang.org/protobuf v1.34.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index ecb2fcb..c3cc60d 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,8 @@ github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uq github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= -github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -30,7 +30,6 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= @@ -38,8 +37,8 @@ github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20240430035430-e4905b036c4e h1:RsXNnXE59RTt8o3DcA+w7ICdRfR2l+Bb5aE0YMpNTO8= -github.com/google/pprof v0.0.0-20240430035430-e4905b036c4e/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/pprof v0.0.0-20240507183855-6f11f98ebb1c h1:GCixZ7sgey01Kjw8pxBzCD0uVrubxl8SRzRgI0jwP+A= +github.com/google/pprof v0.0.0-20240507183855-6f11f98ebb1c/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -68,8 +67,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g= -github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= +github.com/onsi/ginkgo/v2 v2.17.3 h1:oJcvKpIb7/8uLpDDtnQuf18xVnwKp8DTD7DQ6gTd/MU= +github.com/onsi/ginkgo/v2 v2.17.3/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= github.com/onsi/gomega v1.33.0 h1:snPCflnZrpMsy94p4lXVEkHo12lmPnc3vY5XBbreexE= github.com/onsi/gomega v1.33.0/go.mod h1:+925n5YtiFsLzzafLUHzVMBpvvRAzrydIBiSIxjX3wY= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= @@ -107,12 +106,6 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ycvk/endless v0.0.0-20240425132555-71b31d16be07 h1:A2rqcS6q0CdGyzAiSJrodyAcmRknggK/CoADl3luPBA= github.com/ycvk/endless v0.0.0-20240425132555-71b31d16be07/go.mod h1:zzOu1a0/ntowiZdsZB7KHvqxtw6jUGpSCB2v5ojjUOc= -github.com/ycvk/priority-queue v0.0.0-20240506012911-94b7c33bc0ae h1:gBfbhB6n4543GtdM3xbOTa4pZU2WmCQNCDhrMXuvx3w= -github.com/ycvk/priority-queue v0.0.0-20240506012911-94b7c33bc0ae/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= -github.com/ycvk/priority-queue v0.0.0-20240506022751-cc9f1e660e49 h1:WyzPqDYbS+hjFkrys8wTKw2XSF5Wyy6xBlxr0MBI2lg= -github.com/ycvk/priority-queue v0.0.0-20240506022751-cc9f1e660e49/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= -github.com/ycvk/priority-queue v0.1.1 h1:RbRzQL2T8qCGc0ctTifQQZFgEhbH66CKG3rqiO9eJOY= -github.com/ycvk/priority-queue v0.1.1/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= github.com/ycvk/priority-queue v0.1.2 h1:o867BjZohYDDrDOO0K8CMSD3OY+NmUwCQEvbTuCx3gM= github.com/ycvk/priority-queue v0.1.2/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= @@ -122,14 +115,14 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8 golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= -golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY= -golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -140,10 +133,10 @@ golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= -golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= -google.golang.org/protobuf v1.34.0 h1:Qo/qEd2RZPCf2nKuorzksSknv0d3ERwp1vFG38gSmH4= -google.golang.org/protobuf v1.34.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= +golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/readme.md b/readme.md index b7b97b1..8f5e46e 100644 --- a/readme.md +++ b/readme.md @@ -11,7 +11,7 @@ `docker run -itd -p 8080:62155 neccen/deeplx-local:latest` -翻译地址:`http://localhost:8080` +翻译地址:`http://localhost:8080/translate` ### 可选参数 - `360_api_key`:[quake360](https://quake.360.net/quake/#/personal?tab=message)的api_key,可用于每日自动爬取更多的翻译接口。(有每日免费次数) @@ -19,21 +19,21 @@ - 群友提到的`fofa`不想加,不送免费额度啊,本来想用[Cl0udG0d/Fofa-hack: 非付费会员,fofa数据采集工具](https://github.com/Cl0udG0d/Fofa-hack)偷个懒,发现不传自己的auth会有20条搜索的限制,懒得整了 ### 使用方法 -#### 编译运行 -1. 填入`url.txt`内的 deeplx 的翻译接口,可以只填`ip:port`,也可以填写完整的url。 -2. `go build -o deeplx .`来编译。 -3. 启动编译后的程序,翻译地址为 `http://localhost:62155/translate` ,端口可自行修改。 -#### 本地运行 -1. 在Release中下载对应平台的二进制文件。 -2. 在可执行文件的目录下,新建`url.txt`, 填入`url.txt`内的 deeplx 的翻译接口,可以只填`ip:port`,也可以填写完整的url。 -3. 启动程序,翻译地址为 `http://localhost:62155/translate` +#### 1. Docker 运行 +##### 极简命令: +**会自动使用我内置的爬取的deeplx翻译接口** + + + +`docker run -itd -p 62155:62155 neccen/deeplx-local:latest` + +##### 完整命令: + +`docker run -itd -p 62155:62155 -v /url.txt文件目录:/usr/local/bin/url.txt -e 360_api_key="xxxxx" neccen/deeplx-local:latest` -#### Docker Compose 自编译运行 -1. 填入`url.txt`内的 deeplx 的翻译接口,可以只填`ip:port`,也可以填写完整的url。 -2. `docker compose up -d`来构建并启动容器,`docker-compose.yml`中的配置和端口可自行更改。 -#### Docker Compose 运行 +#### 2. Docker Compose 运行 ```yaml version: '3.8' services: @@ -50,17 +50,17 @@ services: restart: unless-stopped ``` -#### Docker 运行 -##### 完整命令: - -`docker run -itd -p 62155:62155 -v /url.txt文件目录:/usr/local/bin/url.txt -e 360_api_key="xxxxx" neccen/deeplx-local:latest` - -##### 极简命令: -**会自动使用我内置的爬取的deeplx翻译接口** - - +#### 3. 本地运行 +1. 在Release中下载对应平台的二进制文件。 +2. 在可执行文件的目录下,新建`url.txt`, 填入`url.txt`内的 deeplx 的翻译接口,可以只填`ip:port`,也可以填写完整的url。 +3. 启动程序,翻译地址为 `http://localhost:62155/translate` -`docker run -itd -p 62155:62155 neccen/deeplx-local:latest` +#### 4. Windows后台运行 +1. 在Release中下载`windows-xxx`标识的发行版,如[windows-v0.1.2](https://github.com/ycvk/deeplx-local/releases/tag/windows-v0.1.2) +2. 解压打开`.exe`文件后,会自动在后台启动,托盘可以看到服务图标![2fa59a5c188a7e02041948d7b6918e83.png](https://i.mji.rip/2024/05/08/2fa59a5c188a7e02041948d7b6918e83.png) +3. **注意防火墙可能会提示是否允许联网**,点击是 +4. 不想使用需要关闭时,点击图标,点击`quit`即可 +5. 沉浸式翻译地址为`http://localhost:62155/translate` ### Bob翻译插件 From f04c743d7c1bc04eef56fcb7c428f66953639527 Mon Sep 17 00:00:00 2001 From: vank3f3 Date: Wed, 8 May 2024 14:58:03 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E8=81=9A?= =?UTF-8?q?=E5=90=88Scan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 增加聚合搜集,quake360、鹰图的API可以多个同时提交,并整合2个平台爬取的deeplx翻译接口。 2. 增加程序启动时"url.txt"的检测、不存在则自动创建,避免同级目录下无该文件而启动失败。 3. 增加quake360、鹰图的API剩余额度的检测。 4. 调整鹰图API的PageSize大小,避免超过200而请求失败。 --- domain/entity.go | 18 ++++++++- go.mod | 1 - go.sum | 9 ----- init.go | 49 +++++++++++++++++++++--- service/scan.go | 96 ++++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 151 insertions(+), 22 deletions(-) diff --git a/domain/entity.go b/domain/entity.go index 09eb434..a79fb13 100644 --- a/domain/entity.go +++ b/domain/entity.go @@ -26,8 +26,10 @@ type TranslateResponse struct { type YingTuResponse struct { Code int `json:"code"` Data struct { - Total int `json:"total"` - Arr []YingTuResponseArr `json:"arr"` + Total int `json:"total"` + Arr []YingTuResponseArr `json:"arr"` + ConsumeQuota string `json:"consume_quota"` + RestQuota string `json:"rest_quota"` } } @@ -45,3 +47,15 @@ type Quake360ResponseData struct { Domain string `json:"domain"` Id string `json:"id"` // hpjx.e.eceping.net_443_tcp 或者 116.204.90.243_2001_tcp } + +type Quake360UserInfoResponse struct { + Code int `json:"code"` + Message string `json:"message"` + Data Quake360UserInfoResponseData `json:"data"` +} + +type Quake360UserInfoResponseData struct { + MonthRemainingCredit int `json:"month_remaining_credit"` + FreeQueryApiCount int `json:"free_query_api_count"` + MobilePhone string `json:"mobile_phone"` +} diff --git a/go.mod b/go.mod index 9e17aff..fa30dcb 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,6 @@ require ( github.com/samber/lo v1.39.0 github.com/sourcegraph/conc v0.3.0 github.com/ycvk/endless v0.0.0-20240425132555-71b31d16be07 - github.com/ycvk/priority-queue v0.1.2 ) require ( diff --git a/go.sum b/go.sum index ecb2fcb..3c0b08e 100644 --- a/go.sum +++ b/go.sum @@ -30,7 +30,6 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= @@ -107,14 +106,6 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ycvk/endless v0.0.0-20240425132555-71b31d16be07 h1:A2rqcS6q0CdGyzAiSJrodyAcmRknggK/CoADl3luPBA= github.com/ycvk/endless v0.0.0-20240425132555-71b31d16be07/go.mod h1:zzOu1a0/ntowiZdsZB7KHvqxtw6jUGpSCB2v5ojjUOc= -github.com/ycvk/priority-queue v0.0.0-20240506012911-94b7c33bc0ae h1:gBfbhB6n4543GtdM3xbOTa4pZU2WmCQNCDhrMXuvx3w= -github.com/ycvk/priority-queue v0.0.0-20240506012911-94b7c33bc0ae/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= -github.com/ycvk/priority-queue v0.0.0-20240506022751-cc9f1e660e49 h1:WyzPqDYbS+hjFkrys8wTKw2XSF5Wyy6xBlxr0MBI2lg= -github.com/ycvk/priority-queue v0.0.0-20240506022751-cc9f1e660e49/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= -github.com/ycvk/priority-queue v0.1.1 h1:RbRzQL2T8qCGc0ctTifQQZFgEhbH66CKG3rqiO9eJOY= -github.com/ycvk/priority-queue v0.1.1/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= -github.com/ycvk/priority-queue v0.1.2 h1:o867BjZohYDDrDOO0K8CMSD3OY+NmUwCQEvbTuCx3gM= -github.com/ycvk/priority-queue v0.1.2/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= diff --git a/init.go b/init.go index 17c80b9..84962aa 100644 --- a/init.go +++ b/init.go @@ -6,6 +6,7 @@ import ( "deeplx-local/cron" "deeplx-local/domain" "deeplx-local/service" + "errors" "fmt" "github.com/imroc/req/v3" "github.com/sourcegraph/conc/pool" @@ -32,9 +33,32 @@ var ( scanService service.ScanService ) +// readFile +func readFile(filename string) ([]byte, error) { + _, err := os.Stat(filename) + if err != nil { + // file no exit, create it and return nil + if errors.Is(err, os.ErrNotExist) { + log.Println("url.txt is not exist") + return nil, os.WriteFile(filename, []byte{}, 0600) + } + + // Other error + return nil, err + } + + // file exist, read it + content, err := os.ReadFile("url.txt") + if err != nil { + log.Fatal(err) + } + + return content, nil +} + // getValidURLs 从文件中读取并处理URL func getValidURLs() []string { - content, err := os.ReadFile("url.txt") + content, err := readFile("url.txt") if err != nil { log.Fatal(err) } @@ -172,15 +196,28 @@ func getScanService() service.ScanService { if scanService != nil { return scanService } - var cli = req.NewClient().SetTimeout(15 * time.Second) + + if hunterKey == "" && quakeKey == "" { + log.Println("未提供有YingTu 或 360的API Key") + return nil + } + + var ( + cli = req.NewClient().SetTimeout(15 * time.Second) + services []service.ScanService + ) + if hunterKey != "" { - return service.NewYingTuScanService(cli, hunterKey) + services = append(services, service.NewYingTuScanService(cli, hunterKey)) } + if quakeKey != "" { - return service.NewQuake360ScanService(cli, quakeKey) + services = append(services, service.NewQuake360ScanService(cli, quakeKey)) } - log.Println("未找到有效的API Key") - return nil + + // 返回组合扫描服务 + return service.NewCombinedScanService(services...) + } func autoScan() { diff --git a/service/scan.go b/service/scan.go index ed32e20..12d15d9 100644 --- a/service/scan.go +++ b/service/scan.go @@ -6,10 +6,15 @@ import ( "github.com/imroc/req/v3" lop "github.com/samber/lo/parallel" "log" + "net/url" + "strconv" "strings" "time" ) +const Quake360Page = "200" +const YingTuPageSize = "100" + type ScanService interface { Scan() []string } @@ -21,13 +26,16 @@ type YingTuScanService struct { } func NewYingTuScanService(client *req.Client, apikey string) ScanService { - return &YingTuScanService{client: client, apiKey: apikey, searchParam: "KHdlYi5ib2R5PT0iRGVlcEwgRnJlZSBBUEksIERldmVsb3BlZCBieSBzamxsZW8gYW5kIG1pc3N1by4gR28gdG8gL3RyYW5zbGF0ZSB3aXRoIFBPU1QuIGh0dHA6Ly9naXRodWIuY29tL093Ty1OZXR3b3JrL0RlZXBMWCIpJiYoaXAuY291bnRyeT09IuS4reWbvSIp"} + return &YingTuScanService{ + client, + "KHdlYi5ib2R5PT0iRGVlcEwgRnJlZSBBUEksIERldmVsb3BlZCBieSBzamxsZW8gYW5kIG1pc3N1by4gR28gdG8gL3RyYW5zbGF0ZSB3aXRoIFBPU1QuIGh0dHA6Ly9naXRodWIuY29tL093Ty1OZXR3b3JrL0RlZXBMWCIpJiYoaXAuY291bnRyeT09IuS4reWbvSIp", + apikey, + } } func (y *YingTuScanService) Scan() []string { startDate, endDate := getStartDateAndEndDate() - address := fmt.Sprintf("https://hunter.qianxin.com/openApi/search?api-key=%s&search=%s&page=1&page_size=200&is_web=1&port_filter=false&status_code=200&start_time=%s&end_time=%s", - y.apiKey, y.searchParam, startDate, endDate) + address := buildHunterAPIAddress(y.apiKey, y.searchParam, startDate, endDate, 1) var yingtuResp domain.YingTuResponse response, err := y.client. @@ -50,10 +58,31 @@ func (y *YingTuScanService) Scan() []string { return item.Url }) + log.Printf("鹰图爬取 deeplx ip 成功,共爬取 %d 条数据,本次查询 %s ,当前 %s \n", + len(urls), yingtuResp.Data.ConsumeQuota, yingtuResp.Data.RestQuota) + return urls } +// buildHunterAPIAddress 构建鹰图查询地址 +func buildHunterAPIAddress(apiKey, searchParam, startDate, endDate string, page int) string { + baseURL := "https://hunter.qianxin.com/openApi/search" + params := url.Values{} + params.Set("api-key", apiKey) + params.Set("search", searchParam) + params.Set("page", strconv.Itoa(page)) + params.Set("page_size", YingTuPageSize) + params.Set("is_web", "1") + params.Set("port_filter", "false") + params.Set("status_code", "200") + params.Set("start_time", startDate) + params.Set("end_time", endDate) + + address := fmt.Sprintf("%s?%s", baseURL, params.Encode()) + return address +} + func getStartDateAndEndDate() (string, string) { now := time.Now() year, month, day := now.Date() @@ -75,11 +104,48 @@ func NewQuake360ScanService(client *req.Client, apiKey string) ScanService { return &Quake360ScanService{client: client, apiKey: apiKey, searchParam: "response:\"DeepL Free API, Developed by sjlleo and missuo. Go to /translate with POST. http://github.com/OwO-Network/DeepLX\" AND country: \"China\""} } +func (q *Quake360ScanService) GetCredit() bool { + const address = "https://quake.360.net/api/v3/user/info" + var userInfo domain.Quake360UserInfoResponse + response, err := q.client.R(). + SetHeader("X-QuakeToken", q.apiKey). + SetSuccessResult(&userInfo). + SetHeader("Content-Type", "application/json"). + Get(address) + + if err != nil { + log.Println("360用户详情接口请求失败:", err) + return false + } + + defer response.Body.Close() + + if userInfo.Code != 0 { + log.Println("360用户详情接口请求失败", userInfo.Message) + return false + } + + // 判断月度免费次数 或 月度剩余积分 是否大于0 + if userInfo.Data.FreeQueryApiCount > 0 || userInfo.Data.MonthRemainingCredit > 0 { + log.Printf("360用户 %s 详情接口请求成功,月度免费次数剩余:%d,月度剩余积分%d \n", + userInfo.Data.MobilePhone, userInfo.Data.FreeQueryApiCount, userInfo.Data.MonthRemainingCredit) + return true + } + + return false + +} + func (q *Quake360ScanService) Scan() []string { + // 无信用点直接返回 nil + if hasCredit := q.GetCredit(); !hasCredit { + return nil + } + const address = "https://quake.360.net/api/v3/search/quake_service" reqParam := make(map[string]string) reqParam["query"] = q.searchParam - reqParam["size"] = "200" + reqParam["size"] = Quake360Page reqParam["start"] = "0" var quakeResp domain.Quake360Response response, err := q.client.R(). @@ -115,3 +181,25 @@ func getQuakeScanUrl(data domain.Quake360ResponseData) string { // 拼接ip和端口 return strings.Join(split, ":") } + +// CombinedScanService 聚合扫描服务 +type CombinedScanService struct { + scanServices []ScanService +} + +// NewCombinedScanService 创建聚合扫描服务 +func NewCombinedScanService(scanServices ...ScanService) *CombinedScanService { + return &CombinedScanService{scanServices: scanServices} +} + +// Scan 聚合扫描服务 +func (c *CombinedScanService) Scan() []string { + var combinedResults []string + for _, service := range c.scanServices { + results := service.Scan() + combinedResults = append(combinedResults, results...) + log.Printf("%T Scan Results: %d\n", service, len(results)) + } + + return combinedResults +} From 7dedc3722f657d99be0fd79710e4c9d1850ca84c Mon Sep 17 00:00:00 2001 From: ycvk Date: Wed, 8 May 2024 15:47:34 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E4=B8=8E=E5=8F=AF=E7=94=A8url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 +- go.sum | 42 ++--- url.txt | 525 +++++++++++++++++++++++--------------------------------- 3 files changed, 229 insertions(+), 340 deletions(-) diff --git a/go.mod b/go.mod index 0b758ac..0562fed 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.22 require ( github.com/gin-gonic/gin v1.10.0 - github.com/imroc/req/v3 v3.43.3 + github.com/imroc/req/v3 v3.43.4 github.com/samber/lo v1.39.0 github.com/sourcegraph/conc v0.3.0 github.com/ycvk/endless v0.0.0-20240425132555-71b31d16be07 diff --git a/go.sum b/go.sum index ecb2fcb..8b0dfbd 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,8 @@ github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uq github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= -github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -38,8 +38,8 @@ github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20240430035430-e4905b036c4e h1:RsXNnXE59RTt8o3DcA+w7ICdRfR2l+Bb5aE0YMpNTO8= -github.com/google/pprof v0.0.0-20240430035430-e4905b036c4e/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/pprof v0.0.0-20240507183855-6f11f98ebb1c h1:GCixZ7sgey01Kjw8pxBzCD0uVrubxl8SRzRgI0jwP+A= +github.com/google/pprof v0.0.0-20240507183855-6f11f98ebb1c/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -47,6 +47,8 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/imroc/req/v3 v3.43.3 h1:WdZhpUev9THtuwEZsW2LOYacl12fm7IkB7OgACv40+k= github.com/imroc/req/v3 v3.43.3/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA= +github.com/imroc/req/v3 v3.43.4 h1:NSXlB5dELZuxzGEFRWLWEQ9dQmh8d9pUMPa7MevK1K4= +github.com/imroc/req/v3 v3.43.4/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= @@ -68,8 +70,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g= -github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= +github.com/onsi/ginkgo/v2 v2.17.3 h1:oJcvKpIb7/8uLpDDtnQuf18xVnwKp8DTD7DQ6gTd/MU= +github.com/onsi/ginkgo/v2 v2.17.3/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= github.com/onsi/gomega v1.33.0 h1:snPCflnZrpMsy94p4lXVEkHo12lmPnc3vY5XBbreexE= github.com/onsi/gomega v1.33.0/go.mod h1:+925n5YtiFsLzzafLUHzVMBpvvRAzrydIBiSIxjX3wY= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= @@ -107,14 +109,6 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ycvk/endless v0.0.0-20240425132555-71b31d16be07 h1:A2rqcS6q0CdGyzAiSJrodyAcmRknggK/CoADl3luPBA= github.com/ycvk/endless v0.0.0-20240425132555-71b31d16be07/go.mod h1:zzOu1a0/ntowiZdsZB7KHvqxtw6jUGpSCB2v5ojjUOc= -github.com/ycvk/priority-queue v0.0.0-20240506012911-94b7c33bc0ae h1:gBfbhB6n4543GtdM3xbOTa4pZU2WmCQNCDhrMXuvx3w= -github.com/ycvk/priority-queue v0.0.0-20240506012911-94b7c33bc0ae/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= -github.com/ycvk/priority-queue v0.0.0-20240506022751-cc9f1e660e49 h1:WyzPqDYbS+hjFkrys8wTKw2XSF5Wyy6xBlxr0MBI2lg= -github.com/ycvk/priority-queue v0.0.0-20240506022751-cc9f1e660e49/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= -github.com/ycvk/priority-queue v0.1.1 h1:RbRzQL2T8qCGc0ctTifQQZFgEhbH66CKG3rqiO9eJOY= -github.com/ycvk/priority-queue v0.1.1/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= -github.com/ycvk/priority-queue v0.1.2 h1:o867BjZohYDDrDOO0K8CMSD3OY+NmUwCQEvbTuCx3gM= -github.com/ycvk/priority-queue v0.1.2/go.mod h1:qGHGN8rGG0Sw+YzB9zH3N/bY1k1ewc0jTprYFonoqFU= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -122,14 +116,14 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8 golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= -golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY= -golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -140,10 +134,10 @@ golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= -golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= -google.golang.org/protobuf v1.34.0 h1:Qo/qEd2RZPCf2nKuorzksSknv0d3ERwp1vFG38gSmH4= -google.golang.org/protobuf v1.34.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= +golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/url.txt b/url.txt index b322b82..3ce1a69 100644 --- a/url.txt +++ b/url.txt @@ -1,414 +1,309 @@ -http://39.105.97.161:1188/translate -http://106.15.89.0:7001/translate -http://xyzlab.mmyy.fun/translate -http://113.45.191.39:1188/translate +http://150.158.80.45:6009/translate http://120.46.95.125:1188/translate -http://deepl.kevinzhang.cn/translate -http://119.3.249.194:10188/translate -http://59.110.34.163:85/translate -http://49.232.185.166:443/translate -http://154.18.161.26:80/translate -http://mhy6.muhanyun.cn/translate -http://jscu.200913.xyz/translate -http://business-upgrade2.rainydata.com/translate -http://jzgapi.juzhige.net/translate -http://platform.juzhige.net/translate -http://sharing.janestar.cn/translate -http://h5.juzhige.net/translate -http://web.wenku.juzhige.net/translate -http://www.juzhige.net/translate -http://omp.juzhige.net/translate -http://chat.janestar.cn/translate -http://sys-wenku.juzhige.net/translate -http://jzgwenku.juzhige.net/translate -http://jzg.juzhige.net/translate -http://oa.janestar.cn/translate -http://fzu.janestar.cn/translate -http://wenku.juzhige.net/translate -http://jzg.web.juzhige.net/translate -http://paltform.api.juzhige.net/translate -http://api.juzhige.net/translate -http://test.api.juzhige.net/translate -http://share.janestar.cn/translate -http://web.omp.juzhige.net/translate -http://rabbitmq.juzhige.net/translate -http://jenkins.juzhige.net/translate -http://sys.wenku.juzhige.net/translate -http://ls.dovilsely.top/translate -http://deeplx.onshadow.cn/translate -http://deeplx.0x318.com/translate -http://deelx.leozhou.cn/translate -http://deepl.imyrs.net/translate -http://deeplx.xukecheng.tech/translate +http://124.223.61.24:1199/translate http://101.43.100.100:1188/translate http://119.3.249.194:1188/translate -http://deeplx.plsgoaway.xyz/translate -http://116.205.130.49:1188/translate -http://116.204.90.243:2001/translate -http://deeplx.iouo.top/translate -http://deepl.tr1ck.cn/translate -http://hbjc.e.eceping.net/translate -http://snj.e.eceping.net/translate -http://ycdc.e.eceping.net/translate -http://whqs.e.eceping.net/translate -http://153.36.242.81:10030/translate -http://zjsj.e.eceping.net/translate -http://jx.eceping.net/translate -http://hpjx.e.eceping.net/translate -http://xjj.e.eceping.net/translate -http://whhc.e.eceping.net/translate -http://mcxn.e.eceping.net/translate -http://hgzjpx.e.eceping.net/translate -http://whsz.e.eceping.net/translate -http://qyaqjy.e.hcjpce.com/translate -http://xgs.e.eceping.net/translate -http://mcyc.e.eceping.net/translate -http://bdy.enterprise.eceping.net/translate -http://zslh.e.eceping.net/translate -http://ychc.e.eceping.net/translate -http://szhc.e.eceping.net/translate -http://hbjg.e.eceping.net/translate -http://hshc.e.eceping.net/translate -http://221.232.107.161:1024/translate -http://qyjy.e.hcjpce.com/translate -http://hbst.e.eceping.net/translate -http://hbjl.e.eceping.net/translate -http://154.18.161.26:443/translate -http://47.238.223.93:80/translate -http://124.223.61.24:1199/translate -http://jzcy.e.eceping.net/translate -http://deeplx.ou.al/translate -http://150.158.80.45:6009/translate -http://whpxgx.e.hcjpce.com/translate -http://translate.zhheo.com/translate -http://whmc.e.eceping.net/translate -http://tejx.e.eceping.net/translate -http://61.224.66.164:1198/translate -http://123.56.13.17:1188/translate -http://8.134.81.54:60005/translate -http://106.14.190.133:1188/translate -http://deepl.christoudoulos.cn/translate -http://deeplx.gclmit.club/translate -http://nginx.o9o.cn/translate -http://o9o.cn/translate -http://82.156.183.23:6000/translate -http://124.71.191.52:1188/translate -http://124.71.151.104:1188/translate -http://45.94.43.74:8081/translate -http://45.94.43.74:8082/translate -http://c33.fun/translate -http://122.9.150.136:1188/translate -http://1.92.92.68:1188/translate -http://139.159.140.112:1188/translate -http://124.71.110.199:1188/translate -http://deepl.19921130.xyz/translate -http://8.140.250.59:1188/translate -http://115.159.39.45:1188/translate -http://154.12.83.33:1188/translate -http://122.112.213.216:11188/translate -http://106.14.139.26:1188/translate +http://113.45.191.39:1188/translate +http://81.70.207.129:1188/translate http://119.91.23.165:1188/translate -http://165.154.5.156:1188/translate -http://121.41.99.203:1188/translate -https://deepl.arthals.ink/translate +http://101.43.224.133:1188/translate +http://159.75.240.245:1188/translate +http://39.105.97.161:1188/translate +http://47.119.172.46:1188/translate http://43.132.160.253:1188/translate +http://deeplx.0x318.com/translate +http://124.223.85.170:1188/translate http://47.76.126.155:1188/translate -http://159.75.240.245:1188/translate -http://59.110.162.193:1188/translate -http://81.70.207.129:1188/translate -http://47.119.24.34:1188/translate -http://109.206.245.73:1188/translate http://47.242.206.190:1188/translate -http://139.224.191.20:1188/translate -http://116.62.112.61:1188/translate -http://101.42.160.235:1188/translate -http://112.126.74.237:1188/translate -http://101.43.224.133:1188/translate -http://124.223.85.170:1188/translate -http://120.78.15.169:1188/translate -http://47.119.172.46:1188/translate -http://121.43.36.212:1188/translate http://116.252.28.28:1188/translate -http://47.109.98.57:1188/translate +http://122.112.213.216:11188/translate +http://121.41.99.203:1188/translate +http://123.56.13.17:1188/translate +http://165.154.5.156:1188/translate +http://47.119.24.34:1188/translate +http://101.42.160.235:1188/translate +http://153.36.242.81:10030/translate +http://124.71.191.52:1188/translate +http://116.62.112.61:1188/translate +http://8.134.81.54:60005/translate http://82.157.49.14:1188/translate -http://120.55.189.173:1188/translate +http://59.110.162.193:1188/translate +http://106.14.139.26:1188/translate https://49.232.185.166/translate -http://120.26.116.45:1188/translate +http://120.55.189.173:1188/translate +http://43.143.233.18:1188/translate +http://47.109.98.57:1188/translate +http://116.205.130.49:1188/translate http://8.138.111.57:1188/translate -http://47.102.106.172:1188/translate -https://dx.mmyy.fun/translate +http://deeplx.xukecheng.tech/translate +http://109.206.245.73:1188/translate http://119.28.13.127:1188/translate http://43.154.208.219:1188/translate -http://43.143.233.18:1188/translate -http://8.131.60.61:1188/translate -http://16.163.29.52:12294/translate -https://deepl.kevinzhang.cn/translate -http://www.piu.cool:1188/translate -http://139.159.242.136:1188/translate http://124.221.198.187:1188/translate -http://dns.zblank.cn:1188/translate -http://www.zblank.cn:1188/translate -http://wbsubdomain.a.bb.ccc.dddd.yanhao.ren:1188/translate -http://42.193.23.136:1188/translate -http://www.vpn.yanhao.ren:1188/translate -http://fdweb.yanhao.ren:1188/translate -http://webmail.yanhao.ren:1188/translate -http://6948lsh.yanhao.ren:1188/translate -http://site.yanhao.ren:1188/translate -http://www2.ileadtek.com:1188/translate -http://zblank.cn:1188/translate -http://piu.cool:1188/translate -http://mayday.piu.cool:1188/translate +http://139.159.242.136:1188/translate +http://139.224.191.20:1188/translate +http://47.102.106.172:1188/translate +http://121.43.36.212:1188/translate +http://8.131.60.61:1188/translate http://42.192.21.116:1188/translate +http://16.163.29.52:12294/translate http://139.159.254.35:1188/translate -http://47.120.42.220:1188/translate -http://8.130.121.171:1188/translate http://log.windroad.work:6009/translate -http://pan.zblank.cn:1188/translate -http://101.42.168.152:1188/translate -http://hyjumprss.top:1188/translate -http://ycgn51.hkp9ki2.top:1188/translate -http://sq.363337.xyz:10030/translate -http://mhy6.muhanyun.cn:10030/translate -http://120.46.163.33:1188/translate -http://121.40.157.111:1188/translate +http://deepl.19921130.xyz/translate +https://deepl.kevinzhang.cn/translate http://43.139.218.213:1188/translate -http://memo.piu.cool:1188/translate -http://101.42.227.165:1188/translate -http://flowingyears.space:1188/translate -http://jscu.200913.xyz:10030/translate http://panel.windroad.work:6009/translate -http://43.138.215.164:1188/translate -http://s1461a.top:1188/translate -http://47.103.194.159:1188/translate +http://8.130.121.171:1188/translate +http://43.143.198.166:1188/translate +http://www.vpn.yanhao.ren:1188/translate +http://6948lsh.yanhao.ren:1188/translate http://api.yimiwork.com:1188/translate +http://fdweb.yanhao.ren:1188/translate http://m.1mi.cn:1188/translate +http://webmail.yanhao.ren:1188/translate +http://site.yanhao.ren:1188/translate http://news.1mi.cn:1188/translate +http://42.193.23.136:1188/translate +http://ycgn51.hkp9ki2.top:1188/translate http://1.12.229.77:1188/translate -http://43.143.198.166:1188/translate -http://49.233.41.73:1188/translate +https://dx.mmyy.fun/translate +http://wbsubdomain.a.bb.ccc.dddd.yanhao.ren:1188/translate http://82.157.137.187:1188/translate -http://38.47.100.106:1188/translate http://123.60.157.70:8085/translate -http://103.152.35.2:1188/translate -http://58.87.104.110:1188/translate -http://42.192.93.139:10003/translate -http://203.25.119.208:1188/translate -http://103.158.190.203:4321/translate -http://195.154.184.125:1188/translate +http://101.42.227.165:1188/translate +http://38.47.100.106:1188/translate +http://120.26.116.45:1188/translate +http://47.120.42.220:1188/translate +http://flowingyears.space:1188/translate +http://120.46.163.33:1188/translate +http://sq.363337.xyz:10030/translate +http://jscu.200913.xyz:10030/translate +http://mhy6.muhanyun.cn:10030/translate +http://hyjumprss.top:1188/translate +http://101.42.168.152:1188/translate +http://s1461a.top:1188/translate +http://43.138.215.164:1188/translate http://101.43.76.234:1188/translate -http://46.8.19.173:1188/translate -http://82.156.36.11:1188/translate http://49.235.73.101:1188/translate -http://176.126.114.231:1188/translate +http://58.87.104.110:1188/translate +http://42.192.93.139:10003/translate +http://121.40.157.111:1188/translate http://101.35.115.171:1188/translate +http://103.152.35.2:1188/translate +http://47.103.194.159:1188/translate +http://49.233.41.73:1188/translate http://62.106.70.227:1188/translate -http://45.147.51.155:1188/translate -http://132.145.80.159:1188/translate +http://176.126.114.231:1188/translate +http://82.156.36.11:1188/translate http://119.91.152.74:1188/translate -http://132.145.93.176:1188/translate -http://117.50.183.46:1188/translate +http://203.25.119.208:1188/translate http://122.152.221.70:1188/translate -http://146.56.165.8:1188/translate -http://101.133.141.24:8188/translate +http://117.50.183.46:1188/translate +http://182.150.116.147:1188/translate http://175.178.237.179:1188/translate -http://202.81.237.189:1188/translate -http://132.226.232.50:1188/translate http://54.64.224.232:1188/translate -http://47.236.22.51:1188/translate -http://182.150.116.147:1188/translate -http://18.142.80.110:1188/translate -http://141.11.139.95:1188/translate +http://103.158.190.203:4321/translate http://52.194.218.139:1188/translate -http://141.98.197.109:1188/translate +http://132.145.80.159:1188/translate +http://146.56.165.8:1188/translate +http://141.11.139.95:1188/translate http://1.12.243.147:1188/translate -http://8.142.134.155:1188/translate +http://132.226.232.50:1188/translate +http://202.81.237.189:1188/translate +http://46.8.19.173:1188/translate +http://195.154.184.125:1188/translate +http://18.142.80.110:1188/translate http://182.42.127.225:1188/translate +http://168.138.214.221:1188/translate +http://132.145.93.176:1188/translate +http://45.147.51.155:1188/translate +http://8.142.134.155:1188/translate +http://47.236.22.51:1188/translate +http://38.148.254.10:1188/translate +http://142.171.218.100:1188/translate http://148.135.107.108:1188/translate +http://168.138.34.126:1188/translate +http://150.230.200.159:1188/translate http://106.14.17.223:1188/translate -http://95.164.86.107:1188/translate -http://121.43.165.38:1188/translate -http://18.157.122.228:1188/translate -http://142.171.218.100:1188/translate -http://38.148.254.10:1188/translate +http://101.133.141.24:8188/translate http://23.94.122.132:1188/translate http://211.227.72.101:1188/translate -http://168.138.214.221:1188/translate http://107.150.100.170:8880/translate http://209.141.49.210:1188/translate -http://150.230.200.159:1188/translate -http://168.138.34.126:1188/translate +http://95.164.86.107:1188/translate http://142.171.77.219:1188/translate -http://45.145.72.29:1188/translate -http://129.153.73.237:1188/translate -http://104.234.60.178:1188/translate -http://107.175.28.239:1188/translate -http://69.30.241.226:1188/translate -http://37.123.196.26:1188/translate http://165.227.18.166:1188/translate +http://18.157.122.228:1188/translate http://167.99.24.220:1188/translate -http://107.189.1.3:1188/translate -http://79.137.205.255:1188/translate -http://162.55.35.20:1188/translate -http://152.67.211.94:1188/translate -http://146.56.97.135:1188/translate -http://150.230.254.8:9033/translate -http://116.203.83.80:1188/translate -http://172.245.131.60:8081/translate -http://150.230.46.219:8136/translate -http://43.134.250.154:1188/translate +http://107.175.28.239:1188/translate +http://45.145.72.29:1188/translate http://8.210.101.225:1188/translate +http://37.123.196.26:1188/translate +http://172.245.131.60:8081/translate +http://104.234.60.178:1188/translate +http://121.43.165.38:1188/translate +http://129.153.73.237:1188/translate http://142.171.218.120:8000/translate http://23.94.104.174:1188/translate -http://103.163.186.90:1188/translate -http://148.135.51.114:1188/translate -http://51.222.13.40:1188/translate http://142.171.199.125:1188/translate -http://157.245.192.219:1188/translate -http://8.222.213.133:1188/translate +http://116.203.83.80:1188/translate +http://43.134.250.154:1188/translate +http://103.163.186.90:1188/translate http://148.135.58.49:1188/translate -http://74.48.52.216:1188/translate +http://148.135.51.114:1188/translate +http://42.98.172.229:1188/translate +http://162.55.35.20:1188/translate http://142.171.3.185:1188/translate -http://142.171.59.190:1188/translate -http://74.48.170.227:1188/translate -http://185.106.209.123:1188/translate -http://15.228.190.225:12294/translate +http://157.245.192.219:1188/translate +http://150.230.254.8:9033/translate +http://146.56.97.135:1188/translate +http://152.67.211.94:1188/translate +http://104.168.43.152:1188/translate +http://51.222.13.40:1188/translate +http://148.135.73.241:1188/translate +http://148.135.81.210:1188/translate http://37.123.193.136:1188/translate http://148.135.124.106:1188/translate -http://42.98.172.229:1188/translate -http://142.171.225.251:1188/translate -http://104.168.43.152:1188/translate http://148.135.70.165:1188/translate -http://148.135.81.210:1188/translate -http://148.135.73.241:1188/translate http://107.173.255.75:7788/translate +http://142.171.59.190:1188/translate +http://74.48.170.227:1188/translate +http://107.189.1.3:1188/translate http://154.40.56.85:1188/translate -http://74.48.19.200:1188/translate http://142.171.12.29:1188/translate http://148.135.61.236:1188/translate -http://89.117.172.208:1188/translate -http://64.112.42.240:1188/translate -http://107.172.8.146:1188/translate http://43.154.124.164:1188/translate -http://192.210.143.151:1188/translate +http://74.48.19.200:1188/translate +http://74.48.52.216:1188/translate +http://185.106.209.123:1188/translate http://114.55.7.143:1188/translate -http://104.160.19.60:8000/translate http://119.28.32.110:1188/translate -http://148.135.62.170:1188/translate -http://107.175.28.34:1188/translate -http://150.230.32.50:1188/translate -http://103.114.163.230:1188/translate -http://104.168.22.220:1188/translate -http://192.9.142.50:1188/translate +http://192.210.143.151:1188/translate +http://150.230.46.219:8136/translate +http://64.112.42.240:1188/translate http://142.171.198.78:1188/translate -http://142.171.224.118:1188/translate -http://43.156.58.228:1188/translate -http://148.135.98.234:1188/translate -http://194.87.252.161:1188/translate +http://104.168.22.220:1188/translate +http://107.175.28.34:1188/translate +http://142.171.225.251:1188/translate http://47.76.48.116:1188/translate -http://190.92.242.194:1188/translate -http://43.143.240.2:1188/translate -http://148.135.106.166:1188/translate -http://192.9.145.2:1188/translate -http://47.243.28.163:1188/translate http://45.152.67.153:1188/translate -http://138.2.95.93:1188/translate -http://192.210.142.53:1188/translate +http://190.92.242.194:1188/translate +http://89.117.172.208:1188/translate http://20.89.43.13:1188/translate -http://43.130.10.231:1188/translate +http://148.135.98.234:1188/translate +http://103.114.163.230:1188/translate http://141.11.139.98:1188/translate -http://192.227.249.132:1188/translate http://38.47.98.127:1188/translate +http://8.222.213.133:1188/translate +http://47.243.28.163:1188/translate http://104.208.71.189:1188/translate -http://34.97.37.189:1188/translate -http://5.252.226.8:1188/translate -http://37.123.192.81:1188/translate +http://43.143.240.2:1188/translate http://124.220.101.194:1188/translate -http://107.172.87.53:1188/translate -http://101.35.175.93:1188/translate -http://168.138.161.149:1188/translate -http://45.143.234.207:1188/translate -http://150.230.46.11:1188/translate -http://129.146.241.124:1188/translate -http://43.134.189.147:1188/translate +http://43.130.10.231:1188/translate +http://43.156.58.228:1188/translate +http://148.135.106.166:1188/translate +http://148.135.62.170:1188/translate +http://192.210.142.53:1188/translate +http://192.227.249.132:1188/translate +http://15.228.190.225:12294/translate http://42.193.219.103:1188/translate -http://129.146.98.200:1188/translate -http://23.94.223.217:1188/translate +http://138.2.95.93:1188/translate +http://37.123.192.81:1188/translate +http://45.143.234.207:1188/translate http://52.140.204.252:1188/translate +http://107.172.87.53:1188/translate +http://142.171.224.118:1188/translate http://43.133.184.109:1188/translate -http://141.11.90.131:1188/translate -http://107.172.103.49:1188/translate +http://5.252.226.8:1188/translate +http://168.138.161.149:1188/translate +http://101.35.175.93:1188/translate http://1.12.45.103:1188/translate -http://103.117.103.14:1188/translate -http://107.172.234.71:1188/translate http://193.32.151.19:1188/translate http://195.245.242.19:1188/translate -http://107.172.137.246:1188/translate +http://103.117.103.14:1188/translate +http://141.11.90.131:1188/translate +http://43.134.189.147:1188/translate +http://23.94.223.217:1188/translate +http://107.172.103.49:1188/translate +http://129.146.98.200:1188/translate http://110.42.225.114:1988/translate -http://119.3.6.116:1188/translate +http://129.146.241.124:1188/translate http://124.222.168.113:1188/translate http://141.147.151.154:1188/translate -http://43.155.174.62:1188/translate -http://107.174.88.163:1188/translate -http://193.32.149.239:1188/translate -http://103.247.28.212:1188/translate http://158.101.157.53:1188/translate -http://150.230.108.185:1188/translate http://155.248.187.32:1188/translate -http://47.236.38.78:1188/translate -http://106.14.72.237:1188/translate +http://150.230.108.185:1188/translate +http://150.230.32.50:1188/translate http://118.89.199.180:80/translate -http://39.100.95.114:1188/translate -http://192.9.147.173:1188/translate -http://104.214.145.200:1188/translate -http://172.104.83.81:1188/translate http://117.50.162.145:1188/translate http://81.70.94.105:1188/translate -http://20.205.96.238:1188/translate -http://168.138.161.222:1188/translate -http://198.46.215.119:1188/translate -http://120.79.93.103:1188/translate +http://103.247.28.212:1188/translate +http://107.174.88.163:1188/translate +http://107.172.137.246:1188/translate http://138.2.11.53:1188/translate -http://158.247.197.25:1188/translate +http://106.14.72.237:1188/translate http://47.107.100.134:1188/translate -http://150.158.45.100:1188/translate -http://120.76.141.173:1188/translate -http://144.24.84.231:1188/translate -http://194.233.71.122:1188/translate -http://146.56.111.210:1188/translate -http://152.67.213.75:1188/translate -http://207.148.127.142:1188/translate -http://38.6.176.90:1024/translate +http://8.140.203.210:1188/translate +http://172.104.83.81:1188/translate +http://168.138.161.222:1188/translate +http://104.214.145.200:1188/translate http://139.224.225.116:1188/translate -http://139.99.66.128:1188/translate +http://120.76.141.173:1188/translate +http://39.100.95.114:1188/translate +http://158.247.197.25:1188/translate +http://47.116.37.52:1188/translate +http://198.46.215.119:1188/translate +http://43.155.174.62:1188/translate +http://194.87.252.161:1188/translate +http://47.236.38.78:1188/translate http://209.141.41.59:1188/translate +http://120.79.93.103:1188/translate +http://38.6.176.90:1024/translate http://120.76.140.44:1188/translate -http://47.116.37.52:1188/translate -http://138.2.123.154:1188/translate -http://106.14.104.93:1188/translate -http://8.140.203.210:1188/translate -http://51.81.210.63:1188/translate http://121.43.134.47:1188/translate -http://39.105.60.208:1188/translate +http://150.158.45.100:1188/translate +http://106.14.104.93:1188/translate +http://107.172.234.71:1188/translate http://47.107.109.131:1188/translate -http://138.68.240.43:1188/translate +http://150.230.46.11:1188/translate +http://192.9.147.173:1188/translate +http://144.24.84.231:1188/translate http://165.154.203.71:1188/translate +http://152.67.213.75:1188/translate +http://213.35.115.52:1188/translate http://157.90.115.116:1188/translate +http://35.220.175.223:1188/translate +http://207.148.127.142:1188/translate +http://101.133.234.93:1188/translate +http://120.78.82.181:1188/translate +http://120.77.245.55:1188/translate http://170.64.190.34:1188/translate +http://39.101.74.119:1188/translate http://45.33.120.170:1188/translate -http://213.35.115.52:1188/translate -http://144.24.94.118:1188/translate -http://146.56.111.178:1188/translate -http://35.220.175.223:1188/translate -http://123.57.16.233:1188/translate http://124.71.99.68:1188/translate +http://8.134.151.104:1188/translate http://8.142.90.128:1188/translate http://107.173.186.30:1188/translate -http://146.56.111.132:8180/translate -http://101.133.234.93:1188/translate -http://39.101.74.119:1188/translate -http://120.78.82.181:1188/translate +http://119.3.6.116:1188/translate +http://138.2.123.154:1188/translate +http://194.233.71.122:1188/translate +http://20.205.96.238:1188/translate http://39.107.101.134:1188/translate +http://118.89.199.180/translate +http://138.68.240.43:1188/translate +http://51.81.210.63:1188/translate +http://39.105.60.208:1188/translate +http://193.32.149.239:1188/translate +http://144.24.94.118:1188/translate +http://139.99.66.128:1188/translate +http://123.57.16.233:1188/translate +http://146.56.111.210:1188/translate +http://42.194.148.47:1188/translate http://152.69.180.143:1188/translate -http://120.77.245.55:1188/translate -http://8.134.151.104:1188/translate \ No newline at end of file +http://146.56.111.178:1188/translate +http://146.56.111.132:8180/translate +http://123.116.149.203:1188/translate +http://42.192.83.104:1188/translate +http://101.201.38.103:1188/translate +http://1.14.59.89:1188/translate +http://120.55.63.151:1188/translate \ No newline at end of file From fe048560a5cc9a01134947d84620acb38f1b5127 Mon Sep 17 00:00:00 2001 From: ycvk Date: Wed, 8 May 2024 17:01:15 +0800 Subject: [PATCH 4/4] =?UTF-8?q?update:=20=E4=BD=BF=E7=94=A8=E6=AD=A3?= =?UTF-8?q?=E5=88=99=E5=BC=82=E6=AD=A5=E5=8E=BB=E5=A4=84=E7=90=86url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release_binary.yml | 3 +-- init.go | 27 +++++++++++++----------- main.go | 4 ++-- service/balancer_deeplx.go | 31 ++++++++++++++++------------ 4 files changed, 36 insertions(+), 29 deletions(-) diff --git a/.github/workflows/release_binary.yml b/.github/workflows/release_binary.yml index 34beff3..b6c60fb 100644 --- a/.github/workflows/release_binary.yml +++ b/.github/workflows/release_binary.yml @@ -23,5 +23,4 @@ jobs: goos: ${{ matrix.goos }} goarch: ${{ matrix.goarch }} binary_name: "deeplx" - extra_files: url.txt - executable_compression: upx --best \ No newline at end of file + extra_files: url.txt \ No newline at end of file diff --git a/init.go b/init.go index 84962aa..e61e5a3 100644 --- a/init.go +++ b/init.go @@ -9,12 +9,14 @@ import ( "errors" "fmt" "github.com/imroc/req/v3" + lop "github.com/samber/lo/parallel" "github.com/sourcegraph/conc/pool" "log" "net/http" "os" "os/exec" "os/signal" + "regexp" "strconv" "strings" "syscall" @@ -98,19 +100,20 @@ func getValidURLs() []string { } func processUrls(urls []string) []string { - for i := range urls { - urls[i] = strings.TrimSpace(urls[i]) - if !strings.HasSuffix(urls[i], "/translate") { - if strings.HasSuffix(urls[i], "/") { - urls[i] += "translate" - } else { - urls[i] += "/translate" - } - } - if !strings.HasPrefix(urls[i], "http") { - urls[i] = "http://" + urls[i] + // 使用正则表达式处理 URL 后缀 + suffixPattern := regexp.MustCompile(`(?:/translate)?/?$`) + // 使用正则表达式处理 URL 前缀 + prefixPattern := regexp.MustCompile("^(http|https)://") + + urls = lop.Map(urls, func(url string, _ int) string { + u := strings.TrimSpace(url) + u = suffixPattern.ReplaceAllString(u, "/translate") + if prefixPattern.MatchString(u) { + return u } - } + return "http://" + u + }) + // 去重 distinctURLs(&urls) // 保存处理后的URL diff --git a/main.go b/main.go index a2b8b0d..dbf0ef5 100644 --- a/main.go +++ b/main.go @@ -24,8 +24,8 @@ func initServer() { // 注册服务 gin.SetMode(gin.ReleaseMode) r := gin.Default() - lxService := service.NewDeepLXService(&urLs) - balancerService := service.NewLoadBalancer(lxService.(*service.DeepLXService)) + //lxService := service.NewDeepLXService(&urLs) + balancerService := service.NewLoadBalancer(&urLs) lxHandler := web.NewDeepLXHandler(balancerService) lxHandler.RegisterRoutes(r) diff --git a/service/balancer_deeplx.go b/service/balancer_deeplx.go index 457bb68..dc9fc69 100644 --- a/service/balancer_deeplx.go +++ b/service/balancer_deeplx.go @@ -3,6 +3,8 @@ package service import ( "context" "deeplx-local/domain" + "github.com/imroc/req/v3" + lop "github.com/samber/lo/parallel" "github.com/sourcegraph/conc/pool" "github.com/sourcegraph/conc/stream" "log" @@ -22,19 +24,22 @@ type Server struct { } type LoadBalancer struct { - Servers []*Server - mutex sync.Mutex - deepLXService *DeepLXService - re *regexp.Regexp + Servers []*Server + mutex sync.Mutex + re *regexp.Regexp + client *req.Client } -// NewLoadBalancer 负载均衡 装饰器模式包了一层service -func NewLoadBalancer(service *DeepLXService) TranslateService { - servers := make([]*Server, len(*service.validList)) - for i, url := range *service.validList { - servers[i] = &Server{URL: url, Weight: 1, CurrentWeight: 1} +// NewLoadBalancer 负载均衡 +func NewLoadBalancer(vlist *[]string) TranslateService { + servers := lop.Map(*vlist, func(item string, index int) *Server { + return &Server{URL: item, Weight: 1, CurrentWeight: 1} + }) + return &LoadBalancer{ + Servers: servers, + client: req.NewClient().SetTimeout(2 * time.Second), + re: regexp.MustCompile(`[^.!?]+[.!?]`), } - return &LoadBalancer{Servers: servers, deepLXService: service, re: regexp.MustCompile(`[^.!?]+[.!?]`)} } func (lb *LoadBalancer) GetTranslateData(trReq domain.TranslateRequest) domain.TranslateResponse { @@ -68,12 +73,12 @@ func (lb *LoadBalancer) GetTranslateData(trReq domain.TranslateRequest) domain.T for _, part := range textParts { s.Go(func() stream.Callback { - req := domain.TranslateRequest{ + transReq := domain.TranslateRequest{ Text: part, SourceLang: trReq.SourceLang, TargetLang: trReq.TargetLang, } - res := lb.sendRequest(req) + res := lb.sendRequest(transReq) return func() { results = append(results, res.Data) } @@ -99,7 +104,7 @@ func (lb *LoadBalancer) sendRequest(trReq domain.TranslateRequest) domain.Transl server := lb.getServer() var trResult domain.TranslateResponse start := time.Now() - response, err := lb.deepLXService.client.R(). + response, err := lb.client.R(). SetContext(ctx). SetBody(trReq). SetSuccessResult(&trResult).