2012-05-03 8 views
5

ho bisogno di aiuto a caricare le immagini direttamente su Twitter in Windows Phone 7.caricare immagine direttamente su Twitter

mi sono fatto con flusso OAuth di Twitter e posso anche potuto aggiornare tweets, ma non sono stato in grado di caricare un'immagine per twitter usando wp7?

+0

... e se si utilizza una libreria client che uno, come tu hai etichettato questa domanda con più di uno –

+0

ho provato tweetsharp per Windows Phone. e anche twitterizer per oauth flow e postare un tweet. grazie per le tue risposte :) –

+0

Quale codice hai provato con entrambi? –

risposta

9

Ho elaborato una soluzione per questo, utilizzando la libreria Hammock.WindowsPhone.Mango. (TweetSharp utilizza internamente biblioteca Amaca per l'OAuth e altre funzionalità, ma non ho mai usato TweetSharp o Twitterizer)

ho installato l'ultima versione di Hammock da Nuget

E poi il seguente codice viene utilizzato per il caricamento foto a Twitter:

public void uploadPhoto(Stream photoStream, string photoName) 
{ 
var credentials = new OAuthCredentials 
     { 
      Type = OAuthType.ProtectedResource, 
      SignatureMethod = OAuthSignatureMethod.HmacSha1, 
      ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader, 
      ConsumerKey = TwitterSettings.consumerKey, 
      ConsumerSecret = TwitterSettings.consumerKeySecret, 
      Token = TwitterSettings.accessToken, 
      TokenSecret = TwitterSettings.accessTokenSecret, 
      Version = "1.0a" 
     }; 


     RestClient restClient = new RestClient 
     { 
      Authority = "https://upload.twitter.com", 
      HasElevatedPermissions = true, 
      Credentials = credentials, 
      Method = WebMethod.Post 
     }; 
     RestRequest restRequest = new RestRequest 
     { 
      Path = "1/statuses/update_with_media.json" 
     }; 

     restRequest.AddParameter("status", tbxNewTweet.Text); 
     restRequest.AddFile("media[]", photoName, photoStream, "image/jpg"); 

} 

    restClient.BeginRequest(restRequest, new RestCallback(PostTweetRequestCallback)); 
} 


private void PostTweetRequestCallback(RestRequest request, Hammock.RestResponse response, object obj) 
{ 
     if (response.StatusCode == System.Net.HttpStatusCode.OK) 
     { 
     //Success code 
     } 
} 

Qui, photoName è il nome dell'immagine selezionata ("e.OriginalFileName") photostream è il "e.ChosenPhoto" dal PhotoChooserTask

e il 4 ° parametro per .AddFile() dovrebbero essere presi cura (non hanno considerato altri formati mentre si fa questo esempio, si deve prendere cura di tue applicazioni)

Spero che questo aiuta !!

+0

Si suppone che MediaUpdateUrl sia "https://upload.twitter.com/1/statuses/update_with_media.json"? – loyalpenguin

+0

@loyalpenguin mi dispiace, ho modificato il mio codice. Il suo "https://upload.twitter.com" – nkchandra

+0

Ok ho cambiato tutto e sembra che tutto vada liscio, ma quando ricevo la risposta sto ricevendo un messaggio "UnAuthorized". Qualche idea del perché potrei averlo? Sto passando un token valido e un token segreto. Il codice – loyalpenguin

0

LINQ to Twitter supporta WP7 e ha un metodo di TweetWithMedia che funziona in questo modo:

private void PostButton_Click(object sender, RoutedEventArgs e) 
    { 
     if (string.IsNullOrWhiteSpace(TweetTextBox.Text)) 
      MessageBox.Show("Please enter text to tweet."); 

     ITwitterAuthorizer auth = SharedState.Authorizer; 
     if (auth == null || !auth.IsAuthorized) 
     { 
      NavigationService.Navigate(new Uri("/OAuth.xaml", UriKind.Relative)); 
     } 
     else 
     { 
      var twitterCtx = new TwitterContext(auth); 

      var media = GetMedia(); 

      twitterCtx.TweetWithMedia(
       TweetTextBox.Text, false, StatusExtensions.NoCoordinate, StatusExtensions.NoCoordinate, null, false, 
       media, 
       updateResp => Dispatcher.BeginInvoke(() => 
       { 
        HandleResponse(updateResp); 
       })); 
     } 
    } 

Joe

+0

Come si presiede la condivisione di SharedState.Authorizer tra le applicazioni, quindi non è necessario autorizzare ogni volta che viene eseguita l'app? –

+0

@IgorKulman, è possibile salvare le credenziali anziché il programma di autorizzazione. Maggiori informazioni qui: http://linqtotwitter.codeplex.com/discussions/362342. –

Problemi correlati