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