2011-12-24 5 views
5

Sto tentando di caricare un'immagine su Twitpic utilizzando le librerie TweetSharp e Hammock in un'app WP7. Il pezzo di codice che carica la foto è questo:"Intestazioni rifiutate da Twitter" durante il caricamento di media su Twitpic con TweetSharp/Hammock

// Clients.srv is a TweetSharp TwitterClient 
RestRequest req = Clients.srv.PrepareEchoRequest(); 
RestClient client = new RestClient { Authority = "http://api.twitpic.com/", VersionPath = "2" }; 

req.AddFile("media", e.OriginalFileName, e.ChosenPhoto); 
req.AddField("key", "hidden"); 
req.AddField("message", Tweet.Text); 
req.Path = "upload.xml"; 
req.Method = Hammock.Web.WebMethod.Post; 

client.BeginRequest(req, (RestCallback) uploadCompleted); 

Qualche spiegazione al codice: questo viene da una chiamata a photoPickerTask, e è l'argomento evento che contiene il nome del file e foto (un IO.Stream oggetto). Tutto questo è verificato per funzionare.

Il problema è che la risposta di Twitpic è sempre "Non posso autenticarti: le intestazioni rifiutate da Twitter". Il TwitterClient funziona, i token OAuth vanno bene. La chiave API è corretta. Non so se l'errore proviene dal mio codice, dalla funzione TweetSharp PrepareEchoRequest() o da Twitpic. Qualcuno può darmi un indizio?

+0

Anche se è per PHP, ecco una soluzione che potrebbe aiutare http://shkspr.mobi/blog/?p=2084 – keyboardP

+0

Siete in grado di utilizzare violinista? –

+0

@keyboardP, sì, l'ho trovato durante la ricerca di soluzioni. Ma non funziona per me. – gjulianm

risposta

4

Ho avuto lo stesso problema (& simile) per troppe ore oggi. Alla fine ho funzionato cambiando il percorso della versione in 1 e inserendo tutti i token nella richiesta (come descritto nel documento twitpic). Pensavo di aver provato questa combinazione esatta ieri, ma ora funziona, quindi le dita incrociate non vengono aggiornate nel frattempo.

TwitterService service = new TwitterService(consumerKey, consumerSecret); 
    service.AuthenticateWith(accessToken, accessTokenSecret); 

    if (thumbnail != null) // an image post - go through twitpic 
    { 
     MemoryStream ms = new MemoryStream(); 
     thumbnail.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
     ms.Seek(0, SeekOrigin.Begin); 

     // Prepare an OAuth Echo request to TwitPic 
     RestRequest request = service.PrepareEchoRequest(); 
     request.Path = "uploadAndPost.xml"; 
     request.AddField("key", twitpicApiKey); 
     request.AddField("consumer_token", consumerKey); 
     request.AddField("consumer_secret", consumerSecret); 
     request.AddField("oauth_token", accessToken); 
     request.AddField("oauth_secret", accessTokenSecret); 
     request.AddField("message", "Failwhale!"); 
     request.AddFile("media", "failwhale" + Environment.TickCount.ToString(), ms, "image/jpeg"); 

     // Post photo to TwitPic with Hammock 
     RestClient client = new RestClient { Authority = "http://api.twitpic.com/", VersionPath = "1" }; 
     RestResponse response = client.Request(request); 

     return response.Content; 
    } 
+0

Ci proverò più tardi e ti dirò, ma sembra funzionerà, grazie :) Solo una domanda, che cosa significa 'Ambiente.TickCount.ToString()'? – gjulianm

+0

Guardando questo (in procinto di avviare lo stesso codice) non sembra molto sensato inviare tutti i codici segreti a twitpic? – Stuart

Problemi correlati