2026-02-27 00:08:02 +08:00

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)
}
}