Поместите изображение в Twitter по статусам / update_with_media в C # - PullRequest
0 голосов
/ 08 сентября 2011

Как разместить изображение в твиттере по статусам POST / update_with_media в C #

https://dev.twitter.com/docs/api/1/post/statuses/update_with_media

Ответы [ 2 ]

2 голосов
/ 09 декабря 2015

Вот API под названием TweeterSharp, который можно использовать для отправки сообщения вместе с изображением в твиттер, ниже приведен пример кода.

using (var stream = new FileStream(imagePath, FileMode.Open))
            {
                var result = service.SendTweetWithMedia(new SendTweetWithMediaOptions
                {
                    Status = message,
                    Images = new Dictionary<string, Stream> { { "john", stream } }
                });
                lblResult.Text = result.Text.ToString();
            }

Полное описание на - Скопировано из Опубликовать сообщение с изображением в Twitter, используя C #

2 голосов
/ 19 апреля 2012

Хорошо. Я отвечу на это в предположении, что вы знаете, как просто «чирикать» текст, используя их REST API. Если нет, пожалуйста, дайте мне знать, и я тоже могу помочь.

Следующие два метода, очевидно, имеют гораздо больше, но они подробно показывают, что нужно сделать дополнительно в запросе REST. Важно отметить, что в этой части запроса вы не используете строки запроса https://upload.twitter.com/1/statuses/update_with_media.json

Это методы из библиотеки OAuth, которую я написал, которая обрабатывает вызовы API для различных API REST, таких как Twitter и LinkedIn.

Ключ заключается в том, как вы добавляете информацию о твитах и ​​фотографиях в поток запросов. Я должен отдать должное человеку по этой ссылке за его пример ... это, безусловно, повлияло на мой метод PrepareTwitterDataRequest (). Я также понимаю, что этот пример находится в VB.NET, и вы попросили C # ... Если вы не можете перевести, попробуйте this.

Friend Function ApiWebRequest(ByVal method As String, ByVal url As String, ByVal fileRequest As OAuthFileRequest) As String

        Dim request As HttpWebRequest = Me.GenerateCoreWebRequest(url, method)

        request.Headers.Add("Authorization", Me.GetAuthHeaderValue(New Uri(url), method))

        Select Case Me.ApiType

            Case OAuthApiType.Twitter
                Me.PrepareTwitterDataRequest(request, fileRequest)

            Case OAuthApiType.LinkedIn
                Me.PrepareLinkedInDataRequest(request, fileRequest)

            Case OAuthApiType.Other
                Me.PrepareDataRequest(request, fileRequest)

        End Select

        Return Me.ProcessWebRequest(request)

    End Function

    Private Sub PrepareTwitterDataRequest(ByRef request As HttpWebRequest, ByVal fileRequest As OAuthFileRequest)

        Dim shortFileName As String = fileRequest.FileShortName

        Dim fileContentType As String = Me.GetMimeType(shortFileName)

        Dim message As String = fileRequest.Message

        Dim encoding As Text.Encoding = Text.Encoding.GetEncoding("iso-8859-1")

        Dim fileHeader As String = String.Format("Content-Disposition: file; " & "name=""media""; filename=""{0}""", shortFileName)

        Dim boundary As String = DateTime.Now.Ticks.ToString("x")

        Dim separator As String = String.Format("--{0}", boundary)

        Dim footer As String = String.Format("\r\n{0}--\r\n", separator)

        Dim contents As New Text.StringBuilder()

        contents.AppendLine(separator)
        contents.AppendLine("Content-Disposition: form-data; name=""status""")
        contents.AppendLine()
        contents.AppendLine(message)
        contents.AppendLine(separator)
        contents.AppendLine(fileHeader)
        contents.AppendLine(String.Format("Content-Type: {0}", fileContentType))
        contents.AppendLine()

        Dim contentsBuffer As Byte() = encoding.GetBytes(contents.ToString())

        Dim footBuffer As Byte() = encoding.GetBytes(footer)

        'collect all byte() into one stream
        Dim byteCollector As New MemoryStream
        byteCollector.Write(contentsBuffer, 0, contentsBuffer.Length)
        byteCollector.Write(fileRequest.FileData, 0, fileRequest.FileData.Length)
        byteCollector.Write(footBuffer, 0, footBuffer.Length)

        'dump collector stream into byte()
        Dim requestBytes As Byte() = byteCollector.ToArray()

        'close/dispose the collector
        byteCollector.Close()
        byteCollector.Dispose()

        request.ContentType = (String.Format("multipart/form-data; boundary=""{0}""", boundary))
        request.ContentLength = requestBytes.Length

        Using reqStream As IO.Stream = request.GetRequestStream()

            reqStream.Write(requestBytes, 0, requestBytes.Length)

        End Using

    End Sub
...