【问题标题】:Batch download images from youtube api从 youtube api 批量下载图片
【发布时间】:2013-12-20 23:31:42
【问题描述】:

我有一系列 youtube 播放列表,我从中检索了图片 URL。

每张图片的网址是: http://img.youtube.com/vi/videoID/sddefault.jpg

我正在尝试批量下载每个图像,但将每个图像重命名为 videoID.jpg。

我有检索每个图像的代码,但我不知道如何下载它们。有人可以帮忙吗?

//grab all the playlist xml files in folder
foreach(glob('playlist/xml/files/*.*') as $filename)
{
    $youtube_feed = simplexml_load_file($filename);
    foreach ( $youtube_feed->entry as $entry )
    {
        $title = $entry->title;
        $media = $entry->children('http://search.yahoo.com/mrss/');
        $attrs = $media->group->player->attributes();
        $url =  str_replace("&feature=youtube_gdata_player", "", $attrs['url']); 
        $videoID = str_replace("http://www.youtube.com/watch?v=", "", $url);

        echo $videoID . "<br />";

    }
}   

【问题讨论】:

标签: php youtube download batch-processing


【解决方案1】:

使用 $image_content = file_get_contents($url) 从 url 读取图像并使用 file_put_contents($file, $img_content) 将其写入文件。 p>

** 如果这不起作用,请使用 CURL 下载图像。
** 如果写入文件不起作用,则使用 fopen() 将图像写入二进制模式。

