【问题标题】:Youtube channel URL to channel Id (PHP)Youtube 频道 URL 到频道 ID (PHP)
【发布时间】:2019-02-19 16:51:48
【问题描述】:

我正在使用 YT Api V3 制作一个网络应用程序,我需要我的用户输入他们的 YT 频道 URL。我希望我的 PHP 脚本将此 URL 转换为频道 ID(我使用频道 ID 方法构建了所有脚本,我不想修改所有文件)。

我的问题是:在 PHP 中,如何将 YouTube 频道 URL 转换为 YouTube 频道 ID?

【问题讨论】:

    标签: php api youtube youtube-api


    【解决方案1】:

    要将上面的答案扩展到 YouTube 用户 url 和 YouTube 频道 url 之外的播放列表 url:

    YouTube 频道 ID:

    网址: www.youtube.com/channel/[channel_id]

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

    YouTube 用户名:

    网址: youtube.com/user/[用户名]

    YouTube rss: youtube.com/feeds/videos.xml?user=[用户名]

    YouTube 播放列表:

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

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

    我们可以为每个使用适当的正则表达式,并获取 ID 或形成正确的 YouTube rss url,如下所示:

     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 );
    

    【讨论】:

      【解决方案2】:

      标准的 YouTube 频道网址如下所示: https://www.youtube.com/channel/[channel-id]

      您可以使用这样的函数来解析频道 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;
      }
      

      【讨论】:

        猜你喜欢
        • 2018-12-12
        • 2015-10-27
        • 2013-07-29
        • 1970-01-01
        • 2019-12-07
        • 2015-01-25
        • 2019-12-14
        • 2014-01-28
        • 2015-12-03
        相关资源
        最近更新 更多