Intereting Posts
resource (3) типа (результат odbc), в то время как я вставляю данные в ms-доступ, используя php-скрипт Как получить значения полей из «Carbon Fields 2.1.0» WP-plugin? На какой стадии они доступны? Замена обратной косой черты с помощью другого символа в PHP Как исправить ошибку с xml2-config не найден при установке PHP из источников? Изменение времени подключения базы данных laravel Может ли Laravel 4 регистрироваться в базе данных MySQL? Есть ли хорошие учебники для Solr для noob? CodeIgniter Active Record несколько операторов «где» и «или» (PHP5) Извлечение тега заголовка и адреса RSS-канала из HTML с помощью PHP DOM или Regex Алгоритм вычисления ряда будущих дат на основе частоты PDO – FETCH_CLASS – передать результаты в конструктор в качестве параметров если http: // в строке, то оставьте его, иначе, если не добавить его Несколько проектов с использованием одного экземпляра laravel Найдите элемент по id и замените его содержимое на php Как проверить, был ли DomDocument изменен простым и быстрым сравнением?

Получите ссылки на видео с Youtube Channel, извлеките идентификаторы видео из Urls и сохраните их в массиве

Это мой первый вопрос на этом сайте. Я новичок в 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 действительный обратный вызов . Кроме того, ваша функция обратного вызова должна получать хотя бы один аргумент.