2011-12-24 5 views
5

Estoy intentando subir una imagen a Twitpic usando las bibliotecas TweetSharp y Hammock en una aplicación WP7. El trozo de código que carga la foto es la siguiente:"Encabezados rechazados por Twitter" al cargar medios en 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); 

alguna explicación para el código: esto viene de una llamada a photoPickerTask, e es el argumento de evento que contiene el nombre de la foto y el archivo (un IO.Stream objeto). Todo esto se verifica que está funcionando.

El problema es que la respuesta de Twitpic es siempre "No se pudo autenticar: encabezados rechazados por Twitter". El TwitterClient funciona, los tokens de OAuth están bien. La clave API es correcta. No sé si el error proviene de mi código, de la función TweetSharp PrepareEchoRequest() o de Twitpic. ¿Alguien puede darme una pista?

+0

Aunque es para PHP, he aquí una solución que podría ayudar http://shkspr.mobi/blog/?p=2084 – keyboardP

+0

¿Es capaz de utilizar el violinista? –

+0

@keyboardP, sí, lo encontré mientras buscaba soluciones. Pero no funciona para mí. – gjulianm

Respuesta

4

He tenido el mismo problema (& similar) durante demasiadas horas hoy. Finalmente conseguí que funcionara al cambiar la ruta de la versión a 1 y al ingresar todos los tokens en la solicitud (como se describe en el doco twitpic). Pensé que probé esta combinación exacta ayer, pero está funcionando ahora, por lo que los dedos cruzados la API no se actualiza mientras tanto.

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

Lo intentaré más tarde y te lo diré, pero parece que funcionará, gracias :) Solo una pregunta, ¿qué significa 'Environment.TickCount.ToString()'? – gjulianm

+0

Al ver esto (a punto de comenzar el mismo código), no parece muy sensato enviar todos los códigos secretos a twitpic. – Stuart

Cuestiones relacionadas