Это мой первый вопрос на этом сайте. Я новичок в php, но я следил за советами и получал мои руки как можно более грязные. К сожалению, теперь я немного в тупике с этим простым приложением Youtube, которое я пытаюсь создать.
Я знаю, что есть несколько связанных вопросов, но я еще не нашел исчерпывающего решения моей проблемы.
Во всяком случае, то, что я пытаюсь сделать, это получить URL-адреса видео в канале YouTube, извлечь идентификатор видео и создать массив, который затем я могу передать в javascript-функцию для некоторых классных клиентских приложений.
Вот мой код до сих пор. Я уверен, что моя проблема связана с массивами и строками и переменными в и из методов. В любом случае моя функция array_map не работает, и функция showFullFeed () возвращает только одно значение вместо массива ссылок.
Любая помощь очень уязвлена. ура
class ChannelFeed {
функция __construct ($ username)
{
$ This-> имя пользователя = $ имя пользователя;
$ this-> feedUrl = $ url = ' http://gdata.youtube.com/feeds/api/users/ '. $ username. '/ favorites';
$ This-> корм = simplexml_load_file ($ URL);
}
public function getYTid () {
$ ytURL = $ this-> feed-> entry-> link ['href'];
$ ytvIDlen = 11; // Это длина идентификаторов видео YouTube.
// Идентификационная строка начинается после «v =», что обычно происходит сразу после
// "youtube.com/watch?" в URL-адресе
$ idStarts = strpos ($ ytURL, "? v =");
// В случае, если «v =» НЕ прав после «?» (вряд ли, но мне нравится держать меня
// основы покрыты), это будет после "&":
if ($ idStarts === FALSE)
$ idStarts = strpos ($ ytURL, "& v =");
// Если все еще FALSE, URL-адрес не имеет идентификатора vid
if ($ idStarts === FALSE)
die («Идентификатор видео YouTube не найден. Пожалуйста, дважды проверьте свой URL.»);
// Смещение начального местоположения в соответствии с началом строки ID
$ idStarts + = 3;
// Получить строку ID и вернуть ее
$ ytvID = substr ($ ytURL, $ idStarts, $ ytvIDlen);
return $ ytvID;
}
публичная функция showFullFeed ()
{
foreach ($ this-> feed-> entry как $ video) {
return $ vidarray [] = $ video-> link ['href'];
}
}
};
$ youtube = новый ChannelFeed ('username');
$ vids = $ youtube-> showFullFeed ();
$ vidIDs = array_map (getYTid (), $ vids);
?>
Это работает. Не я изменил поток из избранных на видео, которые были загружены каналом, поэтому вы можете изменить его.
Во-первых, код для функций 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);
Это получает идентификаторы и сохраняет их в массиве с использованием функции отображения массива.
Спасибо за публикацию кода, я искал что-то, что бы это делал, поэтому он очень помог мне.
daer просто замените
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 ; }
Есть, вероятно, другие проблемы, но вы не даете array_map действительный обратный вызов . Кроме того, ваша функция обратного вызова должна получать хотя бы один аргумент.