Witam.
Postanowiłem napisać prosty program do dodawania kciuków na youtube.
Według ich dokumentacji powinienem najpierw uzyskać klucz autoryzacji https://developers.google.com/youtube/2.0/developers_guide_protocol#ClientLogin_Authentication
Następnie powinienem móc dodać kciuk przez odpowiedni request.
https://developers.google.com/youtube/2.0/developers_guide_protocol#Using_community_features
Oto mój kod. Niestety zwraca mi błąd "The remote server returned an error: (400) Bad Request"
Private Function YouTube_AddRating(ByVal DevKey As String, ByVal Auth As String, ByVal VideoID As String) As String
System.Net.ServicePointManager.Expect100Continue = False
Dim reader As StreamReader
Dim Request As HttpWebRequest = HttpWebRequest.Create(String.Format("https://gdata.youtube.com/feeds/api/videos/{0}/ratings", VideoID))
Dim PostData As New StringBuilder
PostData.Append("<?xml version=""1.0"" encoding=""UTF-8""?>")
PostData.Append("<entry xmlns=""http://www.w3.org/2005/Atom"" xmlns:yt=""http://gdata.youtube.com/schemas/2007"">")
PostData.Append("<yt:rating value=""Like""/>")
PostData.Append("</entry>")
Request.Timeout = 20000
Request.ContentType = "application/atom+xml; charset=UTF-8"
Request.Host = "gdata.youtube.com"
Request.Headers.Add("Authorization", "GoogleLogin auth=" & Auth)
Request.Headers.Add("GData-Version", "2")
Request.Headers.Add("X-GData-Key", "key=" & DevKey)
Request.Method = "POST"
Request.ContentLength = PostData.ToString.Length
Dim requestStream As Stream = Request.GetRequestStream()
Dim postBytes As Byte() = Encoding.ASCII.GetBytes(PostData.ToString)
requestStream.Write(postBytes, 0, postBytes.Length)
requestStream.Close()
Dim Response As HttpWebResponse = Request.GetResponse()
reader = New StreamReader(Response.GetResponseStream())
Return reader.ReadToEnd()
End Function
Private Function YouTube_LoginToYoutube(ByVal AppName As String, ByVal Username As String, ByVal Password As String) As String
Try
Dim PostData As New StringBuilder
PostData.Append("Email=" & Username)
PostData.Append("&Passwd=" & Password)
PostData.Append("&service=youtube")
PostData.Append("&source=" & AppName)
Dim reader As StreamReader
Dim Request As HttpWebRequest = HttpWebRequest.Create("https://www.google.com/youtube/accounts/ClientLogin")
Request.AllowAutoRedirect = True
Request.ContentType = "application/x-www-form-urlencoded"
Request.Method = "POST"
Request.ContentLength = PostData.ToString.Length
Dim requestStream As Stream = Request.GetRequestStream()
Dim postBytes As Byte() = Encoding.ASCII.GetBytes(PostData.ToString)
requestStream.Write(postBytes, 0, postBytes.Length)
requestStream.Close()
Dim Response As HttpWebResponse = Request.GetResponse()
reader = New StreamReader(Response.GetResponseStream())
Dim resultAuth As String = reader.ReadToEnd()
Return Replace(Replace(Split(Split(resultAuth, "YouTubeUser")(0), "=")(1), Chr(13), ""), Chr(10), "")
Catch ex As Exception
Return "error"
End Try
End Function
Z logowaniem nie ma problemów, tylko z dodawaniem kciuków. Wiem, że google udostępnia gotową bibliotekę youtube, ale nie można tam ustawić timeout'u co jest mi potrzebne.
Z góry dziękuje za pomoc.