Tumblr API ile birden fazla görüntü yükleme

2 Cevap php

Benim eski wordpress sitesi hacklendi ve ben artık wordpress kullanmak isteyen var becuase, benim yeni Tumblr hesabı upload etmek isteyen yaklaşık 300 görüntüler var.

Ben 300 gün boyunca günde bir görüntü tarih, ve ben bu görüntüleri almak ve API kullanarak benim tumblr sitesine upload edebilmek istiyorum.

Images / images / saklanan, şu anda yerel. Onlar hepsi dosya adının ilk on karakteri olarak yüklendi tarihini, (01-01-2009-filename.png) var ve ben de birlikte bu tarih parametre göndermek için gitti. Benim error_log için API yanıtları çıktılayarak script ilerleme görmek mümkün olmak istiyorum. İşte ben bugüne kadar, tumblr API sayfaya dayalı budur.

// Authorization info
$tumblr_email    = 'me@example.com';
$tumblr_password = 'password';

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

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

Burada ilk engel bulunuyor. Nasıl ben içlerinden dizin ve döngü içinde tüm görüntüleri alabilirim? Ben bir veya döngü sanıyorum kurmak ise, bu bir sonraki adım aldıktan sonra

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

Yani, ben dosyalarının her aracılığıyla bir dosya dizini, döngü okumak ve dosyanın kendisi ile / adına bir şeyler yapmak için PHP nasıl kullanılacağı üzerine şaşırıp. Ben de çok parçalı / formdata seçiminde olduğu gibi, veri parametresini ayarlamak için bilmek gerekir. Ben de cURL hakkında hiçbir şey bilmiyorum.

2 Cevap

Hızlı bir şekilde desen eşleştirme dosyaları bir dizisini almak için glob işlevini kullanabilirsiniz. Yani:

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

Kıvırmak dosyası yüklemek için, sadece o öneki ile dosya adını iletebilirsiniz bir @ (http://www.php.net/curl_setopt de CURLOPT_POSTFIELDS açıklamasına bakınız). Dakikada bunu çok mantıklı değil bir PHP dosya tanıtıcı, geçiyoruz. Değişim $post_data için:

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

Ve iyi olmalıdır.

Ben bu kod ile çalışma var:

<?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 :(";

}
?>