2011-09-08 1 views
0

의 상태/update_with_media에 의해 트위터에 이미지가POST C#을

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

+0

에서 복사 당신이 무슨 짓을 -

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

전체 설명을에있다? – Mob

답변

2

확인 C#으로 POST 상태/update_with_media에 의해 트위터. 나는 REST API를 사용하여 텍스트를 단순히 "트위트 (Tweet)"하는 방법을 알고 있다는 가정하에 이것을 대답 할 것이다. 당신이하지 않는다면, 저에게 알려주십시오. 그리고 제가 도울 수 있습니다.

분명히 다음 두 가지 방법이 더 많이 있지만, REST 요청에서 추가적으로 수행해야 할 작업을 자세히 보여줍니다. 요청의이 부분에서 쿼리 문자열을 사용하지 않는다는 점에 유의해야합니다. https://upload.twitter.com/1/statuses/update_with_media.json

이들은 Twitter API 및 LinkedIn과 같은 다양한 REST API에 대한 API 호출을 처리하는 OAuth 라이브러리의 메소드입니다.

키는 요청 스트림에 트윗과 사진 정보를 추가하는 방법입니다. 자신의 예를 들어이 link에서 개인에게 신용을 제공해야합니다 ... 그것은 확실히 PrepareTwitterDataRequest() 메소드에 영향을 미쳤습니다. 또한이 예제 VB.NET에 실현 당신은 C#을 요청 ... 당신이 여기

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