private void OnVideoDataLoaded(YoutubeData data) { if (OnVideoData != null) { OnVideoData(data); } }
protected void Load_Links() { OleDbConnection con2 = new OleDbConnection(); con2.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + Request.PhysicalApplicationPath + "\\Yoav_DB.accdb"; con2.Open(); string sqlstring2 = @"SELECT Link, Link_order FROM links_tbl WHERE Username = @usr AND List_number = @num ORDER BY Link_order ASC"; OleDbCommand conSer2 = new OleDbCommand(sqlstring2, con2); conSer2.Parameters.AddWithValue("@usr", Request.QueryString["Username"]); conSer2.Parameters.AddWithValue("@num", Current.Text); OleDbDataReader Drdr2 = conSer2.ExecuteReader(); DataTable dt = new DataTable("youtube"); DataColumn dc = new DataColumn(); dc.ColumnName = "link"; dt.Columns.Add(dc); dc = new DataColumn("count"); dt.Columns.Add(dc); while (Drdr2.Read()) { DataRow dr = dt.NewRow(); dr["link"] = "https://www.youtube.com/embed/" + Drdr2.GetString(0); dr["count"] = Drdr2.GetValue(1); count = int.Parse(Drdr2.GetValue(1).ToString()); dt.Rows.Add(dr); } if (!dataSet.Tables.Contains("youtube")) { dataSet.Tables.Add(dt); } con2.Close(); YoutubeData.DataSource = dt; YoutubeData.DataBind(); }
IEnumerator YoutubeSearch(string keyword, int maxresult, YoutubeSearchOrderFilter order, YoutubeSafeSearchFilter safeSearch, string customFilters, Action <YoutubeData[]> callback) { keyword = keyword.Replace(" ", "%20"); string orderFilter, safeSearchFilter; orderFilter = ""; if (order != YoutubeSearchOrderFilter.none) { orderFilter = "&order=" + order.ToString(); } safeSearchFilter = "&safeSearch=" + safeSearch.ToString(); string newurl = WWW.EscapeURL("https://www.googleapis.com/youtube/v3/search/?q=" + keyword + "&type=video&maxResults=" + maxresult + "&part=snippet,id&key=" + APIKey + "" + orderFilter + "" + safeSearchFilter + "" + customFilters); Debug.Log(newurl); WWW call = new WWW(WWW.UnEscapeURL(newurl)); yield return(call); Debug.Log(call.url); JSONNode result = JSON.Parse(call.text); searchResults = new YoutubeData[result["items"].Count]; Debug.Log(searchResults.Length); for (int itemsCounter = 0; itemsCounter < searchResults.Length; itemsCounter++) { searchResults[itemsCounter] = new YoutubeData(); searchResults[itemsCounter].id = result["items"][itemsCounter]["id"]["videoId"]; SetSnippet(result["items"][itemsCounter]["snippet"], out searchResults[itemsCounter].snippet); } callback.Invoke(searchResults); }
private void SetContentDetails(JSONNode resultContentDetails, out YoutubeContentDetails data) { data = new YoutubeContentDetails(); data.duration = resultContentDetails["duration"]; data.dimension = resultContentDetails["dimension"]; data.definition = resultContentDetails["definition"]; data.caption = resultContentDetails["caption"]; data.licensedContent = resultContentDetails["licensedContent"]; data.projection = resultContentDetails["projection"]; if (resultContentDetails["contentRating"] != null) { Debug.Log("Age restrict found!"); if (resultContentDetails["contentRating"]["ytRating"] == "ytAgeRestricted") { data.ageRestrict = true; } else { data.ageRestrict = false; } } else { data.ageRestrict = false; } }
IEnumerator YoutubeSearchByLocation(string keyword, int maxResult, int locationRadius, float latitude, float longitude, YoutubeSearchOrderFilter order, YoutubeSafeSearchFilter safeSearch, Action <YoutubeData[]> callback) { keyword = keyword.Replace(" ", "%20"); string orderFilter, safeSearchFilter; orderFilter = ""; if (order != YoutubeSearchOrderFilter.none) { orderFilter = "&order=" + order.ToString(); } safeSearchFilter = "&safeSearch=" + safeSearch.ToString(); WWW call = new WWW("https://www.googleapis.com/youtube/v3/search/?type=video&q=" + keyword + "&type=video&locationRadius=" + locationRadius + "mi&location=" + latitude + "%2C" + longitude + "&part=snippet,id&maxResults=" + maxResult + "&key=" + APIKey + "" + orderFilter + "" + safeSearchFilter); yield return(call); Debug.Log(call.url); JSONNode result = JSON.Parse(call.text); searchResults = new YoutubeData[result["items"].Count]; Debug.Log(searchResults.Length); for (int itemsCounter = 0; itemsCounter < searchResults.Length; itemsCounter++) { searchResults[itemsCounter] = new YoutubeData(); searchResults[itemsCounter].id = result["items"][itemsCounter]["id"]["videoId"]; SetSnippet(result["items"][itemsCounter]["snippet"], out searchResults[itemsCounter].snippet); } callback.Invoke(searchResults); }
IEnumerator YoutubeSearchUsingCategory(string keyword, string category, int maxresult, YoutubeSearchOrderFilter order, YoutubeSafeSearchFilter safeSearch, Action <YoutubeData[]> callback) { keyword = keyword.Replace(" ", "%20"); category = category.Replace(" ", "%20"); string orderFilter, safeSearchFilter; orderFilter = ""; if (order != YoutubeSearchOrderFilter.none) { orderFilter = "&order=" + order.ToString(); } safeSearchFilter = "&safeSearch=" + safeSearch.ToString(); UnityWebRequest request = UnityWebRequest.Get("https://www.googleapis.com/youtube/v3/search/?q=" + keyword + "&videoCategoryId=" + category + "&maxResults=" + maxresult + "&type=video&part=snippet,id&key=" + APIKey + "" + orderFilter + "" + safeSearchFilter); yield return(request.SendWebRequest()); Debug.Log(request.url); JSONNode result = JSON.Parse(request.downloadHandler.text); searchResults = new YoutubeData[result["items"].Count]; Debug.Log(searchResults.Length); for (int itemsCounter = 0; itemsCounter < searchResults.Length; itemsCounter++) { searchResults[itemsCounter] = new YoutubeData(); searchResults[itemsCounter].id = result["items"][itemsCounter]["id"]["videoId"]; SetSnippet(result["items"][itemsCounter]["snippet"], out searchResults[itemsCounter].snippet); } callback.Invoke(searchResults); }
void Connect() { Dictionary <string, AppData> idToApp = apps.ToDictionary(app => app.Id); foreach (DeveloperData developer in developers) { foreach (string appId in developer.appsIDs) { if (idToApp.ContainsKey(appId)) { idToApp[appId].developer = developer; developer.apps.Add(idToApp[appId]); } } } Dictionary <string, YoutubeData> idToVideo = videos.ToDictionary(v => v.videoId); foreach (AppData app in apps) { if (idToVideo.ContainsKey(app.videoID)) { YoutubeData video = idToVideo[app.videoID]; app.video = video; video.app = app; } } // sort developer apps foreach (DeveloperData developer in developers) { developer.apps = developer.apps.OrderBy(a => a.video == null ? DateTime.MinValue : a.video.date).ToList(); } }
private void Form1_Load(object sender, EventArgs e) { //fastBasePath = fastMiniBasePath; // use part of datas Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Directory.CreateDirectory(fastBasePath); CheckCache("apps.txt"); CheckCache("developers.txt"); CheckCache("video.txt"); apps = AppData.load_from_file(fastBasePath + "apps.txt"); developers = DeveloperData.Deserialize(fastBasePath + "developers.txt"); videos = YoutubeData.load_from_file(fastBasePath + "video.txt"); videos = videos.DistinctBy(v => v.videoId).ToList(); genreComboBox.Items.AddRange(Genres.All.ToArray()); Connect(); //SavePart(); //SymbolsInName(); //NameWordsCount(false); //PopularNameWords(); <--- //AppsByGenres(true); //SimpleDevelopersAnalisis(false); //SimpleDevelopersAnalisis(true); //DevelopersAnalisis("Аркады и экшн"); //YoutubeAnalisis(); GenerateReport(); }
public JsonResult YouTubeData()//Without Postman { //https://developers.google.com/youtube/v3/docs/activities/list YoutubeData YoutubeData = new YoutubeData(); client.Headers.Add("Content-Type", "application/json; charset=utf-8"); try { if (Session["YouTube_Token"] != null) { client.Headers.Add("x-li-format", "json"); client.Headers.Add("x-original-host", "ngrok.io"); //client.Headers.Add("part", "contentDetails"); //client.Headers.Add("home", "true"); var content = client.DownloadString("https://www.googleapis.com/youtube/v3/activities/?access_token=" + Session["YouTube_Token"].ToString() + "&part=contentDetails&home=true"); serializer.MaxJsonLength = Int32.MaxValue; YoutubeData = serializer.Deserialize <YoutubeData>(content); log.Info("Serialization Completed"); } } catch (Exception ex) { log.Error("Error Message : " + ex.Message); } return(Json(YoutubeData, JsonRequestBehavior.AllowGet)); }
private void SetSnippet(JSONNode resultSnippet, out YoutubeSnippet data) { data = new YoutubeSnippet(); data.publishedAt = resultSnippet["publishedAt"]; data.channelId = resultSnippet["channelId"]; data.title = resultSnippet["title"]; data.description = resultSnippet["description"]; //Thumbnails data.thumbnails = new YoutubeTumbnails(); data.thumbnails.defaultThumbnail = new YoutubeThumbnailData(); data.thumbnails.defaultThumbnail.url = resultSnippet["thumbnails"]["default"]["url"]; data.thumbnails.defaultThumbnail.width = resultSnippet["thumbnails"]["default"]["width"]; data.thumbnails.defaultThumbnail.height = resultSnippet["thumbnails"]["default"]["height"]; data.thumbnails.mediumThumbnail = new YoutubeThumbnailData(); data.thumbnails.mediumThumbnail.url = resultSnippet["thumbnails"]["medium"]["url"]; data.thumbnails.mediumThumbnail.width = resultSnippet["thumbnails"]["medium"]["width"]; data.thumbnails.mediumThumbnail.height = resultSnippet["thumbnails"]["medium"]["height"]; data.thumbnails.highThumbnail = new YoutubeThumbnailData(); data.thumbnails.highThumbnail.url = resultSnippet["thumbnails"]["high"]["url"]; data.thumbnails.highThumbnail.width = resultSnippet["thumbnails"]["high"]["width"]; data.thumbnails.highThumbnail.height = resultSnippet["thumbnails"]["high"]["height"]; data.thumbnails.standardThumbnail = new YoutubeThumbnailData(); data.thumbnails.standardThumbnail.url = resultSnippet["thumbnails"]["standard"]["url"]; data.thumbnails.standardThumbnail.width = resultSnippet["thumbnails"]["standard"]["width"]; data.thumbnails.standardThumbnail.height = resultSnippet["thumbnails"]["standard"]["height"]; data.channelTitle = resultSnippet["channelTitle"]; //TAGS data.tags = new string[resultSnippet["tags"].Count]; for (int index = 0; index < data.tags.Length; index++) { data.tags[index] = resultSnippet["tags"][index]; } data.categoryId = resultSnippet["categoryId"]; }
private void SetStatistics(JSONNode resultStatistics, out YoutubeStatistics data) { data = new YoutubeStatistics(); data.viewCount = resultStatistics["viewCount"]; data.likeCount = resultStatistics["likeCount"]; data.dislikeCount = resultStatistics["dislikeCount"]; data.favoriteCount = resultStatistics["favoriteCount"]; data.commentCount = resultStatistics["commentCount"]; }
private void SetContentDetails(JSONNode resultContentDetails, out YoutubeContentDetails data) { data = new YoutubeContentDetails(); data.duration = resultContentDetails["duration"]; data.dimension = resultContentDetails["dimension"]; data.definition = resultContentDetails["definition"]; data.caption = resultContentDetails["caption"]; data.licensedContent = resultContentDetails["licensedContent"]; data.projection = resultContentDetails["projection"]; }
void OnVideoDataLoaded(YoutubeData data) { ShowContent( new RealmVideoContentCard.VideoDescriptionContent() { title = data.snippet.title , description = data.snippet.description } ); }
void OnFinishLoadingData(YoutubeData result) { UI_title.text = result.snippet.title; UI_description.text = result.snippet.description; UI_duration.text = "Duration: " + result.contentDetails.duration.Replace("PT", ""); UI_likes.text = "Likes: " + result.statistics.likeCount; UI_dislikes.text = "Dislikes: " + result.statistics.dislikeCount; UI_favorites.text = "Favs: " + result.statistics.favoriteCount; UI_comments.text = "Comments: " + result.statistics.commentCount; UI_views.text = "Views: " + result.statistics.viewCount; LoadThumbnail(result.snippet.thumbnails.defaultThumbnail.url); }
IEnumerator DownloadThumbnailFunc(YoutubeData videoData) { var url = videoData.snippet.thumbnails.mediumThumbnail.url; var www = UnityWebRequestTexture.GetTexture(url); yield return(www.SendWebRequest()); var tex = DownloadHandlerTexture.GetContent(www); rawImage.texture = tex; videoRT = new RenderTexture(tex.width, tex.height, 24); youtube.unityVideoPlayer.targetTexture = videoRT; GetComponent <AspectRatioFitter>().aspectRatio = (float)tex.width / tex.height; }
IEnumerator LoadSingleVideo(string videoId, Action <YoutubeData> callback) { WWW call = new WWW("https://www.googleapis.com/youtube/v3/videos?id=" + videoId + "&part=snippet,id,contentDetails,statistics&key=" + APIKey); yield return(call); data = new YoutubeData(); JSONNode result = JSON.Parse(call.text); result = result["items"][0]; //using items data.id = result["id"]; //Populate snippet data SetSnippet(result["snippet"], out data.snippet); SetStatistics(result["statistics"], out data.statistics); SetContentDetails(result["contentDetails"], out data.contentDetails); callback.Invoke(data); }
public async Task <JsonResult> Test(YoutubeViewModel model) { YoutubeData data = new YoutubeData() { Views = model.Views, FemaleViews = model.FemaleViews, Likes = model.Likes, Subcribers = model.Subcribers, MaleViews = model.MaleViews, Comments = model.Comments, Dislike = model.Dislike, Engagement = model.Engagement, }; _YoutubeRepo.Add(data); return(Json(true)); }
IEnumerator GetVideosFromChannel(string channelId, int maxResults, Action <YoutubeData[]> callback) { WWW call = new WWW("https://www.googleapis.com/youtube/v3/search?order=date&type=video&part=snippet&channelId=" + channelId + "&maxResults=" + maxResults + "&key=" + APIKey); yield return(call); Debug.Log(call.url); JSONNode result = JSON.Parse(call.text); searchResults = new YoutubeData[result["items"].Count]; for (int itemsCounter = 0; itemsCounter < searchResults.Length; itemsCounter++) { searchResults[itemsCounter] = new YoutubeData(); searchResults[itemsCounter].id = result["items"][itemsCounter]["id"]["videoId"]; SetSnippet(result["items"][itemsCounter]["snippet"], out searchResults[itemsCounter].snippet); } callback.Invoke(searchResults); }
IEnumerator LoadSingleVideo(string videoId, Action <YoutubeData> callback) { UnityWebRequest request = UnityWebRequest.Get("https://www.googleapis.com/youtube/v3/videos?id=" + videoId + "&part=snippet,id,contentDetails,statistics&key=" + APIKey); yield return(request.SendWebRequest()); Debug.Log(request.url); data = new YoutubeData(); JSONNode result = JSON.Parse(request.downloadHandler.text); result = result["items"][0]; //using items data.id = result["id"]; //Populate snippet data SetSnippet(result["snippet"], out data.snippet); SetStatistics(result["statistics"], out data.statistics); SetContentDetails(result["contentDetails"], out data.contentDetails); callback.Invoke(data); }
private void SetComment(JSONNode commentsData, out YoutubeComments data) { data = new YoutubeComments(); data.videoId = commentsData["videoId"]; JSONNode commentDetail = commentsData["topLevelComment"]["snippet"]; data.authorDisplayName = commentDetail["authorDisplayName"]; data.authorProfileImageUrl = commentDetail["authorProfileImageUrl"]; data.authorChannelUrl = commentDetail["authorChannelUrl"]; data.authorChannelId = commentDetail["authorChannelId"]["value"]; data.textDisplay = commentDetail["textDisplay"]; data.textOriginal = commentDetail["textOriginal"]; data.canRate = commentDetail["canRate"].AsBool; data.viewerRating = commentDetail["viewerRating"]; data.likeCount = commentDetail["likeCount"].AsInt; data.publishedAt = commentDetail["publishedAt"]; data.updatedAt = commentDetail["updatedAt"]; }
//public JsonResult YouTubedata()//With Postman //{ // YoutubeData YoutubeData = new YoutubeData(); // try // { // var client = new RestClient("https://api.linkedin.com/v1/people/~?format=json"); // var request = new RestRequest(Method.GET); // request.AddHeader("Postman-Token", "e2f54cdf-c9d3-47a1-8c49-c07dc09c76c9"); // request.AddHeader("Cache-Control", "no-cache"); // request.AddHeader("Authorization", "Bearer AQUpylIsxl51pKuB_vw-ENuWZxgkLSDaJxV-Pzjqdcx5EW_vPgCNAG1rpRYBQZIrVxWX8_SPrSGAH8sraN7KpfWxAQaPHpMPZhAVxFb860MgxjJHclDm7Ns9OImy79bqaguIyXx6er6FfZwLsMC8snP3ByDGK-Lnr4BItMNzsxs06BrmuGabZ-XM2XC74CalsUGzhHphhDNFH-HK8itIfJBmzseQquxd5CvPLqx-7CytpUH1SXh9jyYr-SqZvi99HoEki8tIizmrzCIUJ_ABZpfc1ehrFUxu7wOVVhnFsNYLRWuA64FbwypokE_ZyIBi-IZjsk5ahgRTnoN1PyZqqcuvAU4z3A"); // IRestResponse response = client.Execute(request); // YoutubeData = serializer.Deserialize<YoutubeData>(response.Content); // } // catch (Exception ex) // { // log.Error("Error Message : " + ex.Message); // } // return Json(YoutubeData, JsonRequestBehavior.AllowGet); //} public JsonResult youtubedata2()//oauth1 { YoutubeData youtubeData = new YoutubeData(); client.Headers.Add("X-Language", "en"); client.Headers.Add("Content-Type", "application/json; charset=utf-8"); try { var content = client.DownloadString("https://www.googleapis.com/youtube/v3/search?key=AIzaSyB_mVYswwrfIosYeR-UUYBamBeXOyyk7fM&channelId=UCyS42OgDpiOrFw9_u5bGotQ&part=snippet,id&order=date&maxResults=20"); serializer.MaxJsonLength = Int32.MaxValue; youtubeData = serializer.Deserialize <YoutubeData>(content); log.Info("Serialization Completed"); } catch (Exception ex) { log.Error("Error Message : " + ex.Message); } return(Json(youtubeData, JsonRequestBehavior.AllowGet)); }
IEnumerator YoutubeSearch(string keyword) { keyword = keyword.Replace(" ", "%20"); int tempMaxResult = 0; if (maxResult > 50) { tempMaxResult = 50; } else { tempMaxResult = maxResult; } string newurl = UnityWebRequest.EscapeURL("https://www.googleapis.com/youtube/v3/search/?q=" + keyword + "&type=video&maxResults=" + tempMaxResult + "&part=snippet,id&key=" + APIKey + ""); UnityWebRequest request = UnityWebRequest.Get(UnityWebRequest.UnEscapeURL(newurl)); yield return(request.SendWebRequest()); JSONNode result = JSON.Parse(request.downloadHandler.text); currentResults += result["items"].Count; for (int itemsCounter = 0; itemsCounter < result["items"].Count; itemsCounter++) { YoutubeData ytItem = new YoutubeData(); ytItem.id = result["items"][itemsCounter]["id"]["videoId"]; SetSnippet(result["items"][itemsCounter]["snippet"], out ytItem.snippet); searchResults.Add(ytItem); } if (currentResults < maxResult) { StartCoroutine(YoutubeGetNextPage(result["nextPageToken"])); } else { Debug.Log("List is done"); } }
IEnumerator GetTrendingVideos(string regionCode, int maxresult, Action <YoutubeData[]> callback) { string newurl = WWW.EscapeURL("https://www.googleapis.com/youtube/v3/videos?part=snippet,id&chart=mostPopular®ionCode=" + regionCode + "&maxResults=" + maxresult + "&key=" + APIKey); WWW call = new WWW(WWW.UnEscapeURL(newurl)); Debug.Log(call.url); yield return(call); JSONNode result = JSON.Parse(call.text); searchResults = new YoutubeData[result["items"].Count]; Debug.Log(searchResults.Length); for (int itemsCounter = 0; itemsCounter < searchResults.Length; itemsCounter++) { searchResults[itemsCounter] = new YoutubeData(); searchResults[itemsCounter].id = result["items"][itemsCounter]["id"]; SetSnippet(result["items"][itemsCounter]["snippet"], out searchResults[itemsCounter].snippet); } callback.Invoke(searchResults); }
public ParserResponse Parse(NameValueCollection requestData) { var jsonObject = new YoutubeData { Url = requestData["Url"], Avatar = requestData["Avatar"], Name = requestData["Name"], Comments = requestData["Comments"], Videos = requestData["Videos"], Subscribers = requestData["Subscribers"] }; var data = JToken.FromObject(jsonObject).ToString(); return new ParserResponse { Data = data, Followers = jsonObject.Subscribers.ToIntOrDefault(), Url = jsonObject.Url, Title = jsonObject.Name }; }
IEnumerator YoutubeGetNextPage(string pageToken) { int tempMaxResult = 0; if (maxResult > 50) { tempMaxResult = 50; } else { tempMaxResult = maxResult; } string newurl = WWW.EscapeURL("https://www.googleapis.com/youtube/v3/search/?pageToken=" + pageToken + "&type=video&maxResults=" + tempMaxResult + "&part=snippet,id&key=" + APIKey + ""); WWW call = new WWW(WWW.UnEscapeURL(newurl)); yield return(call); JSONNode result = JSON.Parse(call.text); currentResults += result["items"].Count; for (int itemsCounter = 0; itemsCounter < result["items"].Count; itemsCounter++) { YoutubeData ytItem = new YoutubeData(); ytItem.id = result["items"][itemsCounter]["id"]["videoId"]; SetSnippet(result["items"][itemsCounter]["snippet"], out ytItem.snippet); searchResults.Add(ytItem); } if (currentResults < maxResult) { StartCoroutine(YoutubeGetNextPage(result["nextPageToken"])); } else { Debug.Log("List is done"); } }
void SavePart(int step = 10) { List <AppData> appsPart = new List <AppData>(); List <DeveloperData> developersPart = new List <DeveloperData>(); List <YoutubeData> videosPart = new List <YoutubeData>(); foreach (DeveloperData developer in developers.TakeEvery(step)) { developersPart.Add(developer); foreach (AppData app in developer.apps) { appsPart.Add(app); if (app.video != null) { videosPart.Add(app.video); } } } AppData.save_to_file(appsPart, fastMiniBasePath + "apps.txt"); YoutubeData.save_to_file(videosPart, fastMiniBasePath + "video.txt"); DeveloperData.Serialize(developersPart, fastMiniBasePath + "developers.txt"); }
public AppRawData(HtmlDocument document) { HtmlNode root = document.DocumentNode; name = root.SelectSingleNode("//div[@itemprop='name']/div").InnerText; genre = root.SelectSingleNode("//span[@itemprop='genre']").InnerText; score = root.SelectSingleNode("//div[@class='score']").InnerText; reviews_num = root.SelectSingleNode("//span[@class='reviews-num']").InnerText; rating_histogram = root.SelectNodes("//div[@class='rating-histogram']/div/span[@class='bar-number']").Select(el => el.InnerText).ToList(); datePublished = root.SelectSingleNode("//div[@itemprop='datePublished']").InnerText; fileSize = root.SelectSingleNode("//div[@itemprop='fileSize']").InnerText; softwareVersion = root.SelectSingleNode("//div[@itemprop='softwareVersion']").InnerText; operatingSystems = root.SelectSingleNode("//div[@itemprop='operatingSystems']").InnerText; contentRating = root.SelectSingleNode("//div[@itemprop='contentRating']").InnerText; price = root.SelectSingleNode("//meta[@itemprop='price']").GetAttributeValue("content", null); //<meta itemprop="price" content="Бесплатно"> HtmlNode numDownloads_node = root.SelectSingleNode("//div[@itemprop='numDownloads']"); numDownloads = numDownloads_node == null ? "0" : numDownloads_node.InnerText; HtmlNodeCollection developer_references = root.SelectNodes("//a[@class='dev-link']"); foreach (HtmlNode ref_node in developer_references) { string link = ref_node.GetAttributeValue("href", null); if (link.StartsWith("mailto:")) { developer_email = link; } else { developer_site = link; } } // //span[@class='play-action-container'] data-video-url string videoUrl = null; try { videoUrl = root.SelectSingleNode("//span[@data-video-url]").GetAttributeValue("data-video-url", null); } catch { } if (videoUrl != null) { if (new Uri(videoUrl).Host != "www.youtube.com") { throw new Exception("video host : " + new Uri(videoUrl).Host); } videoID = YoutubeData.GetVideoID(videoUrl); if (videoID.Contains(":") || videoID.Contains(";")) { throw new Exception(": or ; in videoId"); } } }
private void OnReceiveVideoData(YoutubeData videoData) { StartCoroutine(DownloadThumbnailFunc(videoData)); }
public YoutubeService(IOptionsSnapshot <YoutubeData> youtubeDataAccessor) { _apiKey = youtubeDataAccessor.Value; }