2013-05-15 15 views
5

Zwykle używam API tumblr z perl i mam do dyspozycji kilka funkcji.Opublikuj plik obrazu lokalnego na tumblr za pośrednictwem interfejsu API z perlem

Jednak nie mogę pobrać lokalnych plików graficznych do przesłania za pośrednictwem Perla.

Tu jest mój kod, który pracuje dla URL

use LWP::Authen::OAuth; 
    use JSON; 
    use Data::Dumper; 
    use strict; 
     my $ua = LWP::Authen::OAuth->new(
      oauth_consumer_key => 'xxx', 
      oauth_consumer_secret => 'xxx', 
      oauth_token => 'xxx', 
      oauth_token_secret => 'xxx', 
    ); 




    my $response; 
    $response = $ua->post('http://api.tumblr.com/v2/blog/mytumblr.tumblr.com/post', [ 
     type => 'photo', 
     url => 'http://www.example.com/mypic.jpg' , 
     caption => 'Test image 1', 
    ]); 


    if ($response->is_success) { 
     print "it worked"; 
    } 
    else { 
    print "it did not work \n \n \n \n"; 
    print $response->as_string; 
    } 

Jednak, kiedy zastąpił „URL” do „danych” w parametrach pocztowych (zgodnie z instrukcją w opisie API tutaj - http://www.tumblr.com/docs/en/api/v2#posting), wciąż otrzymuję odpowiedź błędu z tumblr. Próbowałem kilku sposobów wprowadzania parametru "data" - jako ścieżki do pliku, jako binarnej reprezentacji, jako adresu URL zakodowanej reprezentacji binarnej, jako binarnej reprezentacji zakodowanej w url base64, zatrzymałem echa jednej z tych wartości jako jedynego elementu w tablicy - próbowałem wszystkich iz każdym otrzymuję komunikat o błędzie z powrotem z tumblr.

Czy ktoś może mi pokazać, jak załadować plik lokalnego obrazu do urządzenia tumblr?

+0

Jakiego błędu dostałeś? – friedo

+0

'HTTP/1.1 400 Niepoprawne żądanie połączenia: zamknij Data: środa, 15 maja 2013 21:48:31 GMT Serwer: nginx Content-Type: application/json; charset = utf-8 Klient-Date: środa, 15 maja 2013 21:48:31 GMT Klient-Peer: 66.6.40.14:80 Klient-Response-Num: 1 Klient-Transfer-Kodowanie: porcje P3P: CP = "ALL ADM DEV PSAi COM NASZE OTRo STP IND ONL "Set-Cookie: tmgioct = 519402aea446110439257710; wygasa = sobota, 13 maja-2023 21:48:30 GMT; ścieżka = /; httponly {"meta": {"status": 400, "msg": "Bad Request"}, "response": {"errors": ["Błąd przesyłania zdjęcia."]}} ' –

+0

spróbuj usunąć część z napisami - Czy to działa? – PHearst

Odpowiedz

0

Nie jestem zaznajomieni z API tumblr, ale szybkie googling znaleźć mi ten przykład: https://gist.github.com/derekg/1198576

chciałbym spróbować

$response = $ua->post('http://api.tumblr.com/v2/blog/mytumblr.tumblr.com/post', [ 
    type => 'photo', 
    'data[0]' => $file_contents , ## LWP::Useragent should automatically urlencode this 
    caption => 'Test image 1', 
]); 

Według tej odpowiedzi https://stackoverflow.com/a/177866/810448, to możliwe, że „dane [] "działałoby również w tej sytuacji.

Chciałbym również rozważyć dodanie "Content-type: application/x-www-form-urlencoded" do nagłówków żądań, jeśli LWP :: Useragent już tego nie robi.

+0

To też nie działa - jednak tym razem wydaje mi się, że dostaję następujący błąd: –

+0

HTTP/1.1 401 Nie autoryzowany Połączenie: zamknij Data: czw, 16 maja 2013 17:48:56 GMT Serwer: Apache Vary: Accept-encoding Content-Length: 60 Content-Type: application/json Client-Date: Thu, 16 May 2013 17:48:59 GMT Client-peer: 66.6.40.14:80 client- Numer odpowiedzi: 1 Ostrzeżenie klienta: brakujący nagłówek Authenticate P3P: CP = "ALL ADM DEV PSAi COM NASZ OTRo STP IND ONL" Zestaw-cookie: tmgioct = 51951c0b8ea0630258123660; expires = Sun, 14-May-2023 17:48:59 GMT; ścieżka = /; httponly X-Tumblr-Usec: D = 3649265 {"meta": {"status": 401, "msg": "Nie autoryzowany"}, "odpowiedź": []} –

+0

również - dwa dalsze pytania - do czego używasz, aby uzyskać zawartość pliku? A jak ustawić typ zawartości w poście UA? Próbowałem kilka metod dla każdego (File :: Slurp, my $ imagepath = 'C: \ scripts \ vega1.jpg'; open (IMAGE, $ imagepath) lub umrzyj "$!"; my $ raw_string = do {local $/= undef; ;};) - do przesyłania plików, używając $ ua-> default_header ('' Content-type '=>' application/x-www-form- "zakodowany") lub określić go jako parametr w żądaniu POST - wszystkie są puste. Jestem szczerze trochę zmieszany –