2016-01-02 4 views
0

Я использую C# и используя API V3 для YouTube. Я пытаюсь вставить комментарий в видео, однако всякий раз, когда я получаю исключение "{"Object reference not set to an instance of an object."}" Это происходит всякий раз, когда я бегу что-нибудь похожее на приведенный выше код:C# Добавление комментариев с YouTube V3 API

public void AddComment() 
{ 
    CommentThread commentToAdd = new CommentThread(); 
    commentToAdd.Snippet.IsPublic = true; 
    commentToAdd.Snippet.TopLevelComment.Snippet.TextOriginal = "Test"; 
    commentToAdd.Snippet.VideoId = "kc-LBxBcyG8"; 
    commentToAdd.Snippet.TopLevelComment.Snippet.VideoId = "kc-LBxBcyG8"; 
    CommentThreadsResource.InsertRequest ins = JKYouTube.NewYouTubeService().CommentThreads.Insert(commentToAdd, "snippet"); 
    var insertedComment = ins.Execute(); 
} 

Я сравниваю это с исследователем Google и используя те же свойства, и исследователь действительно добавляет комментарии, когда моя программа просто терпит неудачу. https://developers.google.com/youtube/v3/docs/commentThreads/insert

Как только он достигнет второй строки кода commentToAdd.Snippet.IsPublic = true;

Это просто об ошибке и для каждой строки выше.

Любая помощь была бы принята с благодарностью.

+0

0 Вы используете setter на объекте 'Snippet'. Вы уверены, что 'Snippet' не' null '? – Nikola

ответ

2

Ваша проблема заключается в том, что Snippet is null.

Взято из API link, которое вы указали, вам необходимо сначала создать CommentSnippet.

В примере, что Google предоставил:

// Insert channel comment by omitting videoId. 
// Create a comment snippet with text. 
CommentSnippet commentSnippet = new CommentSnippet(); 
commentSnippet.setTextOriginal(text); 

Во-первых, CommentSnippet создается с каким-нибудь текстом, а затем мы создаем верхний уровень комментарий:

// Create a top-level comment with snippet. 
Comment topLevelComment = new Comment(); 
topLevelComment.setSnippet(commentSnippet); 

И потом, вы добавить свой topLevelComment к CommentThreadSnippet:

// Create a comment thread snippet with channelId and top-level 
// comment. 
CommentThreadSnippet commentThreadSnippet = new CommentThreadSnippet(); 
commentThreadSnippet.setChannelId(channelId); 
commentThreadSnippet.setTopLevelComment(topLevelComment); 

Когда, наконец, у вас есть свой CommentThreadSnippet, вы можете добавить его в CommentThread:

// Create a comment thread with snippet. 
CommentThread commentThread = new CommentThread(); 
commentThread.setSnippet(commentThreadSnippet); 

После этих шагов не должны дать вам ЯРД

+0

Смотрите другие комментарии. Большое спасибо за вашу помощь. –

0

Большое спасибо за вашу помощь. Удалось завершить его.

async Task AddVideoCommentAsync(string commentToAdd, string videoID) 
    { 
     CommentSnippet commentSnippet = new CommentSnippet(); 
     commentSnippet.TextOriginal = commentToAdd; 

     Comment topLevelComment = new Comment(); 
     topLevelComment.Snippet = commentSnippet; 

     CommentThreadSnippet commentThreadSnippet = new CommentThreadSnippet(); 
     commentThreadSnippet.VideoId = videoID; 
     commentThreadSnippet.TopLevelComment = topLevelComment; 

     CommentThread commentThread = new CommentThread(); 
     commentThread.Snippet = commentThreadSnippet; 

     var youtubeService = await NewYouTubeService(); 
     CommentThreadsResource.InsertRequest insertComment = youtubeService.CommentThreads.Insert(commentThread, "snippet"); 

     await insertComment.ExecuteAsync(); 
    } 
+0

Вы в основном просто обернули ответ Николы в async/wait. По крайней мере, примите его ответ и удалите свой другой «ответ». –

Смежные вопросы