我收到以下错误,我想在youtube视频上发布所有评论。
所以基本上我传递了视频ID,我希望获得与该视频相关的所有评论
Google.Apis.Requests.RequestError
许可不足[403]错误[消息[权限不足]位置[ - ]原因[不足权限]域[全局]]
这是我的代码:
protected void btnGetVideoDesc_Click(object sender, EventArgs e)
{
string videoId = txtVideoID.Text;
YoutubeVideo video = new YoutubeVideo(videoId);
lblTitle.Text = video.title;
lblPublishedDate.Text = video.publishdate.ToShortDateString();
}
public class YoutubeVideo
{
public string id, title, description ;
public DateTime publishdate;
public YoutubeVideo(string id)
{
this.id = id;
YoutubeAPI.GetVideoInfo(this);
}
}
public class YoutubeAPI
{
private static YouTubeService ytService = Auth();
private static YouTubeService Auth()
{
UserCredential creds;
var service = new YouTubeService();
try
{
using (var stream = new FileStream(@"C:\v-mmarat\Project\EMEA_Development\YoutubeWebCrawling\YoutubeWebCrawling\youtube_client_secret.json", FileMode.Open, FileAccess.Read))
{
creds = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeReadonly }, "user", CancellationToken.None,
new FileDataStore("YoutubeAPI")
).Result;
}
service = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = creds,
ApplicationName = "YoutubeAPI",
ApiKey = "My_API_Key"
});
}
catch (Exception e)
{ }
return service;
}
public static void GetVideoInfo(YoutubeVideo video)
{
try
{
//This code work perfectly
var videoRequest = ytService.Videos.List("snippet");
videoRequest.Id = video.id;
var response = videoRequest.Execute();
if (response.Items.Count > 0)
{
video.title = response.Items[0].Snippet.Title;
video.description = response.Items[0].Snippet.Description;
video.publishdate = response.Items[0].Snippet.PublishedAt.Value;
}
else
{
//error
}
var CommentRequest = ytService.Comments.List("snippet");
videoRequest.Id = video.id;
//Getting error at this line after CommentRequest.Execute();
var Commentresponse = CommentRequest.Execute();
if (Commentresponse.Items.Count > 0)
{
video.title = Commentresponse.Items[0].Snippet.ChannelId;
video.description = Commentresponse.Items[0].Snippet.TextDisplay;
video.publishdate = Commentresponse.Items[0].Snippet.PublishedAt.Value;
}
else
{
//error
}
}
catch (Exception e)
{ }
}
答案 0 :(得分:3)
授权更改" 用户"到" 管理员"。
答案 1 :(得分:2)
这是 真的 迟到的回复,但我遇到了类似的问题。我的项目是使用YouTube API将视频上传到帐户,并在代码的单独部分再次使用它来按ID搜索视频以检查其状态。
我的问题是我使用相同的OAuth凭据上传,然后也用于搜索视频。
这是失败的,因为我在上传时已经设置了YouTube范围,这不是搜索视频的正确范围。
我的简单解决方案是通过Google Developer Console创建另一组OAuth凭据(类型为"其他"),下载json文件并使用这些详细信息获取不同的访问令牌搜索我的部分代码。
希望这可以帮助别人。
答案 2 :(得分:0)
我知道这个答案有点晚了,但这就是为我解决的问题。希望它可以帮助别人。
我收到了相同的权限被拒绝错误。将YouTubeService.Scope.YoutubeForceSsl
项添加到范围列表后,我能够提取评论。
此外,您的代码看起来不太合适。您将需要基于VideoId拉出CommentThreads并包含回复(如果您需要)。
您将无法使用评论提取视频评论。
var threadsRequest = Client.CommentThreads.List("snippet,replies");
threadsRequest.VideoId = videoId;
var response = threadsRequest.Execute();
答案 3 :(得分:0)
这里也一样。
通过在“GoogleWebAuthorizationBroker.AuthorizeAsync”中指定“dataStore”参数解决了这个问题。
该服务将一个访问令牌 JSON 文件写入该文件夹。
似乎授权需要存储选项。
另外,当授权成功时,浏览器会跳转到一个 Google 授权 URL,我必须在那里登录并允许我从 API 请求的访问级别。
我之前一直使用 API,但仅用于只读操作。 似乎“操作”的东西(插入、更新、删除、上传)需要更多的资助。