我正在尝试创建一个工具,可以从视频中获取所有评论并检索发布评论的所有用户,以便更轻松地提供赠品
现在我正在使用Youtube API
gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?v=2&alt=json&start-index=1
我只是制作一个简单的循环,每次递增起始索引(1,22,44,66等)以获得所有评论
问题是我现在对一个视频有超过1000条评论,所以这不适用于例如: gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?v=2&alt=json&start-index=1100
有没有办法让所有在Youtube视频上发表评论的用户? 我在这个工作了几个小时,以了解Youtube api如何工作,但这个问题使整个事情变得无用
我是否应该使用curl或其他方式来获取这些页面上的内容: youtube.com/all_comments?threaded=1&v=VIDEO_ID&page=x
答案 0 :(得分:3)
嗯,有几种方法。首先是sandracires链接你发布。如果您查看他们的javascript然后将其分开(或只是观察fiddler中的流量),它将访问其网站上的comments.php页面并传入页码。网址格式为:http://www.sandracires.com/en/client/youtube/comments.php?v=videoID&page=1。 但是,我不确定这是否合法,所以我不推荐它。
我在Youtube上使用了Fiddler,这就是我想出的。
您可以删除源参数和其他参数。
我不完全确定这些是否都是正确的。我认为 p是页码,这样您就可以在没有last_comment_id
参数的情况下提取评论(这对我来说就像这样)。通过解析生成的XML并找到last_comment_id
,我也确实使?lc=LASTCOMMENTIDHERE
参数工作(其中p保持不变)。
似乎一次最多500个。是的,我尝试过501。正如我所说,数据以XML格式返回。每条评论都是这样的:
<div class="content clearfix">
<p class="metadata">
<span class="author ">
<a href="/user/mindmonkey00" class="g-hovercard yt-uix-sessionlink yt-user-name " data-sessionlink="ei=-LFcUvCPNsn-sAf7jIGgAg" dir="ltr" data-ytid="UCAufDxGRQh_LlF5tD6StNtw" data-name="">mindmonkey00</a>
</span>
<span class="time" dir="ltr">
<a dir="ltr" href="http://www.youtube.com/comment?lc=teKFzQ8cbHNkP8a89kiIEtWqiTRiAkKtSnvEHB_hXG4">
3 weeks ago
</a>
</span>
</p>
<div class="comment-text" dir="ltr">
<p>You didn't answer my question?</p>
</div>
<div class="comment-actions">
<button onclick=";return false;" type="button" class="start comment-action create-channel-lightbox yt-uix-button yt-uix-button-link yt-uix-button-size-default" data-upsell="comment" role="button"><span class="yt-uix-button-content">Reply </span></button>
<span class="separator">·</span>
<span ><button title="Vote Up" onclick=";return false;" type="button" class="start comment-action-vote-up comment-action yt-uix-button yt-uix-button-link yt-uix-button-size-default yt-uix-button-has-icon yt-uix-tooltip yt-uix-button-empty" data-tooltip-show-delay="300" data-action="vote-up" role="button"><span class="yt-uix-button-icon-wrapper"><img class="yt-uix-button-icon yt-uix-button-icon-watch-comment-vote-up" src="//s.ytimg.com/yts/img/pixel-vfl3z5WfW.gif" alt="Vote Up" title=""></span></button></span><span ><button title="Vote Down" onclick=";return false;" type="button" class="end comment-action-vote-down comment-action yt-uix-button yt-uix-button-link yt-uix-button-size-default yt-uix-button-has-icon yt-uix-tooltip yt-uix-button-empty" data-tooltip-show-delay="300" data-action="vote-down" role="button"><span class="yt-uix-button-icon-wrapper"><img class="yt-uix-button-icon yt-uix-button-icon-watch-comment-vote-down" src="//s.ytimg.com/yts/img/pixel-vfl3z5WfW.gif" alt="Vote Down" title=""></span></button></span>
</div>
</div>
请记住,通过尝试绕过Youtube的API规则,您可能不得不每隔一段时间重做一次此过程。他们可能会更改网址。