Я создаю веб-приложение с помощью YT Api V3, и мне нужно, чтобы мои пользователи вводили URL своего канала YT. Я хочу, чтобы мой PHP-скрипт преобразовал этот URL-адрес в идентификатор канала (я построил весь свой скрипт с помощью методов идентификатора канала, и я не хочу изменять все файлы).

Мой вопрос: как в PHP преобразовать URL-адрес канала YouTube в идентификатор канала YouTube?

2
Marti 15 Сен 2018 в 00:23

2 ответа

Лучший ответ

Стандартный URL-адрес канала YouTube выглядит так: https://www.youtube.com/channel/[channel-id ]

Вы можете использовать такую функцию для анализа идентификатора канала:

function parse_channel_id(string $url): ?string {
        $parsed = parse_url(rtrim($url, '/'));
        if (isset($parsed['path']) && preg_match('/^\/channel\/(([^\/])+?)$/', $parsed['path'], $matches)) {
                return $matches[1];
        }
        throw new Exception("{$url} is not a valid YouTube channel URL");
        return null;
}
2
Koala Yeung 14 Сен 2018 в 21:58

Чтобы развернуть ответ сверху на URL-адрес пользователя YouTube и URL-адрес плейлиста помимо URL-адреса канала YouTube:

Идентификатор канала YouTube:

url: www.youtube.com/channel/[channel_id]

YouTube rss: www.youtube.com/feeds/videos.xml?channel_id=[channel_id]

Имя пользователя YouTube:

url: youtube.com/user/[имя пользователя]

YouTube rss: youtube.com/feeds/videos.xml?user=[имя пользователя]

Плейлист YouTube:

url: youtube.com/playlist?list=[playlist_id]

YouTube rss: youtube.com/feeds/videos.xml?playlist_id=[playlist_id]

Мы можем использовать правильное регулярное выражение для каждого и получить идентификатор или сформировать правильный URL-адрес YouTube rss следующим образом:

 function getYouTubeXMLUrl( $url, $return_id_only = false ) {

    $xml_youtube_url_base = 'https://www.youtube.com/feeds/videos.xml';
    $preg_entities        = [
        'channel_id'  => '\/channel\/(([^\/])+?)$', //match YouTube channel ID from url
        'user'        => '\/user\/(([^\/])+?)$', //match YouTube user from url
        'playlist_id' => '\/playlist\?list=(([^\/])+?)$',  //match YouTube playlist ID from url
    ];


    foreach ( $preg_entities as $key => $preg_entity ) {
        if ( preg_match( '/' . $preg_entity . '/', $url, $matches ) ) {
            if ( isset( $matches[1] ) ) {
                if($return_id_only === false){
                    return $xml_youtube_url_base . '?' . $key . '=' . $matches[1];
                }else{
                    return [
                        'type' => $key,
                        'id' => $matches[1],
                    ];
                }

            }
        }
    }

}

$url     = 'https://www.youtube.com/channel/UCBLAoqCQyz6a0OvwXWzKZag';
$xml_url = getYouTubeXMLUrl($url);

echo $xml_url; //outputs https://www.youtube.com/feeds/videos.xml?channel_id=UCBLAoqCQyz6a0OvwXWzKZag

$entity_id_array =  getYouTubeXMLUrl($url, true);

print_r($entity_id_array); // outputs Array ( [type] => channel_id [id] => UCBLAoqCQyz6a0OvwXWzKZag );
0
Nikola Kirincic 20 Фев 2019 в 14:42