1154 lines
37 KiB
Go
1154 lines
37 KiB
Go
package main
|
||
|
||
//import "C"
|
||
//import (
|
||
// "encoding/json"
|
||
// "fmt"
|
||
// "log"
|
||
// "net/http"
|
||
// "os"
|
||
// "path/filepath"
|
||
// "syscall"
|
||
// "unsafe"
|
||
//)
|
||
//
|
||
//// 配置结构
|
||
//type Configs struct {
|
||
// App struct {
|
||
// MaxRetryTimes int `json:"max_retry_times"`
|
||
// RateLimitDelay int `json:"rate_limit_delay"`
|
||
// Size int `json:"size"`
|
||
// DefaultUserAgent string `json:"default_user_agent"`
|
||
// } `json:"app"`
|
||
//
|
||
// API struct {
|
||
// LoginURL string `json:"login_url"`
|
||
// BookSearchURL string `json:"book_search_url"`
|
||
// ProductSearchURL string `json:"product_search_url"`
|
||
// } `json:"api"`
|
||
//
|
||
// Proxy struct {
|
||
// Servers string `json:"servers"`
|
||
// Username string `json:"username"`
|
||
// Password string `json:"password"`
|
||
// TailMachineCode string `json:"tail_machine_code"`
|
||
// TailCardKey string `json:"tail_card_key"`
|
||
// ProxyFilePath string `json:"proxy_file_path"`
|
||
// } `json:"proxy"`
|
||
//}
|
||
//
|
||
//// API响应结构
|
||
//type APIResponses struct {
|
||
// Success bool `json:"success"`
|
||
// Message string `json:"message,omitempty"`
|
||
// GoodsNum string `json:"goods_num,omitempty"`
|
||
// PNum string `json:"pnum,omitempty"`
|
||
// Data interface{} `json:"data,omitempty"`
|
||
// Error string `json:"error,omitempty"`
|
||
//}
|
||
//
|
||
//type DLLManager struct {
|
||
// dll *syscall.DLL
|
||
//}
|
||
//
|
||
//func NewDLLManager(dllPath string) (*DLLManager, error) {
|
||
// dll, err := syscall.LoadDLL(dllPath)
|
||
// if err != nil {
|
||
// return nil, fmt.Errorf("加载DLL失败: %v", err)
|
||
// }
|
||
//
|
||
// return &DLLManager{dll: dll}, nil
|
||
//}
|
||
//
|
||
//func (m *DLLManager) Close() {
|
||
// if m.dll != nil {
|
||
// m.dll.Release()
|
||
// }
|
||
//}
|
||
//
|
||
//// 单参数函数调用
|
||
//func (m *DLLManager) callFunction(funcName string, arg string) (string, error) {
|
||
// proc, err := m.dll.FindProc(funcName)
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", funcName, err)
|
||
// }
|
||
//
|
||
// argPtr, _ := syscall.BytePtrFromString(arg)
|
||
// r1, _, err := proc.Call(uintptr(unsafe.Pointer(argPtr)))
|
||
// if err != nil && err.Error() != "The operation completed successfully." {
|
||
// return "", fmt.Errorf("调用函数 %s 失败: %v", funcName, err)
|
||
// }
|
||
//
|
||
// result := (*byte)(unsafe.Pointer(r1))
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存
|
||
// freeProc, _ := m.dll.FindProc("FreeString")
|
||
// if freeProc != nil {
|
||
// freeProc.Call(r1)
|
||
// }
|
||
//
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 二参数函数调用
|
||
//func (m *DLLManager) callFunctionTwoArgs(funcName string, args ...string) (string, error) {
|
||
// if len(args) != 2 {
|
||
// return "", fmt.Errorf("函数 %s 需要2个参数,但提供了 %d 个", funcName, len(args))
|
||
// }
|
||
//
|
||
// proc, err := m.dll.FindProc(funcName)
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", funcName, err)
|
||
// }
|
||
//
|
||
// // 准备参数指针
|
||
// argPtrs := make([]uintptr, 2)
|
||
// for i, arg := range args {
|
||
// argPtr, _ := syscall.BytePtrFromString(arg)
|
||
// argPtrs[i] = uintptr(unsafe.Pointer(argPtr))
|
||
// }
|
||
//
|
||
// r1, _, err := proc.Call(
|
||
// argPtrs[0], // proxyType
|
||
// argPtrs[1], // username
|
||
// )
|
||
// if err != nil && err.Error() != "The operation completed successfully." {
|
||
// return "", fmt.Errorf("调用函数 %s 失败: %v", funcName, err)
|
||
// }
|
||
//
|
||
// result := (*byte)(unsafe.Pointer(r1))
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存
|
||
// freeProc, _ := m.dll.FindProc("FreeString")
|
||
// if freeProc != nil {
|
||
// freeProc.Call(r1)
|
||
// }
|
||
//
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 五参数函数调用 - 用于 GetKFZGTImageURL 和 GetKFZSPTImageURL
|
||
//func (m *DLLManager) callFunctionFiveArgs(funcName string, args ...string) (string, error) {
|
||
// if len(args) != 5 {
|
||
// return "", fmt.Errorf("函数 %s 需要5个参数,但提供了 %d 个", funcName, len(args))
|
||
// }
|
||
//
|
||
// proc, err := m.dll.FindProc(funcName)
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", funcName, err)
|
||
// }
|
||
//
|
||
// // 准备参数指针
|
||
// argPtrs := make([]uintptr, 5)
|
||
// for i, arg := range args {
|
||
// argPtr, _ := syscall.BytePtrFromString(arg)
|
||
// argPtrs[i] = uintptr(unsafe.Pointer(argPtr))
|
||
// }
|
||
//
|
||
// r1, _, err := proc.Call(
|
||
// argPtrs[0], // proxyType
|
||
// argPtrs[1], // username
|
||
// argPtrs[2], // password
|
||
// argPtrs[3], // machineCode
|
||
// argPtrs[4], // isbn
|
||
// )
|
||
// if err != nil && err.Error() != "The operation completed successfully." {
|
||
// return "", fmt.Errorf("调用函数 %s 失败: %v", funcName, err)
|
||
// }
|
||
//
|
||
// result := (*byte)(unsafe.Pointer(r1))
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存
|
||
// freeProc, _ := m.dll.FindProc("FreeString")
|
||
// if freeProc != nil {
|
||
// freeProc.Call(r1)
|
||
// }
|
||
//
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 六参数函数调用
|
||
//func (m *DLLManager) callFunctionSixArgs(funcName string, args ...string) (string, error) {
|
||
// if len(args) != 6 {
|
||
// return "", fmt.Errorf("函数 %s 需要6个参数,但提供了 %d 个", funcName, len(args))
|
||
// }
|
||
//
|
||
// proc, err := m.dll.FindProc(funcName)
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", funcName, err)
|
||
// }
|
||
//
|
||
// // 准备参数指针
|
||
// argPtrs := make([]uintptr, 6)
|
||
// for i, arg := range args {
|
||
// argPtr, _ := syscall.BytePtrFromString(arg)
|
||
// argPtrs[i] = uintptr(unsafe.Pointer(argPtr))
|
||
// }
|
||
//
|
||
// r1, _, err := proc.Call(
|
||
// argPtrs[0], // fetchMode
|
||
// argPtrs[1], // proxyType
|
||
// argPtrs[2], // username
|
||
// argPtrs[3], // password
|
||
// argPtrs[4], // machineCode
|
||
// argPtrs[5], // isbn
|
||
// )
|
||
// if err != nil && err.Error() != "The operation completed successfully." {
|
||
// return "", fmt.Errorf("调用函数 %s 失败: %v", funcName, err)
|
||
// }
|
||
//
|
||
// result := (*byte)(unsafe.Pointer(r1))
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存
|
||
// freeProc, _ := m.dll.FindProc("FreeString")
|
||
// if freeProc != nil {
|
||
// freeProc.Call(r1)
|
||
// }
|
||
//
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 十二参数函数调用 - 专门用于 GetKFZShopBookInfo
|
||
//func (m *DLLManager) callFunctionTwelveArgs(funcName string, args ...string) (string, error) {
|
||
// if len(args) != 12 {
|
||
// return "", fmt.Errorf("函数 %s 需要12个参数,但提供了 %d 个", funcName, len(args))
|
||
// }
|
||
//
|
||
// proc, err := m.dll.FindProc(funcName)
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", funcName, err)
|
||
// }
|
||
//
|
||
// // 准备参数指针
|
||
// argPtrs := make([]uintptr, 12)
|
||
// for i, arg := range args {
|
||
// argPtr, _ := syscall.BytePtrFromString(arg)
|
||
// argPtrs[i] = uintptr(unsafe.Pointer(argPtr))
|
||
// }
|
||
//
|
||
// r1, _, err := proc.Call(
|
||
// argPtrs[0], // proxyType
|
||
// argPtrs[1], // username
|
||
// argPtrs[2], // password
|
||
// argPtrs[3], // machineCode
|
||
// argPtrs[4], // shopId
|
||
// argPtrs[5], // isImage
|
||
// argPtrs[6], // bookNum
|
||
// argPtrs[7], // pageNum
|
||
// argPtrs[8], // sortType
|
||
// argPtrs[9], // sort
|
||
// argPtrs[10], // priceDown
|
||
// argPtrs[11], // priceUp
|
||
// )
|
||
// if err != nil && err.Error() != "The operation completed successfully." {
|
||
// return "", fmt.Errorf("调用函数 %s 失败: %v", funcName, err)
|
||
// }
|
||
//
|
||
// result := (*byte)(unsafe.Pointer(r1))
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存
|
||
// freeProc, _ := m.dll.FindProc("FreeString")
|
||
// if freeProc != nil {
|
||
// freeProc.Call(r1)
|
||
// }
|
||
//
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 十三参数函数调用 - 专门用于 GetKFZShopBookInfo
|
||
//func (m *DLLManager) callFunctionThirteenArgs(funcName string, args ...string) (string, error) {
|
||
// if len(args) != 13 {
|
||
// return "", fmt.Errorf("函数 %s 需要13个参数,但提供了 %d 个", funcName, len(args))
|
||
// }
|
||
//
|
||
// proc, err := m.dll.FindProc(funcName)
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", funcName, err)
|
||
// }
|
||
//
|
||
// // 准备参数指针
|
||
// argPtrs := make([]uintptr, 13)
|
||
// for i, arg := range args {
|
||
// argPtr, _ := syscall.BytePtrFromString(arg)
|
||
// argPtrs[i] = uintptr(unsafe.Pointer(argPtr))
|
||
// }
|
||
//
|
||
// r1, _, err := proc.Call(
|
||
// argPtrs[0], // fetchMode
|
||
// argPtrs[1], // proxyType
|
||
// argPtrs[2], // username
|
||
// argPtrs[3], // password
|
||
// argPtrs[4], // machineCode
|
||
// argPtrs[5], // shopId
|
||
// argPtrs[6], // isImage
|
||
// argPtrs[7], // bookNum
|
||
// argPtrs[8], // pageNum
|
||
// argPtrs[9], // sortType
|
||
// argPtrs[10], // sort
|
||
// argPtrs[11], // priceDown
|
||
// argPtrs[12], // priceUp
|
||
// )
|
||
// if err != nil && err.Error() != "The operation completed successfully." {
|
||
// return "", fmt.Errorf("调用函数 %s 失败: %v", funcName, err)
|
||
// }
|
||
//
|
||
// result := (*byte)(unsafe.Pointer(r1))
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存
|
||
// freeProc, _ := m.dll.FindProc("FreeString")
|
||
// if freeProc != nil {
|
||
// freeProc.Call(r1)
|
||
// }
|
||
//
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//func (m *DLLManager) Initialize(configJSON string) (string, error) {
|
||
// return m.callFunction("Initialize", configJSON)
|
||
//}
|
||
//
|
||
//// 修改后的 GetKFZGTImageURL - 需要5个参数
|
||
//func (m *DLLManager) GetKFZGTImageURL(proxyType, username, password, machineCode, isbn string) (string, error) {
|
||
// return m.callFunctionFiveArgs("GetKFZGTImageURL",
|
||
// proxyType, username, password, machineCode, isbn)
|
||
//}
|
||
//
|
||
//// 修改后的 GetKFZSPTImageURL - 需要5个参数
|
||
//func (m *DLLManager) GetKFZSPTImageURL(proxyType, username, password, machineCode, isbn string) (string, error) {
|
||
// return m.callFunctionFiveArgs("GetKFZSPTImageURL",
|
||
// proxyType, username, password, machineCode, isbn)
|
||
//}
|
||
//
|
||
//// 修改后的 GetKFZShopBookInfo - 需要12个参数
|
||
//func (m *DLLManager) GetKFZShopBookInfo(fetchMode, proxyType, username, password, machineCode, shopId, isImage, bookNum, pageNum, sortType, sort, priceDown, priceUp string) (string, error) {
|
||
// return m.callFunctionThirteenArgs("GetKFZShopBookInfo",
|
||
// fetchMode, proxyType, username, password, machineCode, shopId, isImage, bookNum, pageNum, sortType, sort, priceDown, priceUp)
|
||
//}
|
||
//
|
||
//// 获取 GetUrlBookDetails - 需要6个参数
|
||
//func (m *DLLManager) GetUrlBookDetails(fetchMode, proxyType, username, password, machineCode, url string) (string, error) {
|
||
// return m.callFunctionSixArgs("GetUrlBookDetails", fetchMode, proxyType, username, password, machineCode, url)
|
||
//}
|
||
//
|
||
//// 获取 OutLogin
|
||
//func (m *DLLManager) OutLogin(username, password string) (string, error) {
|
||
// // 获取函数
|
||
// proc, err := m.dll.FindProc("OutLogin")
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", "OutLogin", err)
|
||
// }
|
||
// // 转换参数
|
||
// usernamePtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(username)))
|
||
// passwordPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(password)))
|
||
// // 调用函数
|
||
// ret, _, err := proc.Call(usernamePtr, passwordPtr)
|
||
// if ret == 0 {
|
||
// return "", fmt.Errorf("DLL调用失败: %v", err)
|
||
// }
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存(假设DLL提供了FreeMemory函数)
|
||
// findProc, err := m.dll.FindProc("FreeString")
|
||
// if findProc != nil {
|
||
// findProc.Call(ret)
|
||
// }
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 获取 OutGetUserMsg
|
||
//func (m *DLLManager) OutGetUserMsg(token string) (string, error) {
|
||
// // 获取函数
|
||
// proc, err := m.dll.FindProc("OutGetUserMsg")
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", "OutGetUserMsg", err)
|
||
// }
|
||
// // 转换参数
|
||
// tokenPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(token)))
|
||
// // 调用函数
|
||
// ret, _, err := proc.Call(tokenPtr)
|
||
// if ret == 0 {
|
||
// return "", fmt.Errorf("DLL调用失败: %v", err)
|
||
// }
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存(假设DLL提供了FreeMemory函数)
|
||
// findProc, err := m.dll.FindProc("FreeString")
|
||
// if findProc != nil {
|
||
// findProc.Call(ret)
|
||
// }
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 获取 OutGetGoodsTplMsg
|
||
//func (m *DLLManager) OutGetGoodsTplMsg(token, itemId, proxy string) (string, error) {
|
||
// // 获取函数
|
||
// proc, err := m.dll.FindProc("OutGetGoodsTplMsg")
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", "OutGetGoodsTplMsg", err)
|
||
// }
|
||
// // 转换参数
|
||
// tokenPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(token)))
|
||
// itemIdPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(itemId)))
|
||
// proxyPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(proxy)))
|
||
// // 调用函数
|
||
// ret, _, err := proc.Call(tokenPtr, itemIdPtr, proxyPtr)
|
||
// if ret == 0 {
|
||
// return "", fmt.Errorf("DLL调用失败: %v", err)
|
||
// }
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存(假设DLL提供了FreeMemory函数)
|
||
// findProc, err := m.dll.FindProc("FreeString")
|
||
// if findProc != nil {
|
||
// findProc.Call(ret)
|
||
// }
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 获取 OutGetGoodsListMsgFromSelfShop
|
||
//func (m *DLLManager) OutGetGoodsListMsgFromSelfShop(token string, proxy string, itemSn string, priceMin string, priceMax string, startCreateTime int,
|
||
// endCreateTime int, requestType string, isItemSnEqual int, page int, size int) (string, error) {
|
||
// // 获取函数
|
||
// proc, err := m.dll.FindProc("OutGetGoodsListMsgFromSelfShop")
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", "OutGetGoodsListMsgFromSelfShop", err)
|
||
// }
|
||
// // 转换参数
|
||
// tokenPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(token)))
|
||
// proxyPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(proxy)))
|
||
// itemSnPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(itemSn)))
|
||
// priceMinPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(priceMin)))
|
||
// priceMaxPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(priceMax)))
|
||
// startCreateTimePtr := uintptr(startCreateTime)
|
||
// endCreateTimePtr := uintptr(endCreateTime)
|
||
// requestTypePtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(requestType)))
|
||
// isItemSnEqualPtr := uintptr(isItemSnEqual)
|
||
// pagePtr := uintptr(page)
|
||
// sizePtr := uintptr(size)
|
||
// // 调用函数
|
||
// ret, _, err := proc.Call(tokenPtr, proxyPtr, itemSnPtr, priceMinPtr, priceMaxPtr, startCreateTimePtr, endCreateTimePtr, requestTypePtr, isItemSnEqualPtr, pagePtr, sizePtr)
|
||
// if ret == 0 {
|
||
// return "", fmt.Errorf("DLL调用失败: %v", err)
|
||
// }
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存(假设DLL提供了FreeMemory函数)
|
||
// findProc, err := m.dll.FindProc("FreeString")
|
||
// if findProc != nil {
|
||
// findProc.Call(ret)
|
||
// }
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 获取 OutGetImageByIsbn
|
||
//func (m *DLLManager) OutGetImageByIsbn(token string, isbn string, proxy string, isLiveImage bool, isReturnMsg bool) (string, error) {
|
||
// // 获取函数
|
||
// proc, err := m.dll.FindProc("OutGetImageByIsbn")
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", "OutGetImageByIsbn", err)
|
||
// }
|
||
// // 转换参数
|
||
// tokenPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(token)))
|
||
// isbnPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(isbn)))
|
||
// var proxyPtr uintptr
|
||
// if proxy != "" {
|
||
// proxyPtr = uintptr(unsafe.Pointer(syscall.StringBytePtr(proxy)))
|
||
// } else {
|
||
// proxyPtr = 0
|
||
// }
|
||
// var isLiveImageInt int
|
||
// if isLiveImage {
|
||
// isLiveImageInt = 0
|
||
// } else {
|
||
// isLiveImageInt = 1
|
||
// }
|
||
// isLiveImagePtr := uintptr(isLiveImageInt)
|
||
// var isReturnMsgInt int
|
||
// if isReturnMsg {
|
||
// isLiveImageInt = 0
|
||
// } else {
|
||
// isLiveImageInt = 1
|
||
// }
|
||
// isReturnMsgPtr := uintptr(isReturnMsgInt)
|
||
// // 调用函数
|
||
// ret, _, err := proc.Call(tokenPtr, isbnPtr, proxyPtr, isLiveImagePtr, isReturnMsgPtr)
|
||
// if ret == 0 {
|
||
// return "", fmt.Errorf("DLL调用失败: %v", err)
|
||
// }
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存(假设DLL提供了FreeMemory函数)
|
||
// findProc, err := m.dll.FindProc("FreeString")
|
||
// if findProc != nil {
|
||
// findProc.Call(ret)
|
||
// }
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 获取 OutGetGoodsMsgByDetailUrl
|
||
//func (m *DLLManager) OutGetGoodsMsgByDetailUrl(url, proxy string) (string, error) {
|
||
// // 获取函数
|
||
// proc, err := m.dll.FindProc("OutGetGoodsMsgByDetailUrl")
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", "OutGetGoodsMsgByDetailUrl", err)
|
||
// }
|
||
// // 转换参数
|
||
// urlPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(url)))
|
||
// var proxyPtr uintptr
|
||
// if proxy != "" {
|
||
// proxyPtr = uintptr(unsafe.Pointer(syscall.StringBytePtr(proxy)))
|
||
// } else {
|
||
// proxyPtr = 0
|
||
// }
|
||
// // 调用函数
|
||
// ret, _, err := proc.Call(urlPtr, proxyPtr)
|
||
// if ret == 0 {
|
||
// return "", fmt.Errorf("DLL调用失败: %v", err)
|
||
// }
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存(假设DLL提供了FreeMemory函数)
|
||
// findProc, err := m.dll.FindProc("FreeString")
|
||
// if findProc != nil {
|
||
// findProc.Call(ret)
|
||
// }
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 获取 OutGetGoodsListMsgByShopId
|
||
//func (m *DLLManager) OutGetGoodsListMsgByShopId(shopId int, proxy string, isImage bool, sortType string, sort string, priceMin float32, priceMax float32, pageNum, returnNum int) (string, error) {
|
||
// // 获取函数
|
||
// proc, err := m.dll.FindProc("OutGetGoodsListMsgByShopId")
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", "OutGetGoodsListMsgByShopId", err)
|
||
// }
|
||
// // 转换参数
|
||
// shopIdPtr := uintptr(shopId)
|
||
// var isImageInt int
|
||
// if isImage {
|
||
// isImageInt = 0
|
||
// } else {
|
||
// isImageInt = 1
|
||
// }
|
||
// isImagePtr := uintptr(isImageInt)
|
||
// sortTypePtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(sortType)))
|
||
// sortPtr := uintptr(unsafe.Pointer(syscall.StringBytePtr(sort)))
|
||
// priceMinPtr := uintptr(*(*uint32)(unsafe.Pointer(&priceMin)))
|
||
// priceMaxPtr := uintptr(*(*uint32)(unsafe.Pointer(&priceMax)))
|
||
// pageNumPtr := uintptr(pageNum)
|
||
// returnNumPtr := uintptr(returnNum)
|
||
// var proxyPtr uintptr
|
||
// if proxy != "" {
|
||
// proxyPtr = uintptr(unsafe.Pointer(syscall.StringBytePtr(proxy)))
|
||
// } else {
|
||
// proxyPtr = 0
|
||
// }
|
||
// // 调用函数
|
||
// ret, _, err := proc.Call(shopIdPtr, proxyPtr, isImagePtr, sortTypePtr, sortPtr, priceMinPtr, priceMaxPtr, pageNumPtr, returnNumPtr)
|
||
// if ret == 0 {
|
||
// return "", fmt.Errorf("DLL调用失败: %v", err)
|
||
// }
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存(假设DLL提供了FreeMemory函数)
|
||
// findProc, err := m.dll.FindProc("FreeString")
|
||
// if findProc != nil {
|
||
// findProc.Call(ret)
|
||
// }
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 获取 OutGetTopGoodsListMsg
|
||
//func (m *DLLManager) OutGetTopGoodsListMsg(catId int, proxy string) (string, error) {
|
||
// // 获取函数
|
||
// proc, err := m.dll.FindProc("OutGetTopGoodsListMsg")
|
||
// if err != nil {
|
||
// return "", fmt.Errorf("找不到函数 %s: %v", "OutGetTopGoodsListMsg", err)
|
||
// }
|
||
// // 转换参数
|
||
// catIdPtr := uintptr(catId)
|
||
// var proxyPtr uintptr
|
||
// if proxy != "" {
|
||
// proxyPtr = uintptr(unsafe.Pointer(syscall.StringBytePtr(proxy)))
|
||
// } else {
|
||
// proxyPtr = 0
|
||
// }
|
||
// // 调用函数
|
||
// ret, _, err := proc.Call(catIdPtr, proxyPtr)
|
||
// if ret == 0 {
|
||
// return "", fmt.Errorf("DLL调用失败: %v", err)
|
||
// }
|
||
//
|
||
// // 将C字符串转换为Go字符串
|
||
// var resultBytes []byte
|
||
// for i := 0; ; i++ {
|
||
// if *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))) == 0 {
|
||
// break
|
||
// }
|
||
// resultBytes = append(resultBytes, *(*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(ret)) + uintptr(i))))
|
||
// }
|
||
//
|
||
// // 释放内存(假设DLL提供了FreeMemory函数)
|
||
// findProc, err := m.dll.FindProc("FreeString")
|
||
// if findProc != nil {
|
||
// findProc.Call(ret)
|
||
// }
|
||
// return string(resultBytes), nil
|
||
//}
|
||
//
|
||
//// 创建默认配置
|
||
//func createDefaultConfig() Config {
|
||
// var configs Config
|
||
//
|
||
// // App配置
|
||
// configs.App.MaxRetryTimes = 3
|
||
// configs.App.RateLimitDelay = 1000
|
||
// configs.App.Size = 10
|
||
// configs.App.DefaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
|
||
//
|
||
// // API配置
|
||
// configs.API.LoginURL = "https://login.kongfz.com/Pc/Login/account"
|
||
// configs.API.BookSearchURL = "https://search.kongfz.com/pc-gw/search-web/client/pc/bookLib/keyword/list"
|
||
// configs.API.ProductSearchURL = "https://search.kongfz.com/pc-gw/search-web/client/pc/product/keyword/list"
|
||
//
|
||
// // 代理配置(需要根据实际情况修改)
|
||
// configs.Proxy.Servers = "http-dynamic.xiaoxiangdaili.com,http-dynamic-S02.xiaoxiangdaili.com,http-dynamic-S03.xiaoxiangdaili.com,http-dynamic-S04.xiaoxiangdaili.com"
|
||
// configs.Proxy.Username = "1297757178467602432"
|
||
// configs.Proxy.Password = "QgQBvP7f"
|
||
// configs.Proxy.TailMachineCode = "b7bf22a237ec692f13fcc2c43ee63252"
|
||
// configs.Proxy.TailCardKey = "DL_20_YK_1920acb2129844c2aabade3896560a9b"
|
||
// configs.Proxy.ProxyFilePath = "dll/proxyConfig.dll"
|
||
//
|
||
// configs.Database.Username = "newAdmin"
|
||
// configs.Database.Password = "bYPp8SbBe5F7nz2i"
|
||
// configs.Database.Host = "146.56.227.42:3306"
|
||
// configs.Database.Name = "newadmin"
|
||
//
|
||
// return configs
|
||
//}
|
||
//
|
||
//// 获取当前可执行文件所在目录
|
||
//func getExecutableDir() string {
|
||
// exePath, err := os.Executable()
|
||
// if err != nil {
|
||
// return "."
|
||
// }
|
||
// return filepath.Dir(exePath)
|
||
//}
|
||
//
|
||
//// 格式化输出JSON响应
|
||
//func printFormattedResponse(operation string, result string, err error) int {
|
||
// var apiResp APIResponses
|
||
// fmt.Printf("\n%s:\n", operation)
|
||
// fmt.Println("=" + string(make([]byte, 50)) + "=")
|
||
//
|
||
// if err != nil {
|
||
// fmt.Printf("❌ 错误: %v\n", err)
|
||
// }
|
||
// var count int
|
||
// if err := json.Unmarshal([]byte(result), &apiResp); err == nil {
|
||
// if apiResp.Success {
|
||
// fmt.Printf("✅ 成功: %s\n", apiResp.Message)
|
||
// if apiResp.Data != nil {
|
||
// fmt.Println("📊 数据:")
|
||
// jsonData, _ := json.MarshalIndent(apiResp.Data, "", " ")
|
||
// fmt.Println(string(jsonData))
|
||
// // 方法1: 判断 Data 的类型并统计条数
|
||
// switch data := apiResp.Data.(type) {
|
||
// case []interface{}:
|
||
// // 如果是切片/数组
|
||
// count = len(data)
|
||
// fmt.Printf("📈 数据条数: %d\n", count)
|
||
// case []BookInfo:
|
||
// // 如果是 BookInfo 切片
|
||
// count = len(data)
|
||
// fmt.Printf("📚 图书数量: %d\n", count)
|
||
// case map[string]interface{}:
|
||
// // 如果是映射
|
||
// count = len(data)
|
||
// fmt.Printf("🗂️ 数据字段数: %d\n", count)
|
||
// case []ProductInfo:
|
||
// // 如果是 ProductInfo 切片
|
||
// count = len(data)
|
||
// fmt.Printf("🛒 商品数量: %d\n", count)
|
||
// default:
|
||
// fmt.Printf("ℹ️ 数据类型: %T\n", apiResp.Data)
|
||
// }
|
||
// }
|
||
// if apiResp.GoodsNum != "" {
|
||
// fmt.Printf("📦 商品数量: %s\n", apiResp.GoodsNum)
|
||
// }
|
||
// if apiResp.PNum != "" {
|
||
// fmt.Printf("📄 页码: %s\n", apiResp.PNum)
|
||
// }
|
||
// } else {
|
||
// fmt.Printf("❌ 失败: %s\n", apiResp.Error)
|
||
// }
|
||
// } else {
|
||
// fmt.Printf("原始响应: %s\n", result)
|
||
// // 如果是代理地址,可以进一步处理
|
||
// if len(result) > 0 && (result[0:4] == "http" || result[0:3] == "socks") {
|
||
// fmt.Printf("✅ 代理服务器地址获取成功\n")
|
||
// fmt.Printf("🔗 代理地址: %s\n", result)
|
||
// }
|
||
// }
|
||
// return count
|
||
//}
|
||
//
|
||
//// 专门处理代理配置响应的函数
|
||
//func handleProxyResponse(result string, err error) {
|
||
// fmt.Printf("\n代理配置测试:\n")
|
||
// fmt.Println("=" + string(make([]byte, 50)) + "=")
|
||
//
|
||
// if err != nil {
|
||
// fmt.Printf("❌ 错误: %v\n", err)
|
||
// return
|
||
// }
|
||
//
|
||
// // 代理配置通常返回代理服务器地址,不是JSON格式
|
||
// fmt.Printf("📡 代理服务器地址: %s\n", result)
|
||
// fmt.Printf("✅ 代理配置获取成功\n")
|
||
//
|
||
// // 如果需要,可以在这里进一步处理代理地址
|
||
// // 例如:验证代理格式、提取IP和端口等
|
||
// if result != "" {
|
||
// fmt.Printf("🔗 可用代理: %s\n", result)
|
||
// }
|
||
//}
|
||
//
|
||
//// // ProxyTypeManager 调用代理类型管理器
|
||
////
|
||
//// func (m *DLLManager) ProxyTypeManager(proxyType, username, password, machineCode string) (string, error) {
|
||
//// proc, err := m.dll.FindProc("ProxyTypeManager")
|
||
//// if err != nil {
|
||
//// return "", fmt.Errorf("找不到函数 ProxyTypeManager: %v", err)
|
||
//// }
|
||
////
|
||
//// // 准备参数
|
||
//// proxyTypePtr, _ := syscall.BytePtrFromString(proxyType)
|
||
//// usernamePtr, _ := syscall.BytePtrFromString(username)
|
||
//// passwordPtr, _ := syscall.BytePtrFromString(password)
|
||
//// machineCodePtr, _ := syscall.BytePtrFromString(machineCode)
|
||
////
|
||
//// // 调用函数
|
||
//// r1, _, err := proc.Call(
|
||
//// uintptr(unsafe.Pointer(proxyTypePtr)),
|
||
//// uintptr(unsafe.Pointer(usernamePtr)),
|
||
//// uintptr(unsafe.Pointer(passwordPtr)),
|
||
//// uintptr(unsafe.Pointer(machineCodePtr)),
|
||
//// )
|
||
////
|
||
//// if err != nil && err.Error() != "The operation completed successfully." {
|
||
//// return "", fmt.Errorf("调用 ProxyTypeManager 失败: %v", err)
|
||
//// }
|
||
////
|
||
//// // 转换结果
|
||
//// result := (*byte)(unsafe.Pointer(r1))
|
||
//// var resultBytes []byte
|
||
//// for i := 0; ; i++ {
|
||
//// bytePtr := (*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i)))
|
||
//// if *bytePtr == 0 {
|
||
//// break
|
||
//// }
|
||
//// resultBytes = append(resultBytes, *bytePtr)
|
||
//// }
|
||
////
|
||
//// // 释放内存
|
||
//// freeProc, _ := m.dll.FindProc("FreeString")
|
||
//// if freeProc != nil {
|
||
//// freeProc.Call(r1)
|
||
//// }
|
||
////
|
||
//// return string(resultBytes), nil
|
||
//// }
|
||
////
|
||
//// FreeCString 释放C字符串内存
|
||
//func (m *DLLManager) FreeCString(strPtr uintptr) error {
|
||
// proc, err := m.dll.FindProc("FreeCString")
|
||
// if err != nil {
|
||
// return fmt.Errorf("找不到函数 FreeCString: %v", err)
|
||
// }
|
||
//
|
||
// _, _, err = proc.Call(strPtr)
|
||
// if err != nil && err.Error() != "The operation completed successfully." {
|
||
// return fmt.Errorf("调用 FreeCString 失败: %v", err)
|
||
// }
|
||
//
|
||
// return nil
|
||
//}
|
||
//
|
||
//func main() {
|
||
// http.HandleFunc("/api/kfzShopBookInfo", handleGetKFZShopBookInfo)
|
||
// port := "8080"
|
||
// server := &http.Server{
|
||
// Addr: ":" + port,
|
||
// Handler: nil,
|
||
// }
|
||
// // 启动服务器
|
||
// if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||
// fmt.Printf("服务器启动失败: %v\n", err)
|
||
// }
|
||
//}
|
||
//
|
||
//func handleGetKFZShopBookInfo(w http.ResponseWriter, r *http.Request) {
|
||
// // 加载DLL
|
||
// manager, err := NewDLLManager("dll/kongfz.dll")
|
||
// if err != nil {
|
||
// fmt.Printf("初始化DLL管理器失败: %v", err)
|
||
// }
|
||
// //defer manager.Close()
|
||
//
|
||
// log.Println("✅ DLL加载成功")
|
||
//
|
||
// // 使用默认配置初始化
|
||
// config := createDefaultConfig()
|
||
// initializeConfig(config)
|
||
// configJSON, err := json.Marshal(config)
|
||
// if err != nil {
|
||
// fmt.Printf("序列化配置失败: %v", err)
|
||
// }
|
||
//
|
||
// result, err := manager.Initialize(string(configJSON))
|
||
// if err != nil {
|
||
// fmt.Printf("初始化失败: %v", err)
|
||
// }
|
||
//
|
||
// var initResp APIResponses
|
||
// if err := json.Unmarshal([]byte(result), &initResp); err != nil {
|
||
// fmt.Printf("解析初始化响应失败: %v", err)
|
||
// }
|
||
//
|
||
// if !initResp.Success {
|
||
// fmt.Printf("初始化失败: %s", initResp.Message)
|
||
// }
|
||
//
|
||
// log.Println("✅ DLL初始化成功")
|
||
// // 设置响应头
|
||
// w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||
//
|
||
// // 只支持GET请求
|
||
// if r.Method != http.MethodGet {
|
||
// sendErrorResponse(w, http.StatusMethodNotAllowed, "只支持GET方法")
|
||
// return
|
||
// }
|
||
//
|
||
// // 获取代理信息
|
||
// typeManager, err := proxyTypeManager("CALF_ELEPHANT_PROXY", "1297757178467602432", "QgQBvP7f", "")
|
||
// if err != nil {
|
||
// fmt.Printf(err.Error())
|
||
// }
|
||
// fmt.Println(typeManager)
|
||
//
|
||
// user, err := manager.OutLogin("18904056801", "Long6166@@")
|
||
// if err != nil {
|
||
// fmt.Printf(err.Error())
|
||
// }
|
||
// fmt.Println(user)
|
||
//
|
||
// var data APIResponse
|
||
// if err := json.Unmarshal([]byte(user), &data); err != nil {
|
||
// log.Printf("[ERROR] 解析第 %d 页失败: %v", data, err)
|
||
// }
|
||
// var token string
|
||
// // 从 Data 中提取 token
|
||
// if dataMap, ok := data.Data.(map[string]interface{}); ok {
|
||
// if tk, exists := dataMap["token"]; exists {
|
||
// fmt.Println("Token:", tk)
|
||
// token = tk.(string)
|
||
// // Token: d322c80960ab6722922912dd2ce219d4b4099d54
|
||
// } else {
|
||
// fmt.Println("Token 不存在")
|
||
// }
|
||
// } else {
|
||
// fmt.Println("Data 格式不正确")
|
||
// }
|
||
// fmt.Println(token)
|
||
//
|
||
// //msg, err := manager.OutGetUserMsg(token)
|
||
// //if err != nil {
|
||
// // fmt.Printf(err.Error())
|
||
// //}
|
||
// //fmt.Println(msg)
|
||
// //
|
||
// //tplMsg, err := manager.OutGetGoodsTplMsg(token, "9142583516", "")
|
||
// //if err != nil {
|
||
// // fmt.Printf(err.Error())
|
||
// //}
|
||
// //fmt.Println("tplMsg: ", tplMsg)
|
||
// //
|
||
// //shop, err := manager.OutGetGoodsListMsgFromSelfShop(token, "", "", "", "", 0, 0, "allUnSold", 0, 1, 10)
|
||
// //if err != nil {
|
||
// // fmt.Printf(err.Error())
|
||
// //}
|
||
// //fmt.Println(shop)
|
||
//
|
||
// //// 获取cookie
|
||
// //cookie, err := loginCookie()
|
||
// //if err != nil {
|
||
// // fmt.Printf(err.Error())
|
||
// //}
|
||
// //fmt.Println(cookie)
|
||
//
|
||
// //account, err := getRandomAccount()
|
||
// //if err != nil {
|
||
// // fmt.Printf(err.Error())
|
||
// //}
|
||
// //fmt.Println(account)
|
||
//
|
||
// //var isbns = []string{
|
||
// // "9787500601593", "9787506331746", "9787020106752", "9787807089353", "9787536692930", "9787530221532", "9787544270878", "9787208061644", "9787506365437", "9787513708371", "9787513922135", "9787536693968", "9787541151736", "9787544213561", "9787544754781", "9787549204304", "9787108006639", "9787531764700", "9787544253994", "9787540456023", "9787540456429", "9787544267618", "9787544277723", "9787550008496", "9787806070680", "9787806801529", "9787807530244", "9787020008728", "9787020139590", "9787204055401", "9787500680239", "9787505724778", "9787506365680", "9787530221525", "9787536097261",
|
||
// //}
|
||
// //
|
||
// //for _, isbn := range isbns {
|
||
// // // 获取孔网图片
|
||
// // isbnss, err := outGetImageByIsbn("", isbn, "", 0, 0)
|
||
// // if err != nil {
|
||
// // fmt.Printf(err.Error())
|
||
// // }
|
||
// // fmt.Println(isbnss)
|
||
// //}
|
||
//
|
||
// //books, num, pNum, err := outGetGoodsListMsgByShopId(3092,
|
||
// // typeManager, true, "",
|
||
// // "", 0, 14, 1, 5)
|
||
//
|
||
// //msg, err := manager.OutGetTopGoodsListMsg(0, "")
|
||
// //if err != nil {
|
||
// //
|
||
// //}
|
||
// //fmt.Println(msg)
|
||
// //fetchMode := r.URL.Query().Get("fetchMode")
|
||
// //proxyType := r.URL.Query().Get("proxyType")
|
||
// //username := r.URL.Query().Get("username")
|
||
// //password := r.URL.Query().Get("password")
|
||
// //machineCode := r.URL.Query().Get("machineCode")
|
||
// //url := r.URL.Query().Get("url")
|
||
// //shopId := r.URL.Query().Get("shopId") //https://shop.kongfz.com/793900/all/0_100_0_0_1_sort_desc_0_0/
|
||
// //isImage := r.URL.Query().Get("isImage")
|
||
// //bookNum := r.URL.Query().Get("bookNum")
|
||
// //pageNum := r.URL.Query().Get("pageNum")
|
||
// //sortType := r.URL.Query().Get("sortType")
|
||
// //sort := r.URL.Query().Get("sort")
|
||
// //priceDown := r.URL.Query().Get("priceDown")
|
||
// //priceUp := r.URL.Query().Get("priceUp")
|
||
//
|
||
// //details, err := manager.OutGetGoodsMsgByDetailUrl("https://book.kongfz.com/151391/6531924071/", "")
|
||
// //if err != nil {
|
||
// //
|
||
// //}
|
||
// //fmt.Println(details)
|
||
//
|
||
// //id, err := manager.OutGetGoodsListMsgByShopId(1181761,
|
||
// // "", true, "",
|
||
// // "", 0, 0, 1, 5)
|
||
// //if err != nil {
|
||
// // fmt.Println(err)
|
||
// //}
|
||
// //fmt.Println(id)
|
||
// //var pa ShopBookResult
|
||
// //if err := json.Unmarshal([]byte(id), &pa); err != nil {
|
||
// // log.Printf("[ERROR] 解析第 %d 页失败: %v", pa, err)
|
||
// //}
|
||
// //for _, urls := range pa.Data.Data {
|
||
// // ss, err := proxyTypeManager("CALF_ELEPHANT_PROXY", "1297757178467602432", "QgQBvP7f", "")
|
||
// // if err != nil {
|
||
// // fmt.Printf(err.Error())
|
||
// // }
|
||
// // fmt.Println(ss)
|
||
// // url, err := manager.OutGetGoodsMsgByDetailUrl(urls.DetailURL, ss)
|
||
// // if err != nil {
|
||
// // fmt.Println(err)
|
||
// // }
|
||
// // fmt.Println(url)
|
||
// //}
|
||
//
|
||
// books, num, pNum, err := outGetGoodsListMsgByShopId(788247,
|
||
// typeManager, 1, 0, "",
|
||
// "", 0, 0, 1, 5)
|
||
//
|
||
// fmt.Println(books)
|
||
// fmt.Println(num)
|
||
// fmt.Println(pNum)
|
||
// fmt.Println(err)
|
||
// //for _, book := range books {
|
||
// // ss, err := proxyTypeManager("TAIL_PROXY", "", "", "07f4d0fbcff99966c2b37b0c1fb7f01c")
|
||
// // if err != nil {
|
||
// // fmt.Printf(err.Error())
|
||
// // }
|
||
// // fmt.Println(ss)
|
||
// // url, err := outGetGoodsMsgByDetailUrl(book.DetailUrl, ss)
|
||
// // if err != nil {
|
||
// // fmt.Println(err)
|
||
// // }
|
||
// // fmt.Println(url)
|
||
// //}
|
||
//
|
||
//}
|
||
//
|
||
//func manegiyoutGetGoodsListMsgFromSelfShop() {
|
||
//
|
||
//}
|
||
//
|
||
//// 发送错误响应
|
||
//func sendErrorResponse(w http.ResponseWriter, statusCode int, message string) {
|
||
// response := APIResp{
|
||
// Success: false,
|
||
// Message: message,
|
||
// }
|
||
// w.WriteHeader(statusCode)
|
||
// json.NewEncoder(w).Encode(response)
|
||
//}
|
||
//
|
||
//type ShopBookResult struct {
|
||
// Success bool `json:"success"`
|
||
// Message string `json:"message"`
|
||
// Data struct {
|
||
// GoodsNum string `json:"goods_num"`
|
||
// Pnum string `json:"pnum"`
|
||
// Data []struct {
|
||
// BookName string `json:"book_name"`
|
||
// Author string `json:"author"`
|
||
// Publisher string `json:"publisher"`
|
||
// ISBN string `json:"isbn"`
|
||
// PublishTime int64 `json:"publication_time"`
|
||
// Edition string `json:"edition"`
|
||
// PrintTime string `json:"print_time"`
|
||
// FixPrice string `json:"fix_price"`
|
||
// BindingLayout string `json:"binding_layout"`
|
||
// Format string `json:"format"`
|
||
// Paper string `json:"paper"`
|
||
// Pages string `json:"pages"`
|
||
// Wordage string `json:"wordage"`
|
||
// Languages string `json:"languages"`
|
||
// Era string `json:"era"`
|
||
// EngravingMethod string `json:"engraving_method"`
|
||
// Dimensions string `json:"dimensions"`
|
||
// VolumeNumber string `json:"volume_number"`
|
||
// BookPic string `json:"book_pic"`
|
||
// BookPicS string `json:"book_pic_s"`
|
||
// SellingPrice string `json:"selling_price"`
|
||
// Condition string `json:"condition"`
|
||
// ExpressDeliveryFee string `json:"express_delivery_fee"`
|
||
// Editor string `json:"editor"`
|
||
// Category string `json:"category"`
|
||
// BuyCount string `json:"buy_count"`
|
||
// SellCount string `json:"sell_count"`
|
||
// Content string `json:"content"`
|
||
// Mid int `json:"mid"`
|
||
// ItemID int64 `json:"item_id"`
|
||
// ShopID int `json:"shop_id"`
|
||
// DetailURL string `json:"detail_url"`
|
||
// } `json:"data"`
|
||
// } `json:"data"`
|
||
//}
|