【问题标题】:Uploading multiple images through Tumblr API通过 Tumblr API 上传多张图片
【发布时间】:2011-02-21 15:06:51
【问题描述】:

我有大约 300 张图片要上传到我的新 Tumblr 帐户,因为我的旧 wordpress 网站被黑了,我不再希望使用 wordpress。

我每天上传一张图片,持续了 300 天,我希望能够拍摄这些图片并使用 api 将它们上传到我的 tumblr 网站。

图像当前是本地的,存储在 /images/ 中。它们都将上传日期作为文件名的前十个字符 (01-01-2009-filename.png),我也一起发送了这个日期参数。我希望能够通过将 API 的响应输出到我的 error_log 来查看脚本的进度。这是我目前所拥有的,基于 tumblr api 页面。

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

这是第一个绊脚石。如何获取目录中的所有图像并遍历它们?一旦我设置了 for 或 while 循环,我认为这是下一步

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

所以,我被困在如何使用 PHP 读取文件目录、遍历每个文件以及使用文件本身对名称 / 执行操作。我还需要知道如何设置数据参数,如选择多部分/表单数据。我对 cURL 也一无所知。

【问题讨论】:

    标签: php api filesystems tumblr


    【解决方案1】:

    您可以使用glob 函数快速获取与模式匹配的文件数组。那就是:

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

    要让 curl 上传文件,您可以简单地将文件名以@ 为前缀(参见CURLOPT_POSTFIELDS 描述http://www.php.net/curl_setopt)。此刻,您正在向它传递一个 PHP 文件句柄,这没有多大意义。将$post_data 更改为:

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

    你应该很好。

    【讨论】:

      【解决方案2】:

      我用这个代码得到了这个:

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      相关资源
      最近更新 更多