2012-03-28 2 views
0

В настоящее время я адаптировал код для использования моего сайта, но теперь я хотел бы изменить его формат, но это была более сложная задача, чем ожидалось. Мой код сейчас показывает последнее видео. Но моя цель на данный момент состоит в том, чтобы код отображал видео * thumbnail pic, * описание видео и * общее количество просмотров. Ниже мой код, если вы думаете, что есть лучший способ приблизиться к этому, то я открыт для предложений:PHP: Youtube последний механизм подачи php кода видеоролика

<? 
    error_reporting(E_ALL); 
    $feedURL = 'http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?max-results=20'; 
    $sxml = simplexml_load_file($feedURL); 
    $i = 0; 
    foreach ($sxml->entry as $entry) { 
      $media = $entry->children('media', true); 
      $url = (string)$media->group->player->attributes()->url; 
      $index = strrpos($url, "&"); 
      $url = substr($url, 0, $index); 
      $index = strrpos($url, "watch"); 
      $url = substr($url, 0, $index) . "v/" . substr($url, $index + 8, strlen($url) - ($index + 8)); 
      echo '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="250" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="' . $url . '" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="400" height="250" src="' . $url . '" allowscriptaccess="always" allowfullscreen="true"></embed></object>'; 
      break; 
    } 

>

ответ

1

Добавить

var_dump($entry);exit; 

на первой линии внутри foreach, а затем взгляните на результат и найдите свои уменьшенные изображения. Затем вам нужно следовать по пути, как это было сделано с URL-адресом ($ entry-> children (..) и $ media-> path-> to-> thumbnail)

0

Youtube обновил свои методы встраивания и выход api , поэтому я воспользовался возможностью для обновления скрипта. Возможно, вы можете просто перенести все настройки в основную часть скрипта, но я решил, что я вытащу его, чтобы было легче следовать. Надеюсь, что это помогает:

//SETTINGS 
$channel_name = 'mychannelname';//Be sure to change this to your channel 
$count   = 8;//# of videos you want to show (MAX = 20) 
$em_width  = 420;//width of embeded player 
$em_height  = 315;//height of embeded player 
$wrap_class = 'video';//class name for the div wrapper 

//The output...   
error_reporting(E_ALL); 
$feedURL = 'http://gdata.youtube.com/feeds/api/users/'.$channel_name.'/uploads?max-results=20'; 
$sxml = simplexml_load_file($feedURL); 
$i = 1; 
foreach ($sxml->entry as $entry) { 
    $vidUrl = explode("/", $entry->id); 
    $vidKey = $vidUrl[6]; 
    if ($i <= $count) : 
     echo ' 
       <div class="'.$wrap_class.'"> 
        <iframe width="'.$em_width.'" height="'.$em_height.'" src="http://www.youtube.com/embed/'.$vidKey.'" frameborder="0" allowfullscreen></iframe> 
       </div> 
     '; 
     endif; 
     $i++; 
} 
3

Чтобы построить на работе Криса Willenbrock, для того, чтобы упростить код немного и сохранить себя некоторые накладные расходы (мысленные дополнительные записи 20- $ подсчитывать через провод, дополнительный взрываются на 20- $ кола записи, которые не будут отображаться в любом случае):

//SETTINGS 
$channel_name = 'mychannelname';//Be sure to change this to your channel 
$count   = 8;//# of videos you want to show (MAX = 20) 
$em_width  = 420;//width of embedded player 
$em_height  = 315;//height of embedded player 
$wrap_class = 'video';//class name for the div wrapper 

//The output... 
$sxml = simplexml_load_file("http://gdata.youtube.com/feeds/api/users/$channel_name/uploads?max-results=$count"); 
foreach ($sxml->entry as $entry) { 
    $vidKey = substr(strrchr($entry->id,'/'),1); 
    echo " 
    <div class=\"$wrap_class\"> 
     <iframe width=\"$em_width\" height=\"$em_height\" src=\"http://www.youtube.com/embed/$vidKey\" frameborder=\"0\" allowfullscreen></iframe> 
    </div> 
    "; 
} 

Я не люблю работать с XML и избежать его там, где я могу, так вот еще один вариант, который использует JSON. Также обратите внимание, что, перейдя на v2 API здесь, мы получаем гораздо более чистый доступ к видео-ключу, а также другие метаданные, которые запрашивал оригинальный плакат:

//The output... 
$api_v2 = "http://gdata.youtube.com/feeds/api/users/$channel_name/uploads?max-results=$count&v=2"; 
foreach (json_decode(file_get_contents("$api_v2&alt=json"))->feed->entry as $entry) { 
    // meta information 
    $title = $entry->title->{'$t'}; 
    $description = $entry->{'media$group'}->{'media$description'}->{'$t'}; 
    $views = $entry->{'yt$statistics'}->viewCount;  
    $thumbnails = $entry->{'media$group'}->{'media$thumbnail'}; 
    // few different thumbnail image choice here: 
    // 0 => default image, low res - "default" 
    // 1 => default image, medium res - "mqdefault" 
    // 2 => default image, higher res - "hqdefault" 
    // 3 => first frame of vid, low res - "start" 
    // 4 => middle frame, low res - "middle" 
    // 5 => last frame, low res - "end" 
    $thumb_img = $thumbnails[1]; // I'll go with default, medium res 

    echo " 
    <!-- meta information output - format to taste --> 
    <div> 
    <img src='$thumb_img->url' style='float: left; margin-right: 10px;' width='$thumb_img->width' height='$thumb_img->height' alt='{$thumb_img->{'yt$name'}}'> 
    <b>Title:</b> $title<br><br> 
    <b>Description:</b> $description<br><br> 
    <b>Views:</b> $views 
    <br style='clear: left;'> 
    </div> 

    <div class=\"$wrap_class\"> 
     <iframe width=\"$em_width\" height=\"$em_height\" src=\"{$entry->content->src}\" frameborder=\"0\" allowfullscreen></iframe> 
    </div> 
    "; 
} 
Смежные вопросы