Skip to Content

Golang 代码示例

本页面提供 Golang 调用哼哼猫 API 的完整示例。

🚀 快速开始

package main import ( "bytes" "encoding/json" "fmt" "io" "net/http" ) func main() { apiURL := "https://api.meowload.net/openapi/extract/post" apiKey := "your-api-key-here" // 构造请求 payload := map[string]string{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", } jsonData, _ := json.Marshal(payload) req, _ := http.NewRequest("POST", apiURL, bytes.NewBuffer(jsonData)) req.Header.Set("Content-Type", "application/json") req.Header.Set("x-api-key", apiKey) req.Header.Set("accept-language", "zh") // 发送请求 client := &http.Client{} resp, _ := client.Do(req) defer resp.Body.Close() // 处理响应 body, _ := io.ReadAll(resp.Body) if resp.StatusCode == 200 { fmt.Println("✅ 请求成功!") fmt.Println(string(body)) } else { fmt.Printf("❌ 请求失败 (%d)\n", resp.StatusCode) fmt.Println(string(body)) } }

📦 完整封装示例

package main import ( "bytes" "encoding/json" "fmt" "io" "net/http" ) type MeowloadClient struct { APIKey string BaseURL string Client *http.Client } type ExtractRequest struct { URL string `json:"url"` } type Media struct { MediaType string `json:"media_type"` ResourceURL string `json:"resource_url"` PreviewURL string `json:"preview_url,omitempty"` Headers map[string]string `json:"headers,omitempty"` } type ExtractResponse struct { Text string `json:"text,omitempty"` Medias []Media `json:"medias"` ID string `json:"id,omitempty"` CreatedAt string `json:"created_at,omitempty"` } type ErrorResponse struct { Message string `json:"message"` } // NewClient 创建新的 API 客户端 func NewClient(apiKey string) *MeowloadClient { return &MeowloadClient{ APIKey: apiKey, BaseURL: "https://api.meowload.net/openapi", Client: &http.Client{}, } } // ExtractPost 提取单个帖子 func (c *MeowloadClient) ExtractPost(url string) (*ExtractResponse, error) { endpoint := c.BaseURL + "/extract/post" // 构造请求 reqBody := ExtractRequest{URL: url} jsonData, err := json.Marshal(reqBody) if err != nil { return nil, fmt.Errorf("JSON 序列化失败: %w", err) } // 创建 HTTP 请求 req, err := http.NewRequest("POST", endpoint, bytes.NewBuffer(jsonData)) if err != nil { return nil, fmt.Errorf("创建请求失败: %w", err) } // 设置请求头 req.Header.Set("Content-Type", "application/json") req.Header.Set("x-api-key", c.APIKey) req.Header.Set("accept-language", "zh") // 发送请求 resp, err := c.Client.Do(req) if err != nil { return nil, fmt.Errorf("发送请求失败: %w", err) } defer resp.Body.Close() // 读取响应 body, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("读取响应失败: %w", err) } // 处理错误响应 if resp.StatusCode != 200 { var errResp ErrorResponse json.Unmarshal(body, &errResp) return nil, fmt.Errorf("请求失败 (%d): %s", resp.StatusCode, errResp.Message) } // 解析成功响应 var result ExtractResponse if err := json.Unmarshal(body, &result); err != nil { return nil, fmt.Errorf("解析响应失败: %w", err) } return &result, nil } func main() { // 创建客户端 client := NewClient("your-api-key-here") // 提取帖子 result, err := client.ExtractPost("https://www.bilibili.com/video/BV1sG4y1p7TA/") if err != nil { fmt.Printf("❌ 错误: %v\n", err) return } fmt.Println("✅ 提取成功!") fmt.Printf("文案: %s\n", result.Text) fmt.Printf("媒体数量: %d\n", len(result.Medias)) for idx, media := range result.Medias { fmt.Printf("\n媒体 %d:\n", idx+1) fmt.Printf(" 类型: %s\n", media.MediaType) fmt.Printf(" 地址: %s\n", media.ResourceURL) } }