2010-05-19 22 views
5

Ho circa 300 immagini che voglio caricare sul mio nuovo account Tumblr, perché il mio vecchio sito wordpress è stato violato e non desidero più utilizzare wordpress.Caricamento di più immagini tramite l'API Tumblr

Ho caricato un'immagine al giorno per 300 giorni, e mi piacerebbe essere in grado di prendere queste immagini e caricarle sul mio sito tumblr usando l'api.

Le immagini sono attualmente locali, memorizzate in/images /. Hanno tutti la data in cui sono stati caricati come i primi dieci caratteri del nome file, (01-01-2009-filename.png) e sono andato a inviare anche questo parametro di data. Voglio essere in grado di vedere il progresso dello script emettendo le risposte dall'API al mio error_log. Ecco quello che ho finora, basato sulla pagina delle api 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 

ecco il primo ostacolo. Come posso ottenere tutte le immagini nella directory e visualizzarle in loop? Una volta che ho un ciclo for o while istituito Suppongo che questo è il passo successivo

$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); 

Così, mi sono bloccato su come utilizzare PHP per leggere una directory di file, ciclo attraverso ognuno dei file, e fare cose al nome/con il file stesso. Ho anche bisogno di sapere come impostare i parametri dei dati, come nella scelta di multiparte/dati. Inoltre non so nulla di cURL.

risposta

1

È possibile utilizzare la funzione glob per ottenere rapidamente una matrice di file corrispondenti a un modello. Cioè:

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

Per rendere ricciolo caricare il file, si può semplicemente passare il nome del file con prefisso un @ (si veda la descrizione CURLOPT_POSTFIELDS a http://www.php.net/curl_setopt). Nel momento in cui lo passi, un handle di file PHP, che non ha molto senso. Cambia $post_data a:

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

E dovresti essere buono.

0

ho ottenuto questo lavoro con questo codice:

<?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

Questo codice non funziona più. Consiglierei https://gist.github.com/velocityzen/1242662 – westondeboer

Problemi correlati