2010-05-19 5 views
5

Mam około 300 zdjęć, które chcę przesłać na moje nowe konto Tumblr, ponieważ moja stara strona z wordpress została zhackowana i nie chcę już używać wordpressa.Przesyłanie wielu obrazów za pośrednictwem interfejsu API Tumblr

Przesłałem jedno zdjęcie dziennie przez 300 dni, a chciałbym móc zrobić te zdjęcia i przesłać je na moją stronę tumblr za pomocą api.

Obrazy są obecnie lokalne, zapisane w katalogu/images /. Wszystkie mają datę, kiedy zostały przesłane jako pierwsze dziesięć znaków nazwy pliku (01-01-2009-filename.png), a ja również wysłałem ten parametr daty. Chcę móc zobaczyć postęp skryptu, wysyłając odpowiedzi z API do mojego error_log. Oto, co mam do tej pory, na podstawie strony apl tumblr.

// Authorization info 
$tumblr_email = '[email protected]'; 
$tumblr_password = 'password'; 

// Tumblr script parameters 
$source_directory = "images/"; 

// For each file, assign the file to a pointer 

Oto pierwszy blok potknięcia. Jak mogę uzyskać wszystkie obrazy w katalogu i przeglądać je? Raz mam dla pętli while lub skonfigurować Zakładam ten jest kolejnym krokiem

$post_data = fopen(dir(__FILE__) . $source_directory . $current_image, 'r'); 
$post_date = substr($current_image, 0, 10); 


// Data for new record 
$post_type = 'photo'; 

// Prepare POST request 
$request_data = http_build_query(
    array(
     'email' => $tumblr_email, 
     'password' => $tumblr_password, 
     'type' => $post_type, 
     'data' => $post_data, 
     'date' => $post_date, 
     'generator' => 'Multi-file uploader' 
    ) 
); 

// Send the POST request (with cURL) 
$c = curl_init('http://www.tumblr.com/api/write'); 
curl_setopt($c, CURLOPT_POST, true); 
curl_setopt($c, CURLOPT_POSTFIELDS, $request_data); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($c); 
$status = curl_getinfo($c, CURLINFO_HTTP_CODE); 
curl_close($c); 

// Output response to error_log 
error_log($result); 

Tak, utknąłem na temat korzystania z PHP do odczytu pliku, katalogu pętli przez każdego z plików, a nie rzeczy do nazwy/z samym plikiem. Muszę również wiedzieć, jak ustawić parametr danych, tak jak przy wyborze wieloczęściowych/formularza. Nie wiem też nic o cURL.

Odpowiedz

1

Możesz użyć funkcji glob, aby szybko uzyskać tablicę plików pasujących do wzorca. Czyli:

foreach (glob('images/*.png') as $current_image) { 
    ... 
}

Aby Curl przesłać plik, możesz po prostu przekazać go nazwę pliku wraz z przedrostkiem @ (patrz opis CURLOPT_POSTFIELDS na http://www.php.net/curl_setopt). Z chwilą, gdy przekazujesz mu uchwyt pliku PHP, co nie ma większego sensu. Zmień $post_data na:

$post_data = '@' . dirname(__FILE__) . '/' . $current_image;

I powinieneś być dobry.

0

dostałem tej pracy z tym kodem:

<?php 
// Authorization info 
$tumblr_email = 'email'; 
$tumblr_password = 'password'; 
$tumblr_url = 'yourtumblr.tumblr.com'; 

$directory = getcwd(); 
$images = glob("./{*.jpeg,*.gif,*.png,*jpg}", GLOB_BRACE); 
if ($images) { 
foreach($images as $image) { 

$post_data = $directory."/".$image; 

// Data for new record 
$post_type = 'photo'; 
$post_title = 'The post title'; 
$post_body = 'This is the body of the post.'; 

// Prepare POST request 
$request_data = http_build_query(
    array(
     'email'  => $tumblr_email, 
     'password' => $tumblr_password, 
     'type'  => 'photo', 
     'state'  => 'queue', 
     'data'  => file_get_contents($post_data), 
     'group'  => $tumblr_url 
    ) 
); 

// Send the POST request (with cURL) 
$c = curl_init('http://www.tumblr.com/api/write'); 
curl_setopt($c, CURLOPT_POST, true); 
curl_setopt($c, CURLOPT_POSTFIELDS, $request_data); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($c); 
$status = curl_getinfo($c, CURLINFO_HTTP_CODE); 
curl_close($c); 

// Check for success 
if ($status == 201) { 
    echo "Success! The new post ID is $result.\n"; 
} else if ($status == 403) { 
    echo 'Bad email or password'; 
} else { 
    echo "Error: $result\n"; 
} 

} 

} else { 

echo "No images in folder :("; 

} 
?> 
+0

Ten kod nie działa. Polecam https://gist.github.com/velocityzen/1242662 – westondeboer