如何在2015年4月20日之后获得Youtube频道RSS Feed(没有v3 API)?

时间:2015-04-20 15:45:20

标签: php youtube rss

既然API v2已经消失,那么在没有v3 API的情况下,如何获得频道的简单RSS提要?如果目标是提要阅读器,我可以使用Yahoo Pipes或任何比创建v3 API应用程序更简单的解决方法。我只需要一个RSS提要。到目前为止它已公开发布,现在可以停止任何一分钟(我认为)。那么为什么不再使用API​​密钥就可以访问它。

16 个答案:

答案 0 :(得分:97)

RSS阅读器部分https://support.google.com/youtube/answer/6098135?hl=en,您可以选择将订阅导出到OPML文件。然后,查看OPML的内容,您可以提取提要,每个提要的结构是:

https://www.youtube.com/feeds/videos.xml?channel_id=XXXX

因此,如果您知道频道ID,则可以从此结构生成新的Feed。这种饲料没有得到" https://youtube.com/devicesupport"错误,所以我希望他们继续工作。

答案 1 :(得分:57)

你可以得到这样的信息:

https://www.youtube.com/feeds/videos.xml?channel_id=CHANNELID
https://www.youtube.com/feeds/videos.xml?user=USERNAME
https://www.youtube.com/feeds/videos.xml?playlist_id=YOUR_YOUTUBE_PLAYLIST_NUMBER

但是不再支持以前支持的JSON格式(带有附加参数&alt=JSON)。

此外,您可以通过developer console申请公开访问YouTube视频的API密钥,并以JSON格式获取YouTube视频,播放列表,如下所示:

- Get Channels: 
  https://www.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails&forUsername={YOUR_USER_NAME}&key={YOUR_API_KEY}
- Get Playlists: 
  https://www.googleapis.com/youtube/v3/playlists?part=snippet%2CcontentDetails&channelId={YOUR_CHANNEL_ID}&key={YOUR_API_KEY}
- Get Playlist Videos: 
  https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails%2Cstatus&playlistId={YOUR_PLAYLIST_ID}&key={YOUR_API_KEY}

来自YouTube v3 docs的更多信息。

答案 2 :(得分:10)

在你的管中,点击左侧窗格上的订阅。这将打开页面中心的所有订阅。向下滚动,您将找到“导出到RSS阅读器”按钮,该按钮会生成所有订阅的xml文件。我已经完成了这个并将其添加到我喜欢的RSS阅读器中。

答案 3 :(得分:6)

如果你检查任何Youtube频道页面,在<head>内你会找到一个这样的rss元节点:

<link rel="alternate" 
      type="application/rss+xml" title="RSS"     
      href="https://www.youtube.com/feeds/videos.xml?channel_id=UCn8zNIfYAQNdrFRrr8oibKw">

这应该为您提供所需的数据。

答案 4 :(得分:4)

通过在YouTube频道页面的源代码中搜索属性data-channel-external-id来获取频道ID。 (感谢helq)。

此代码将从Feed中获取所有视频标题和ID并将其转储到数组中:

