Tweetsharp Twitter API - post 多张图片

Tweetsharp Twitter API - post multiple images

下面的代码有效并将 post 发送到 Twitter,但只会 post 向帐户发送一张图片,即使发送了三张图片也是如此。

这些只是 jpg 或 png 文件,不是视频或动画 gif。

如有任何想法,我们将不胜感激。

    Dim service = New TwitterService(key, secret)
    service.AuthenticateWith(token, tokenSecret)

    Dim opt As New SendTweetWithMediaOptions

    Dim images As New Dictionary(Of String, IO.Stream)
    Dim myStream As FileStream

    If Len(ImgName1) > 0 Then
        myStream = New FileStream(ImgName1, FileMode.Open)
        images.Add("1", myStream)
    End If
    If Len(ImgName2) > 0 Then
        myStream = New FileStream(ImgName2, FileMode.Open)
        images.Add("2", myStream)
    End If
    If Len(ImgName3) > 0 Then
        myStream = New FileStream(ImgName3, FileMode.Open)
        images.Add("3", myStream)
    End If

    opt.Status = TweetText
    opt.Images = images

    Dim TwitterStatus = service.SendTweetWithMedia(opt)

TweetSharp 方法调用的 API 端点不支持多张图片(我不认为它曾经支持过,但无论哪种方式当前文档都说不;https://dev.twitter.com/rest/reference/post/statuses/update_with_media)。

您需要做的是使用 UploadMedia 端点上传图像并捕获每个图像的 ID,然后发送带有 ID 列表的推文。

我不确定您使用的是哪种 TweetSharp 变体。 official/original 已经知道 Nuget 包中的错误,虽然 repo 中的源代码修复了这些错误,但缺少更新的 API 支持。

您可以尝试 TweetMoaSharp(主要由我维护),因为我相信它支持新的端点(但我已经有一段时间没看过了)。在 Nuget 上还有 tweetsharp-alternative 和其他一些可能有支持的人。

我使用 TweetInvi https://github.com/linvi/tweetinvi(通过 Nuget 安装)使其正常工作的代码是:

(Imports Tweetinvi)


    Auth.SetUserCredentials(key, secret, token, tokenSecret)

    Dim params As New Tweetinvi.Parameters.PublishTweetOptionalParameters()
    params.Medias = New List(Of Models.IMedia)
    Dim MediaIDs As String = String.Empty

    Dim ids As New List(Of Long)

    If Len(ImgName1) > 0 Then
        Dim imgFile1 As Byte() = System.IO.File.ReadAllBytes(ImgName1)
        Dim myMedia1 = Upload.UploadImage(imgFile1)
        ids.Add(myMedia1.MediaId)
        imgFile1 = Nothing
    End If
    If Len(ImgName2) > 0 Then
        Dim imgFile2 As Byte() = System.IO.File.ReadAllBytes(ImgName2)
        Dim myMedia2 = Upload.UploadImage(imgFile2)
        ids.Add(myMedia2.MediaId)
        imgFile2 = Nothing
    End If
    If Len(ImgName3) > 0 Then
        Dim imgFile3 As Byte() = System.IO.File.ReadAllBytes(ImgName3)
        Dim myMedia3 = Upload.UploadImage(imgFile3)
        ids.Add(myMedia3.MediaId)
        imgFile3 = Nothing
    End If

    params.MediaIds = ids

    Dim myTweet = Tweet.PublishTweet("blah, blah, blah", params)