Я делаю настольное приложение в VB.NET, которое будет взаимодействовать с YouTube. До сих пор мне удалось решить «проблему» аутентификации OAuth2, и у меня есть свои токены (аутентификация и обновление). Мне нужно обновлять токен авторизации каждый час, но это не проблема.
Я пытался оставить комментарий к видео разными способами, используя http POST и API YouTube. На HTTP-запрос POST я получаю ответ «неверный запрос», а на API-интерфейсе YouTube ничего не получаю, никаких комментариев и ошибок. Как я могу это сделать? Документация по API данных YouTube повреждена, и я не могу открыть или установить ее в Visual Studio, поэтому я провожу тесты методом проб и ошибок, используя небольшие примеры, размещенные в Интернете.
Это код, который я использовал для версии HTTP:
'create the xml comment as in API example
Dim ContentLenght As Long
Dim xmlData As New System.Xml.XmlDocument()
Dim commentXML As XDocument =
<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
xmlns:yt="http://gdata.youtube.com/schemas/2007">
<content><%= comment %></content>
</entry>
ContentLenght = commentXML.ToString.Length
'---------------------------------------------------------
'create the POST request to submit the comment
Dim sentXml As Byte() = System.Text.Encoding.ASCII.GetBytes(commentXML.ToString)
Dim url = "http://gdata.youtube.com/feeds/api/videos/" & videoID & "/comments"
Dim req As New WebClient
req.Headers.Add("Host: gdata.youtube.com")
req.Headers.Add("Length:" & ContentLenght)
req.Headers.Add("Content-Type: application/atom+Xml")
req.Headers.Add("Authorization: Bearer " & Token)
req.Headers.Add("GData-Version: 2")
req.Headers.Add("X-GData-Key: key=" & developerKey)
Dim response As Byte() = req.UploadData(url, "POST", sentXml)
Код API, который я пробовал:
Dim commentingSettings As New YouTubeRequestSettings(appName, developerKey, Token)
Dim lcommentingRequest As New YouTubeRequest(commentingSettings)
Dim video As New Video()
video.VideoId = "JEvV0RHMU-Y"
Dim comm As New Comment
comm.Content = "comm text here"
lcommentingRequest.AddComment(video, comm)