2013-12-20 50 views
0

我有一系列YouTube圖片網址的YouTube播放列表。從YouTube上api批量下載圖片

每個圖像的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 />"; 

    } 
} 
+1

試試這個可能性ly http://stackoverflow.com/questions/724391/saving-image-from-php-url-using-php –

+0

這工作完美,謝謝@php_nub_qq – bryan

+0

不要謝謝我,謝謝@vartec':D' –

回答

0

使用$ image_content =的file_get_contents($網址)從URL中讀取和使用file_put_contents($文件,$ img_content)它被寫入到一個文件圖像。

**如果這不起作用,請使用CURL下載圖像。
**如果寫入文件不起作用,則使用fopen()將圖像寫成二進制模式。

0

使用捲曲下載和使用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); 
0

試試這個簡單的代碼

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

    }