2011-12-24 7 views
5

Próbuję wgrać zdjęcie do Twitpic za pomocą bibliotek TweetSharp i Hammock w aplikacji WP7. Kawałek kodu, który przesyła zdjęcie to:"Nagłówki odrzucone przez Twittera" podczas przesyłania mediów do Twitpic za pomocą 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); 

Niektóre wyjaśnienia do kodu: ten pochodzi z wywołania photoPickerTask, e jest argument wydarzenie, które zawiera nazwę zdjęciem oraz plik (IO.Stream obiekt). Wszystko to sprawdza się, działa.

Problem polega na tym, że odpowiedź Twitpic jest zawsze "Nie można się uwierzytelnić: nagłówki odrzucone przez Twittera". TwitterClient działa, tokeny OAuth są w porządku. Klucz API jest poprawny. Nie wiem, czy błąd pochodzi z mojego kodu, z funkcji TweetSharp PrepareEchoRequest() lub z Twitpic. Czy ktoś może mi dać wskazówkę?

+0

Chociaż to dla PHP, oto rozwiązanie, które może pomóc http://shkspr.mobi/blog/?p=2084 – keyboardP

+0

Czy jesteś w stanie używać Skrzypek? –

+0

@keyboardP, tak, znalazłem to podczas wyszukiwania rozwiązań. Ale to nie działa dla mnie. – gjulianm

Odpowiedz

4

Mam już ten sam (& podobne) kłopoty przez zbyt wiele godzin dzisiaj. W końcu udało mi się to zrobić, zmieniając ścieżkę wersji na 1 i wprowadzając wszystkie tokeny do żądania (jak opisano w twitpic doco). Pomyślałem, że wczoraj spróbowałem tej właśnie kombinacji, ale teraz działa, więc palce w interfejsie API nie są w międzyczasie aktualizowane.

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

Spróbuję tego później i powiem ci, ale wygląda na to, że zadziała, dzięki :) Tylko jedno pytanie, co to znaczy "Environment.TickCount.ToString()"? – gjulianm

+0

Patrząc na to (zaczyna się ten sam kod) nie wydaje się bardzo rozsądne wysyłanie wszystkich tajnych kodów do twitpic? – Stuart

Powiązane problemy