0

I have a series of youtube playlists that I have retrieved the image URL's from.

The URL of each image is: http://img.youtube.com/vi/videoID/sddefault.jpg

I am trying to batch download each image but rename each image to videoID.jpg.

I have the code to retrieve each image but I can't figure out how to download them. Can anyone help?

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

    }
}   
Aacini
  • 65,180
  • 12
  • 72
  • 108
bryan
  • 8,879
  • 18
  • 83
  • 166

3 Answers3

0

use $image_content = file_get_contents($url) for image read from url and use file_put_contents($file, $img_content) to write it into a file.

** If this doesn't work, then use CURL to download images.
** If writing to file doesn't work, then use fopen() to write the image as binary mode.

Sabuj Hassan
  • 38,281
  • 14
  • 75
  • 85
0

Use CURL to download and use file_put_contents to save the file to disk, function to help:

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;
}

How to use the function:

$url_image   = 'http://img.youtube.com/vi/' . $videoID . '/sddefault.jpg';
$imgcontents = ( curl_get( $url_image ) );
file_put_contents( $videoID . '.jpg', $imgcontents );
D3F4ULT
  • 926
  • 1
  • 12
  • 20
0

Try this simple code

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

    }