2

これは、このサイトでの最初の質問です。私はphpを初めて使用しますが、アドバイスに従い、可能な限り不潔なものを手に入れました。残念ながら、私は作成しようとしているこの単純な Youtube アプリに少し困惑しています。

関連する質問がいくつかあることは知っていますが、私の問題に対する包括的な解決策はまだ見つかっていません。

とにかく、私がやろうとしているのは、YouTube チャンネルの動画の URL を取得し、動画 ID を抽出して配列を作成し、それを JavaScript 関数に渡して、いくつかのクールなクライアント側のものに渡すことです。

これまでの私のコードは次のとおりです。私の問題は、メソッド内外の配列と文字列および変数に関連していると確信しています。いずれにせよ、私の array_map 関数は機能せず、showFullFeed() 関数はリンクの配列ではなく 1 つの値のみを返します。

どんな助けでも大歓迎です。乾杯

 

クラスチャンネルフィード{

関数 __construct($ユーザー名) { $this->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; // これは YouTube の動画 ID の長さです

// ID 文字列は "v=" の後に始まります。これは通常は直後です // "youtube.com/watch?" URLで $idStarts = strpos($ytURL, "?v=");

// 「?」の直後に「v=」がない場合 (可能性は低いですが、 // ベースがカバーされます)、「&」の後にあります: if($idStarts === FALSE) $idStarts = strpos($ytURL, "&v="); // それでも FALSE の場合、URL には vid ID がありません if($idStarts === FALSE) die("YouTube 動画 ID が見つかりません。URL を再確認してください。");

// ID 文字列の先頭に一致するように開始位置をオフセットします $idStarts +=3;

// ID 文字列を取得して返す $ytvID = substr($ytURL, $idStarts, $ytvIDlen);
$ytvID を返します。
} パブリック関数 showFullFeed() { foreach($this->feed->entry as $video){ return $vidarray[] = $video->link['href']; } } }; $youtube = new ChannelFeed('ユーザー名'); $vids = $youtube->showFullFeed(); $vidIDs = array_map(getYTid(),$vids);

?>

4

3 に答える 3

6

これは機能します。ストリームをお気に入りからチャンネルによってアップロードされたビデオに変更したわけではないので、元に戻すことをお勧めします。

まず、YouTube 関数のコードです。これを別の php ファイルに入れてインポ​​ートしました。

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

次はそれを呼び出すメインファイルのコードです

require_once('youtube_channelfeed.php');

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

これにより、ID が取得され、配列マップ関数を使用して配列に格納されます。

コードを投稿していただきありがとうございます。これが何をするかを探していたので、とても助かりました。

于 2011-10-03T14:05:31.040 に答える
1

ただ交換するだけ

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

public function showFullFeed()
{ 
 foreach($this->feed->entry as $video){
  $vidarray[] = $video->link['href'];
 }
      return $vidarray ;
}
于 2011-04-21T23:09:42.980 に答える
0

おそらく他にも問題がありますが、array_mapに有効なcallbackを与えていません。また、コールバック関数は少なくとも 1 つの引数を受け取る必要があります。

于 2010-05-17T15:19:22.760 に答える