//Max return 50 videos... public static List <YoutubeVideo> GetVideosByChannelId(string channelId, int count = 5) { var client = new MyHttpClient(); var json = JObject.Parse(client.Get( $"https://www.googleapis.com/youtube/v3/search?key={ApiKey}&channelId={channelId}&part=snippet,id&order=date&maxResults={count}")); var a = json.ToString(); if (json["items"] == null) { return(new List <YoutubeVideo>()); } var result = (from token in json["items"] where token["id"]["kind"].ToObject <string>() == "youtube#video" let snippet = token["snippet"] select new YoutubeVideo() { Title = snippet["title"].ToObject <string>(), PublishTime = DateTime.Parse(snippet["publishedAt"].ToObject <string>()), ChannelId = snippet["channelId"].ToObject <string>(), VideoId = token["id"]["videoId"].ToObject <string>(), VideoLink = "https://www.youtube.com/watch?v=" + token["id"]["videoId"].ToObject <string>(), ChannelTitle = snippet["channelTitle"].ToObject <string>(), ThumbnailLink = snippet["thumbnails"]["default"]["url"].ToObject <string>(), Description = snippet["description"].ToObject <string>(), IsLive = snippet["liveBroadcastContent"].ToObject <string>() == "live" }).ToList(); return(result); }
public static YoutubeLiveChatInfo GetLiveChatInfo(string liveChatId) { var client = new MyHttpClient(); return(JsonConvert.DeserializeObject <YoutubeLiveChatInfo>(client.Get( $"https://www.googleapis.com/youtube/v3/liveChat/messages?liveChatId={liveChatId}&part=id%2Csnippet&key={ApiKey}&maxResults=2000"))); }
public static YoutubeVideo GetYoutubeVideo(string videoId) { var client = new MyHttpClient(); var json = JObject.Parse(client.Get( $"https://www.googleapis.com/youtube/v3/videos?id={videoId}&key={ApiKey}&part=liveStreamingDetails,snippet")); if (json["pageInfo"]["totalResults"].ToObject <int>() != 1) { return(null); } var item = json["items"].First(); var snippet = item["snippet"]; var result = new YoutubeVideo() { Title = snippet["title"].ToObject <string>(), PublishTime = DateTime.Parse(snippet["publishedAt"].ToObject <string>()), ChannelId = snippet["channelId"].ToObject <string>(), VideoId = item["id"].ToObject <string>(), VideoLink = "https://www.youtube.com/watch?v=" + item["id"].ToObject <string>(), ChannelTitle = snippet["channelTitle"].ToObject <string>(), ThumbnailLink = snippet["thumbnails"]["default"]["url"].ToObject <string>(), Description = snippet["description"].ToObject <string>(), IsLive = snippet["liveBroadcastContent"].ToObject <string>() == "live", }; if (item["liveStreamingDetails"] != null) { result.LiveDetails = item["liveStreamingDetails"].ToObject <LiveStreamingDetail>(); } return(result); }
public static BiliBiliUser GetBiliBiliUser(long userId) { var client = new MyHttpClient(); var json = JObject.Parse(client.Get($"https://api.bilibili.com/x/space/app/index?mid={userId}")); return(json["data"]["info"].ToObject <BiliBiliUser>()); }
public static string GetUploadsPlaylistId(string channelId) { var client = new MyHttpClient(); var json = JObject.Parse(client.Get( $"https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id={channelId}&key={ApiKey}")); return(json["pageInfo"]["totalResults"].ToObject <int>() == 0 ? null : json["items"].First()["contentDetails"]["relatedPlaylists"]["uploads"].ToObject <string>()); }
public void InitDanmuServer() { var client = new MyHttpClient(); var xml = client.Get("https://live.bilibili.com/api/player?id=cid:" + RoomId); xml = $"<root>{xml}</root>"; var doc = new XmlDocument(); doc.LoadXml(xml); DanmuServer = doc["root"]["dm_host_list"].InnerText.Split(',').First(); }
public static List <TweetInfo> GetTimelineByUser(string username, int count = 5) { if (string.IsNullOrEmpty(AccessToken)) { InitAccessToken(); } var client = new MyHttpClient() { AccessToken = "Bearer " + AccessToken }; return(JsonConvert.DeserializeObject <List <TweetInfo> >(client.Get( $"https://api.twitter.com/1.1/statuses/user_timeline.json?count={count}&screen_name={username}"))); }
public static List <UserLocalLiveInfo> GetTimeLine() { var client = new MyHttpClient(); var text = client.Get("http://virtual-youtuber.userlocal.jp/"); var html = new HtmlDocument(); html.LoadHtml(text); var body = html.DocumentNode.SelectNodes("html").First().SelectNodes("body").First(); var listNode = body.SelectSingleNode("/html/body/div[2]/div[2]/div[3]/table").ChildNodes.Where(v => v.Name == "tr"); var time = string.Empty; var result = new List <UserLocalLiveInfo>(); foreach (var node in listNode) { if (node.GetAttributeValue("class") == "text-white bg-dark") { time = node.InnerText.Trim(); time = time.Substring(0, time.IndexOf('(')); continue; } var subTime = time; var subNodes = node.ChildNodes.Where(v => v.Name == "td"); subTime += subNodes.First().InnerText.Trim(); subNodes = subNodes.Last().ChildNodes.Where(v => v.Name == "div"); foreach (var subNode in subNodes) { var dateTime = Convert.ToDateTime(subTime + subNode.ChildNodes.First(v => v.Name == "div").InnerText.Trim(), new DateTimeFormatInfo() { ShortDatePattern = "MM月dd日hh時mm分" }); dateTime += new TimeSpan(1, 0, 0); var spans = subNode.ChildNodes.Last(v => v.Name == "div").ChildNodes.Where(v => v.Name == "span"); result.AddRange(from span in spans select span.InnerText.Trim() into titleOrigin let liveTitle = titleOrigin.Substring(0, titleOrigin.IndexOf("(") == -1 ? titleOrigin.Length : titleOrigin.IndexOf("(")).Trim() let vtuberName = titleOrigin.Substring(titleOrigin.IndexOf("(") + 1, titleOrigin.Length - titleOrigin.IndexOf("(") - 2) select new UserLocalLiveInfo() { LiveTime = dateTime, Title = liveTitle, VTuber = vtuberName }); } } return(result); }
public static List <BiliBiliUser> SearchBiliBiliUsers(string keyword) { var client = new MyHttpClient(); var json = JObject.Parse(client.Get($"https://app.bilibili.com/x/v2/search/type?&build=12080&highlight=1&keyword={Uri.EscapeDataString(keyword)}&order=totalrank&order_sort=1&type=2")); if (json["data"].HasValues) { var items = json["data"]["items"]; var users = items.Select(v => new BiliBiliUser() { Username = v["title"]?.ToString(), Id = int.Parse(v["param"]?.ToString()), Description = v["sign"]?.ToString(), Follower = v["fans"]?.ToObject <int>() ?? 0, IsUploader = v["is_up"]?.ToObject <bool>() ?? false }); return(users.ToList()); } return(new List <BiliBiliUser>()); }
public static List <YoutubeVideo> GetPlaylistItems(string playListId, int count = 5) { var client = new MyHttpClient(); var json = JObject.Parse(client.Get( $"https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults={count}&playlistId={playListId}&key={ApiKey}")); var result = (from token in json["items"] let snippet = token["snippet"] select new YoutubeVideo() { Title = snippet["title"].ToObject <string>(), PublishTime = DateTime.Parse(snippet["publishedAt"].ToObject <string>()), ChannelId = snippet["channelId"].ToObject <string>(), VideoId = snippet["resourceId"]["videoId"].ToObject <string>(), VideoLink = "https://www.youtube.com/watch?v=" + snippet["resourceId"]["videoId"].ToObject <string>(), ChannelTitle = snippet["channelTitle"].ToObject <string>(), ThumbnailLink = snippet["thumbnails"]["default"]["url"].ToObject <string>(), Description = snippet["description"].ToObject <string>(), IsLive = false }).ToList(); return(result); }
public static UserLocalOfficeInfo GetOfficeInfo(string officeName) { var client = new MyHttpClient(); var text = client.Get("http://virtual-youtuber.userlocal.jp/office/" + officeName); var html = new HtmlDocument(); html.LoadHtml(text); var body = html.DocumentNode.SelectNodes("html").First().SelectNodes("body").First(); var channelCount = body.SelectSingleNode("/html/body/div[2]/div[3]/div/div[2]/div/div[3]/span[2]") .InnerText; var fanCount = body.SelectSingleNode("/html/body/div[2]/div[3]/div/div[2]/div/div[4]/span[2]").InnerText; var avgFanCount = body.SelectSingleNode("/html/body/div[2]/div[3]/div/div[2]/div/div[5]/span[2]").InnerText; var officeDisPlayName = body.SelectSingleNode("/html/body/div[2]/div[3]/div/div[2]/div/div[1]/div[2]/h2") .InnerText; return(new UserLocalOfficeInfo() { OfficeName = officeDisPlayName, ChannelCount = channelCount, TotalFanCount = fanCount, AvgFanCount = avgFanCount }); }