93 lines
2.8 KiB
Go
93 lines
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"net/url"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type douyinOrder struct {
|
|
ShopOrderID string `json:"shop_order_id"`
|
|
UserID string `json:"user_id"`
|
|
UserNickname string `json:"user_nickname"`
|
|
OrderStatus int `json:"order_status"`
|
|
}
|
|
|
|
type apiResponse struct {
|
|
Code int `json:"code"`
|
|
St int `json:"st"`
|
|
Msg string `json:"msg"`
|
|
Data []douyinOrder `json:"data"`
|
|
}
|
|
|
|
func main() {
|
|
var (
|
|
page = flag.Int("page", 0, "page index")
|
|
pageSize = flag.Int("pageSize", 20, "page size")
|
|
duration = flag.Int("minutes", 60, "how many minutes back to fetch (update_time_start)")
|
|
)
|
|
flag.Parse()
|
|
|
|
cookie := os.Getenv("DOUYIN_COOKIE")
|
|
if cookie == "" {
|
|
log.Fatal("请先设置环境变量 DOUYIN_COOKIE")
|
|
}
|
|
|
|
params := url.Values{}
|
|
params.Set("page", fmt.Sprintf("%d", *page))
|
|
params.Set("pageSize", fmt.Sprintf("%d", *pageSize))
|
|
params.Set("order_by", "update_time")
|
|
params.Set("order", "desc")
|
|
params.Set("appid", "1")
|
|
params.Set("_bid", "ffa_order")
|
|
params.Set("aid", "4272")
|
|
params.Set("tab", "all")
|
|
if *duration > 0 {
|
|
ts := time.Now().Add(-time.Duration(*duration) * time.Minute).Unix()
|
|
params.Set("update_time_start", fmt.Sprintf("%d", ts))
|
|
}
|
|
|
|
apiURL := "https://fxg.jinritemai.com/api/order/searchlist" + "?" + params.Encode()
|
|
req, err := http.NewRequest(http.MethodGet, apiURL, nil)
|
|
if err != nil {
|
|
log.Fatalf("create request failed: %v", err)
|
|
}
|
|
|
|
req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
|
|
req.Header.Set("Accept", "application/json, text/plain, */*")
|
|
req.Header.Set("Cookie", cookie)
|
|
req.Header.Set("Referer", "https://fxg.jinritemai.com/ffa/morder/order/list")
|
|
req.Close = true
|
|
|
|
client := &http.Client{Timeout: 30 * time.Second}
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
log.Fatalf("request failed: %v", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
log.Fatalf("unexpected status: %s", resp.Status)
|
|
}
|
|
|
|
var data apiResponse
|
|
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
|
|
log.Fatalf("decode response failed: %v", err)
|
|
}
|
|
|
|
if data.St != 0 && data.Code != 0 {
|
|
log.Fatalf("api error: %s (st=%d code=%d)", data.Msg, data.St, data.Code)
|
|
}
|
|
|
|
fmt.Printf("共获取 %d 条订单 (page=%d, pageSize=%d)\n", len(data.Data), *page, *pageSize)
|
|
fmt.Println("shop_order_id\torder_status\tuser_id\tuser_nickname")
|
|
for _, order := range data.Data {
|
|
fmt.Printf("%s\t%d\t%s\t%s\n", order.ShopOrderID, order.OrderStatus, order.UserID, order.UserNickname)
|
|
}
|
|
}
|