$channel_id = 'XXX'; // put the channel id here
$youtube = file_get_contents('https://www.youtube.com/feeds/videos.xml?channel_id='.$channel_id);
$xml = simplexml_load_string($youtube, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$youtube = json_decode($json, true);
$yt_vids = array();
$count = 0;
foreach ($youtube['entry'] as $k => $v) {
    $yt_vids[$count]['id'] = str_replace('http://www.youtube.com/watch?v=', '', $v['link']['@attributes']['href']);
    $yt_vids[$count]['title'] = $v['title'];
    $count++;
}
print_r($yt_vids);

答案 5 :(得分:2)

我创建了一个小的PHP脚本,用于抓取视频链接的Youtube网址,然后将其作为原子输出输出:https://gist.github.com/Skalman/801436d9693ff03bc4ce

https://www.youtube.com/user/scishow/videos等网址。

注意事项:

  • 该工具不会刮取日期
  • 播放列表不会包含超过100个视频
  • 播放列表包含“全部播放”链接
  • 仅为频道(例如非播放列表)正确设置作者
  • 如果你过多地使用它,Youtube可能会阻止你(但希望限制足够高)
  • 可能还有几个......

答案 6 :(得分:2)

还存在RSS-Bridge女巫可以从Twitter,Google +,Flickr,Youtube,Identi.ca等许多服务中提取RSS源。

来源:https://github.com/sebsauvage/rss-bridge

演示服务器:https://bridge.suumitsu.eu/

答案 7 :(得分:2)

尝试使用此网址:       https://www.youtube.com/feeds/videos.xml?user=USERNAME

对我来说很好。

答案 8 :(得分:2)

来自我的博文:http://tcodesblog.blogspot.com/search/label/howtofindyouryoutubechannelfeed

<小时/>

如何找到YOUTUBE CHANNEL FEED

在过去,它很容易(2009年),但现在很难找到它(2012年至今)。这是一种通过YouTube频道查找新Feed的快捷方式。请记住正确地遵循列表!

  1. 首先找到频道ID :您可以通过转到信息中心内的YouTube频道来实现此目的

  2. 复制频道ID :在信息中心内访问您的YouTube频道时,可以找到频道ID

  3. 复制频道ID :复制频道ID 并将频道ID channelidgoeshere >:https://www.youtube.com/feeds/videos.xml?channel_id=channelidgoeshere

  4. 复制整个YouTube频道Feed并创建简化Feed:您可以在FeedBurner中http://www.feedburner.com/创建一个较短的Feed链接(需要Google帐户。免费使用。),这是也是谷歌的一部分。创建一个新的Feed(选择我是一个Podcaster!,以查看您的视频是否显示在Feed中,并使您的Feed与其他Feed阅读器兼容,例如:Digg Reader,Apple iPhone Apple News App ,Apple iPhone Podcasts App,Feedly等) - 或 - 通过复制整个YouTube频道Feed编辑现有的,然后点击保存Feed详细信息正常

  5. 您的YouTube频道Feed现已正常运行,您的视频可直接在FeedBurner Feed上的Feed文件中显示。我在https://www.youtube.com/feeds/videos.xml?channel_id=UCvFR6YxwnYfLt_QqRFk_r3g&amp;在FeedBurner中为http://feeds.feedburner.com/youtube/warrenwoodhouse,我的视频仅以文字格式显示,例如,因为我需要更新我的视频以显示我的视频。您可以在FeedBurner中更改不同的设置并执行其他操作,因此它值得一试,因为它免费且易于使用。我强烈建议您使用FeedBurner或其他Feed创建服务,但FeedBurner是您最好的选择,因为它还包括交叉订阅服务机制(USM - 通用订阅机制),这意味着您的Feed可以从任何兼容设备上读取,例如计算机,手机(安装了正确的应用程序),通过较旧的Web浏览器(例如支持Web Slices&amp; RSS / Atom / XML Feeds的Internet Explorer)。

  6. 您的Feed也可以在Apple iPhone Apple News App&amp;如果您已将设置正确设置为USM(通用订阅机制),Apple iPhone,Apple iPod Touch和Apple iPad上的Apple iPhone Podcast应用程序。一旦生效,您的Feed可以通过不同的服务和设备进行查看。

    您在FeedBurner上的Feed可以创建电子邮件订阅,标题动画制作工具(向您展示最新帖子的链接)以及订阅者数量,Chiclets和其他很酷的内容。

    我希望这个答案证明是有用的,如果你想看一些更酷的令人敬畏的编码实践,请随时查看我的T-Codes网站http://warrenwoodhouse.webs.com/codes了解更多内容。

答案 9 :(得分:1)

我在这里创建了一个Yahoo Pipes示例 http://pipes.yahoo.com/pipes/pipe.info?_id=6eeff0110a81f2ab94e8472620770b11

您可以通过按“运行管道”来运行此管道而不填充API密钥。但是,克隆时,您必须提供自己的API密钥和渠道ID(可以通过渠道API获取)。想要通过YouTube用户名自动获取channelId,但不容易管道。

答案 10 :(得分:1)

我制作了一个批处理脚本,用于创建新订阅视频的RSS源。您不需要API密钥。该脚本使用2个外部工具:YouTube-DL和Xidel。

无论如何,请阅读以下主题,并转到98后下载脚本: http://code.google.com/p/gdata-issues/issues/detail?id=3946#c98

我希望有人将其编码为php,python,javascript,powershell或bash。

答案 11 :(得分:1)

我认为youtube响应有一些变化,所以我做了一些更改,以便使用Curl从rss feed获取频道ID。

$channel_id = 'XXXXXXXX'; // put the channel id here

//using curl
$url = 'https://www.youtube.com/feeds/videos.xml?channel_id='.$channel_id.'&orderby=published';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$response  = curl_exec($ch);
curl_close($ch);

$response=simplexml_load_string($response);
$json = json_encode($response);
$youtube= json_decode($json, true);

$count = 0;
if(isset($youtube['entry']['0']) && $youtube['entry']['0']!=array())
{
    foreach ($youtube['entry'] as $k => $v) {
        $yt_vids[$count]['id'] = str_replace('http://www.youtube.com/watch?v=', '', $v['link']['@attributes']['href']);
        $yt_vids[$count]['title'] = $v['title'];
        $count++;
    }
}
else
{
    $yt_vids[$count]['id']=str_replace('http://www.youtube.com/watch?v=', '', $youtube['entry']['link']['@attributes']['href']);
    $yt_vids[$count]['title']=$youtube['title'];
}
echo "<pre>";
print_r($yt_vids);

答案 12 :(得分:1)

我使用以下代码将YouTube Feed与wordpress custom field "ACF plugin"FancyBox

集成
    <?php  
    $channel_id = get_field('youtube_chanel_id'); //ACF text field
    if ($channel_id){ // if channel_id not empty -- START
    $youtube = file_get_contents('https://www.youtube.com/feeds/videos.xml?channel_id='.$channel_id);
    $xml = simplexml_load_string($youtube, "SimpleXMLElement", LIBXML_NOCDATA);
    $json = json_encode($xml);
    $youtube = json_decode($json, true);
        echo'<div class="col-md-12 youtube-videos-feed">';  
        foreach ($youtube['entry'] as $k => $v) {
            $id = str_replace(array("yt:video:"), "", $v['id']); // Remove "yt:video:" from ID value
            //$date = $v['updated']; // video updated date (disabled for now)
            $title = $v['title']; // video title
            echo '<a class="with-video" href="https://www.youtube.com/watch?v=',$id,'&autoplay=1&rel=0&controls=0&showinfo=0&modestbranding=0" data-fancybox="videos"  data-caption="',$title,'" title="',$title,'" >
                <div class="col-md-3 main-image post-image img-fancy">
                    <img src="https://img.youtube.com/vi/',$id,'/0.jpg" alt="',$title,'" >
                </div>
            </a>';
        }
        echo'</div>';
    } // if channel_id not empty -- END
 ?>

答案 13 :(得分:0)

我找到了名为Youtube RSS-ify的Chrome扩展程序,它在视频,频道和导航页面上注入了RSS图标。这正是我所寻找的。

Youtube RSS-ify extension screenshot

图标如下所示:

Youtube RSS-ify RSS icon

答案 14 :(得分:-1)

我建议使用优秀的rss解析器。其中许多都可用,但您可以尝试http://simplepie.org/,这是我个人项目中最好的之一。

通过一些例子很好地记录了它。

使用示例

注意:使用YouTube频道学院幽默,您可以从频道页面本身获取

<?php
include_once('../autoloader.php');
// Parse it
$feed = new SimplePie();
$feed->set_feed_url('https://www.youtube.com/feeds/videos.xml?channel_id=UCPDXXXJj9nax0fr0Wfc048g');
$feed->enable_cache(false);
$feed->init();

$items = $feed->get_items();

foreach ($items as $item)
{
    echo $item->get_title() . "\n";
}

var_dump($feed->get_item_quantity());

答案 15 :(得分:-1)

获取频道ID的最简单方法:

打开订阅管理器(左侧面板,在订阅下方),然后单击所需的用户。

网址将采用以下形式: https://www.youtube.com/channel/XXXXXXXXXXXXXXXXX

所以Feed网址应为:

https://www.youtube.com/feeds/videos.xml?channel_id=XXXXXXXXXXXXXXXXX

注意:更好地使用频道ID而不是用户名,因为用户名可能会发生变化。