【讨论】:

    【解决方案2】:

    使用CURL下载并使用file_put_contents将文件保存到磁盘,功能帮助:

    function gzipdecode( $data, &$filename = '', &$error = '', $maxlength = null ) {
      $len = strlen( $data );
      if ( $len < 18 || strcmp( substr( $data, 0, 2 ), "\x1f\x8b" ) ) {
        $error = "Not in GZIP format.";
        return $data;
      }
      $method = ord( substr( $data, 2, 1 ) );
      $flags  = ord( substr( $data, 3, 1 ) );
      if ( $flags & 31 != $flags ) {
        $error = "Reserved bits not allowed.";
        return $data;
      }
      $mtime = unpack( "V", substr( $data, 4, 4 ) );
      $mtime = $mtime[1];
      $xfl   = substr( $data, 8, 1 );
      $os      =  substr( $data, 8, 1 );
      $headerlen = 10;
      $extralen  = 0;
      $extra     = "";
      if ( $flags & 4 ) {
        if ( $len - $headerlen - 2 < 8 ) {
          return $data;
        }
        $extralen = unpack( "v", substr( $data, 8, 2 ) );
        $extralen = $extralen[1];
        if ( $len - $headerlen - 2 - $extralen < 8 ) {
          return $data;
        }
        $extra = substr( $data, 10, $extralen );
        $headerlen += 2 + $extralen;
      }
      $filenamelen = 0;
      $filename = "";
      if ( $flags & 8 ) {
        if ( $len - $headerlen - 1 < 8 ) {
          return $data;
        }
        $filenamelen = strpos( substr( $data, $headerlen ), chr( 0 ) );
        if ( $filenamelen === false || $len - $headerlen - $filenamelen - 1 < 8 ) {
          return $data;
        }
        $filename = substr( $data, $headerlen, $filenamelen );
        $headerlen += $filenamelen + 1;
      }
      $commentlen = 0;
      $comment  = "";
      if ( $flags & 16 ) {
        if ( $len - $headerlen - 1 < 8 ) {
          return $data;
        }
        $commentlen = strpos( substr( $data, $headerlen ), chr( 0 ) );
        if ( $commentlen === false || $len - $headerlen - $commentlen - 1 < 8 ) {
          return $data;
        }
        $comment = substr( $data, $headerlen, $commentlen );
        $headerlen += $commentlen + 1;
      }
      $headercrc = "";
      if ( $flags & 2 ) {
        if ( $len - $headerlen - 2 < 8 ) {
          return $data;
        }
        $calccrc   = crc32( substr( $data, 0, $headerlen ) ) & 0xffff;
        $headercrc = unpack( "v", substr( $data, $headerlen, 2 ) );
        $headercrc = $headercrc[1];
        if ( $headercrc != $calccrc ) {
          $error = "Header checksum failed.";
          return $data;
        }
        $headerlen += 2;
      }
      $datacrc = unpack( "V", substr( $data, -8, 4 ) );
      $datacrc = sprintf( '%u', $datacrc[1] & 0xFFFFFFFF );
      $isize   = unpack( "V", substr( $data, -4 ) );
      $isize   = $isize[1];
      $bodylen = $len - $headerlen - 8;
      if ( $bodylen < 1 ) {
        return $data;
      }
      $body = substr( $data, $headerlen, $bodylen );
      $data = "";
      if ( $bodylen > 0 ) {
        switch ( $method ) {
          case 8:
          $data = gzinflate( $body, $maxlength );
          break;
          default:
          $error = "Unknown compression method.";
          return $data;
        }
      }
      $crc   = sprintf( "%u", crc32( $data ) );
      $crcOK = $crc == $datacrc;
      $lenOK = $isize == strlen( $data );
      if ( !$lenOK || !$crcOK ) {
        $error = ( $lenOK ? '' : 'Length check FAILED. ' ) . ( $crcOK ? '' : 'Checksum FAILED.' );
        return $data;
      }
      return $data;
    }
    
    function curl_get( $url ) {
      $curl_init = curl_init();
      curl_setopt( $curl_init, CURLOPT_CONNECTTIMEOUT, 10 );
      if ( ini_get( 'open_basedir' ) == '' && ( ini_get( 'safe_mode' ) === false || ini_get( 'safe_mode' ) === '' || ini_get( 'safe_mode' ) === 'Off' ) ) {
        curl_setopt( $curl_init, CURLOPT_FOLLOWLOCATION, true );
      } else {
        curl_setopt( $curl_init, CURLOPT_FOLLOWLOCATION, false );
      }
      curl_setopt( $curl_init, CURLOPT_HEADER, false );
      curl_setopt( $curl_init, CURLOPT_HTTPGET, true );
      curl_setopt( $curl_init, CURLOPT_POST, false );
      curl_setopt( $curl_init, CURLOPT_RETURNTRANSFER, true );
      curl_setopt( $curl_init, CURLOPT_SSL_VERIFYHOST, false );
      curl_setopt( $curl_init, CURLOPT_SSL_VERIFYPEER, false );
      curl_setopt( $curl_init, CURLOPT_URL, $url );
      curl_setopt( $curl_init, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36' );
      curl_setopt( $curl_init, CURLOPT_VERBOSE, true );
      $contents = curl_exec( $curl_init );
      if ( function_exists( 'gzipdecode' ) ) {
        $contents = gzipdecode( $contents );
      }
      curl_close( $curl_init );
      return $contents;
    }
    

    如何使用该功能:

    $url_image   = 'http://img.youtube.com/vi/' . $videoID . '/sddefault.jpg';
    $imgcontents = ( curl_get( $url_image ) );
    file_put_contents( $videoID . '.jpg', $imgcontents );
    

    【讨论】:

      【解决方案3】:

      试试这个简单的代码

      <?php
      
          save_video_thumb('http://www.youtube.com/watch?v=zsYjsgm4Psg');
      
          function save_video_thumb($url){
              $parts = parse_url($url);
              parse_str($parts['query'], $query);
              $id= $query['v'];
      
              //$image_url = "http://img.youtube.com/vi/$id/default.jpg";
              $image_url = "http://img.youtube.com/vi/$id/hqdefault.jpg";
              //$image_url = "http://img.youtube.com/vi/$id/mqdefault.jpg";
              //$image_url = "http://img.youtube.com/vi/$id/sddefault.jpg";
              //$image_url = "http://img.youtube.com/vi/$id/maxresdefault.jpg";
      
      
              $img = file_get_contents($image_url);
              $fp = fopen("$id.jpg", 'w');
              fwrite($fp, $img);
              fclose($fp);
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 1970-01-01
        • 2020-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多