This commit is contained in:
539943419 committed 2025-01-10 21:57:10 +08:00
commit 1167d46c93
3 files changed
+239

No files matched your search

+235
View File
@@ -0,0 +1,235 @@
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"math/rand"
"net/http"
"os"
"strconv"
"strings"
"time"
)
const (
characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
separator = "-"
length = 28
)
func generateRandomSid() string {
rand.Seed(time.Now().UnixNano())
var sb strings.Builder
half := length / 2
for i := 0; i < length; i++ {
if i == half {
sb.WriteString(separator)
} else {
sb.WriteByte(characters[rand.Intn(len(characters))])
}
}
return sb.String()
}
func rangeFunc(n int) []int {
arr := make([]int, n)
for i := 0; i < n; i++ {
arr[i] = i
}
return arr
}
func input(prompt string) (string, error) {
fmt.Print(prompt)
var input string
_, err := fmt.Scanln(&input)
return input, err
}
func sleep(timeout int) {
time.Sleep(time.Duration(timeout) * time.Millisecond)
}
func praise(id int, max int) (int, error) {
sid := generateRandomSid()
successCount := 0
max = min(max, 1)
for _, _ = range rangeFunc(max) {
url := fmt.Sprintf("https://shiqu.zhilehuo.com/api/soundRecord/praise?soundRecordId=%d&paraSid=%s", id, sid)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return 0, err
}
req.Header.Set("Accept", "application/json, text/plain, */*")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
req.Header.Set("Sec-Fetch-Dest", "empty")
req.Header.Set("Sec-Fetch-Mode", "cors")
req.Header.Set("Sec-Fetch-Site", "same-origin")
req.Header.Set("Cookie", fmt.Sprintf("sid=%s", sid))
req.Header.Set("Referer", fmt.Sprintf("https://shiqu.zhilehuo.com/page/record/soundRecordDetail.html?source=share&id=%d&code=011CrS000ZlKxS1qQH300N6Ia90CrS0E&state=sq2019", id))
req.Header.Set("Referrer-Policy", "unsafe-url")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return 0, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return 0, err
}
var result map[string]interface{}
err = json.Unmarshal(body, &result)
if err != nil {
return 0, err
}
code, ok := result["code"].(float64)
if !ok {
return 0, fmt.Errorf("无法获取 code")
}
if int(code) == 0 {
successCount++
}
}
if successCount > 0 {
fmt.Printf("帮忙点赞%d次\n", successCount)
}
return successCount, nil
}
func getPraiseCount(id int) (int, error) {
sid := generateRandomSid()
url := fmt.Sprintf("https://shiqu.zhilehuo.com/api/soundRecord/getSoundRecordDetail?id=%d&from=share&startDate=&endDate=&sg=", id)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return -1, err
}
req.Header.Set("Accept", "application/json, text/plain, */*")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
req.Header.Set("Sec-Fetch-Dest", "empty")
req.Header.Set("Sec-Fetch-Mode", "cors")
req.Header.Set("Sec-Fetch-Site", "same-origin")
req.Header.Set("Cookie", fmt.Sprintf("sid=%s", sid))
req.Header.Set("Referer", fmt.Sprintf("https://shiqu.zhilehuo.com/page/record/soundRecordDetail.html?source=share&id=%d", id))
req.Header.Set("Referrer-Policy", "unsafe-url")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return -1, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return -1, err
}
var result map[string]interface{}
err = json.Unmarshal(body, &result)
if err != nil {
return -1, err
}
data, ok := result["data"].(map[string]interface{})
if !ok {
return -1, fmt.Errorf("无法获取 data")
}
praiseCount, ok := data["praiseCount"].(float64)
if !ok {
return -1, fmt.Errorf("无法获取 praiseCount")
}
return int(praiseCount), nil
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func main() {
rand.Seed(time.Now().UnixNano())
var id int
var praiseCount int
inputUrl, err := input("点赞链接=>")
if err != nil {
fmt.Println("读取输入错误:", err)
os.Exit(1)
}
idMatch0 := strings.Split(inputUrl, "id%3D")
if len(idMatch0) > 1 {
idStr := strings.Split(idMatch0[1], "%")[0]
id, err = strconv.Atoi(idStr)
if err != nil {
fmt.Println("解析id错误:", err)
os.Exit(1)
}
} else {
idMatch1 := strings.Split(inputUrl, "id=")
if len(idMatch1) > 1 {
idStr := strings.Split(idMatch1[1], "&")[0]
id, err = strconv.Atoi(idStr)
if err != nil {
fmt.Println("解析id错误:", err)
os.Exit(1)
}
} else {
fmt.Println("未识别到作品,可能是链接有误,5秒后退出")
sleep(5000)
os.Exit(1)
}
}
fmt.Printf("id=>%d\n", id)
praiseCountStr, err := input("点赞次数=>")
if err != nil {
fmt.Println("读取输入错误:", err)
os.Exit(1)
}
praiseCount, err = strconv.Atoi(praiseCountStr)
if err != nil {
fmt.Println("解析点赞次数错误:", err)
os.Exit(1)
}
currentPraise, err := getPraiseCount(id)
if err != nil {
fmt.Println("获取当前点赞数错误:", err)
os.Exit(1)
}
fmt.Printf("点赞前点赞数=>%d\n", currentPraise)
var totalSuccess int
for praiseCount > 0 {
c := min(praiseCount, 1)
success, err := praise(id, c)
if err != nil {
fmt.Println("点赞失败:", err)
break
}
totalSuccess += success
praiseCount -= c
// 其他代码
}
finalPraise, err := getPraiseCount(id)
if err != nil {
fmt.Println("获取最终点赞数错误:", err)
os.Exit(1)
}
fmt.Printf("点赞后点赞数=>%d\n", finalPraise)
sleep(5000)
}