Youtube Channel video Linkler alın URL'ler video kimlikleri ayıklamak ve bir dizi saklayın

3 Cevap php

Bu, bu sitede benim ilk soru. Ben php yeni ama ben tavsiye izledi ve mümkün olduğunca onunla ellerim pis kazanılmış ettik. Ne yazık ki şimdi ben oluşturmak için çalışıyorum bu basit Youtube uygulaması ile şaşkına biraz değilim.

Ben birkaç ilgili soru orada olduğunu biliyorum, ama henüz benim sorununa kapsamlı bir çözüm bulamadı.

Her neyse, ne yapmaya çalışıyorum, bir youtube kanalı videoları adresler almak video kimliği ayıklamak ve ben o zaman biraz serin istemci tarafı şeyler için bir javascript işlevi kapalı geçebilir bir dizi oluşturmaktır.

İşte benim kod şimdiye kadar. Benim sorun yöntemleri içinde ve dışında dizeleri ve değişkenler vs Dizilere ilgilidir eminim. Her durumda, benim array_map fonksiyonu çalışmıyor ve showFullFeed () işlevi yerine sadece bağlantıların dizinin bir değer döndürüyor.

Herhangi bir yardım çok appreaciated edilir. Şerefe

 

class ChannelFeed {


function __construct($username)
{
 $this->username=$username;
 $this->feedUrl=$url='http://gdata.youtube.com/feeds/api/users/'.$username.'/favorites';
 $this->feed=simplexml_load_file($url);
}

 public function getYTid() {

  $ytURL = $this->feed->entry->link['href'];

  $ytvIDlen = 11; // This is the length of YouTube's video IDs

  // The ID string starts after "v=", which is usually right after 
  // "youtube.com/watch?" in the URL
  $idStarts = strpos($ytURL, "?v=");

  // In case the "v=" is NOT right after the "?" (not likely, but I like to keep my 
  // bases covered), it will be after an "&":
  if($idStarts === FALSE)
   $idStarts = strpos($ytURL, "&v=");
  // If still FALSE, URL doesn't have a vid ID
  if($idStarts === FALSE)
   die("YouTube video ID not found. Please double-check your URL.");

  // Offset the start location to match the beginning of the ID string
  $idStarts +=3;

  // Get the ID string and return it
  $ytvID = substr($ytURL, $idStarts, $ytvIDlen);    
 return $ytvID;   
}
public function showFullFeed()
{ 
 foreach($this->feed->entry as $video){
 return $vidarray[] = $video->link['href'];
 }
}
 };
$youtube = new ChannelFeed('username');
$vids = $youtube->showFullFeed();
$vidIDs = array_map(getYTid(),$vids);

?>

3 Cevap

Bu çalışıyor. Ben değil Sık kanalı tarafından yüklenen videoları akışı değişti, bu yüzden o geri değiştirmek isteyebilirsiniz.

İlk olarak, youtube fonksiyonları için kod, ben ayrı bir php dosyasında bu koymak ve sadece şeyler tidier tutmak, onu ithal.

<?php
  class ChannelFeed
  {
    function __construct( $username )
    {
        $this->username=$username;
        $this->feedUrl=$url='http://gdata.youtube.com/feeds/api/users/'.$username.'/uploads';
        $this->feed=simplexml_load_file($url);
    }

    public function showFullFeed()
    { 
        $vidarray = array();

        foreach($this->feed->entry as $video)
        {
            $vidURL = (string)$video->link['href'];
            $vidarray[] = $vidURL;
        }

        return $vidarray;
}
}

function getYouTubeID($vidURL)
{
    $ytvIDlen = 11; // This is the length of YouTube's video IDs

    // The ID string starts after "v=", which is usually right after 
    // "youtube.com/watch?" in the URL
    $idStarts = strpos($vidURL, "?v=");

    // In case the "v=" is NOT right after the "?" (not likely, but I like to keep my 
    // bases covered), it will be after an "&":
    if($idStarts === FALSE)
        $idStarts = strpos($vidURL, "&v=");

    // If still FALSE, URL doesn't have a vid ID
    if($idStarts === FALSE)
        die("YouTube video ID not found. Please double-check your URL.");

    // Offset the start location to match the beginning of the ID string
    $idStarts +=3;

    // Get the ID string and return it
    $ytvID = substr($vidURL, $idStarts, $ytvIDlen);    

    return $ytvID;   
}
?>

Sonraki çağırır ana dosyadaki kodu

require_once('youtube_channelfeed.php');

$youtube = new ChannelFeed('username');
$vids = $youtube->showFullFeed();
$vidIDs = array_map("getYouTubeID",$vids);

Bu kimlikleri alır ve dizi haritası işlevini kullanarak bir dizide saklar.

Kodu gönderme için teşekkürler, ben bu ne yapacak bir şey arıyordum, bu yüzden bana çok yardımcı oldu.

daer sadece değiştirin

public function showFullFeed()
{ 
 foreach($this->feed->entry as $video){
 return $vidarray[] = $video->link['href'];
 }
}

karşı

public function showFullFeed()
{ 
 foreach($this->feed->entry as $video){
  $vidarray[] = $video->link['href'];
 }
      return $vidarray ;
}

Orada başka sorunlar muhtemelen, ama array_map geçerli bir callback vermek değildir. Ayrıca, geri arama fonksiyonu en az bir argüman almalıdır.