2010-05-19 17 views
5

Tengo alrededor de 300 imágenes que quiero cargar en mi nueva cuenta de Tumblr, porque mi antiguo sitio de wordpress fue pirateado y ya no deseo usar wordpress.Carga de múltiples imágenes a través de la API de Tumblr

Cargué una imagen al día durante 300 días, y me gustaría poder tomar estas imágenes y cargarlas en mi sitio tumblr usando la API.

Las imágenes son actualmente locales, almacenadas en/images /. Todos tienen la fecha en que fueron cargados como los primeros diez caracteres del nombre del archivo, (01-01-2009-filename.png) y también fui a enviar este parámetro de fecha. Quiero poder ver el progreso de la secuencia de comandos al enviar las respuestas de la API a mi error_log. Esto es lo que tengo hasta ahora, basado en la página de la API de 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 

aquí está el primer obstáculo. ¿Cómo obtengo todas las imágenes en el directorio y las recorro? Una vez que tengo un bucle for o while estableció que supongo que este es el siguiente paso

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

Por lo tanto, estoy atascado en cómo utilizar PHP para leer un directorio de archivos, bucle a través de cada uno de los archivos, y hacer cosas al nombre/con el archivo en sí. También necesito saber cómo configurar el parámetro de datos, como en la elección de multiparte/formdata. Tampoco sé nada sobre cURL.

Respuesta

1

Puede usar la función glob para obtener rápidamente una matriz de archivos que coincidan con un patrón. Es decir:

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

Para hacer rizos carga el archivo, sólo tiene que pasar el nombre del archivo con el prefijo @ (véase la descripción CURLOPT_POSTFIELDS en http://www.php.net/curl_setopt). En el momento en que le pasa un identificador de archivo PHP, no tiene demasiado sentido. Cambie $post_data a:

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

Y usted debe ser bueno.

0

Tengo esta trabajando con este código:

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

Este código ya no funciona. Yo recomendaría https://gist.github.com/velocityzen/1242662 – westondeboer

Cuestiones relacionadas