
本文详解如何在 go 中借助 chimeracoder/anaconda 客户端,正确完成媒体上传与带图推文发布的全流程,重点解决 media_ids 类型转换错误导致的 44 号 api 错误。
本文详解如何在 go 中借助 chimeracoder/anaconda 客户端,正确完成媒体上传与带图推文发布的全流程,重点解决 media_ids 类型转换错误导致的 44 号 api 错误。
在 Twitter(现 X) API v1.1 中,发布含媒体的推文需分两步:先调用 UploadMedia 获取媒体 ID,再将该 ID 以字符串形式通过 url.Values 传入 PostTweet。许多开发者卡在第二步——看似简单的参数传递,实则因 MediaID 是 int64 类型,而 Twitter API 严格要求 media_ids 必须为逗号分隔的字符串(如 “1234567890123456789”),直接使用 fmt.Sprintf(“%d”, id) 或强制类型转换均不可靠,必须使用 strconv.FormatInt 进行安全转换。
以下为可直接运行的完整示例(需已配置有效 OAuth 凭据):
package main import ( "fmt" "io/ioutil" "net/url" "strconv" "github.com/ChimeraCoder/anaconda" ) func main() { // 初始化 API 客户端(请替换为你的真实凭证) anaconda.SetConsumerKey("YOUR_CONSUMER_KEY") anaconda.SetConsumerSecret("YOUR_CONSUMER_SECRET") api := anaconda.NewTwitterApi("YOUR_ACCESS_TOKEN", "YOUR_ACCESS_TOKEN_SECRET") // 1. 读取本地媒体文件(支持 JPG/PNG/GIF,≤5MB) data, err := ioutil.ReadFile("example.jpg") if err != nil { fmt.Printf("读取文件失败: %vn", err) return } // 2. 上传媒体(注意:UploadMedia 接收 base64 编码后的字符串) mediaResponse, err := api.UploadMedia( "data:image/jpeg;base64,"+base64.StdEncoding.EncodeToString(data), ) if err != nil { fmt.Printf("媒体上传失败: %vn", err) return } fmt.Printf("媒体上传成功,MediaID: %dn", mediaResponse.MediaID) // 3. 构建 POST 参数:关键!media_ids 必须是 string 类型 params := url.Values{} params.Set("status", "Hello from Go + Anaconda! ??") // 推文正文 params.Set("media_ids", strconv.FormatInt(mediaResponse.MediaID, 10)) // ✅ 正确转换 // 4. 发布推文 tweet, err := api.PostTweet("", params) // 第一个参数留空,内容由 params 提供 if err != nil { fmt.Printf("推文发布失败: %vn", err) return } fmt.Printf("推文已发布,ID: %sn", tweet.IdStr) }
⚠️ 关键注意事项:
- 媒体格式与大小:Twitter 仅接受 JPG、PNG、GIF(非动画)、MP4(仅限 Premium/Enterprise);图片 ≤ 5MB,GIF ≤ 15MB。
- Base64 前缀:UploadMedia 要求传入带 MIME 类型前缀的 base64 字符串(如 “data:image/png;base64,…”),缺失前缀将返回 400 Bad Request。
- media_ids 格式:即使只上传单张图,也必须传字符串(非数字、非 json 数组)。多图时用英文逗号拼接:”123,456,789″。
- 错误码 44 的根源:”media_ids parameter is invalid” 几乎总是因传入了 int64、[]int64 或 JSON 格式字符串(如 “[123]”)导致——API 期望纯数字字符串。
- 依赖补充:上述代码需导入 “encoding/base64” 包(未在 import 列表显式写出,请自行添加)。
✅ 总结:成功发布带图推文的核心在于「类型精准」与「协议合规」。牢记 MediaID 是整数,但 API 接口契约要求其作为字符串传输;结合 strconv.FormatInt 和标准 base64 编码,即可稳定集成媒体发布能力。建议在生产环境增加重试机制与媒体校验(如尺寸、格式预检),以提升鲁棒性。