public override List <VideoInfo> GetVideos(Category category) { List <VideoInfo> videos = new List <VideoInfo>(); currentCategory = category as YleCategory; HasNextPage = false; if (currentCategory.IsSeries) { string urlFormat = "https://programs-cdn.api.yle.fi/v1/episodes/{0}.json?availability=ondemand&limit=100&order=episode.hash%3Aasc%2Cpublication.starttime%3Aasc%2Ctitle.fi%3Aasc&app_id={1}&app_key={2}&offset={3}"; JObject json = GetWebData <JObject>(string.Format(urlFormat, currentCategory.Url, appInfo.AppId, appInfo.AppKey, currentSeriesVideoOffset)); if (json["data"] != null && json["data"].Count() > 0) { foreach (JToken data in json["data"]) { VideoInfo video = GetVideoInfoFromJsonData(data, currentCategory.IsSeries); if (video != null) { videos.Add(video); } } } int count = json["meta"]["count"].Value <int>(); HasNextPage = count > currentSeriesVideoOffset + 100; if (HasNextPage) { currentSeriesVideoOffset += 100; } else { currentSeriesVideoOffset = 0; } } else { currentSeriesVideoOffset = 0; string urlFormat = "http://arenan.yle.fi/api/programs/v1/id/{0}.json?app_id={1}&app_key={2}"; JObject json = GetWebData <JObject>(string.Format(urlFormat, currentCategory.Url, appInfo.AppId, appInfo.AppKey)); VideoInfo video = GetVideoInfoFromJsonData(json["data"], currentCategory.IsSeries); if (video != null) { videos.Add(video); } } return(videos); }
private void GetGenrePrograms(Category parentCategory, string apiUrl, int offset, int limit = 100, string sortOrder = "a-o") { string url = string.Format("{0}?o={1}&app_id={2}&app_key={3}&client=yle-areena-web&language={4}&v=5&offset={5}&limit={6}&filter.region={7}", apiUrl, sortOrder, appInfo.AppId, appInfo.AppKey, ApiLanguage, offset, limit, ApiRegion); List <Category> programs = new List <Category>(); JObject json = GetWebData <JObject>(url); int noOfpackages = 0; foreach (JToken programToken in json["data"].Value <JArray>()) { string type = programToken["pointer"]["type"].Value <string>(); if (type != "package") { YleCategory program = new YleCategory(); program.IsSeries = type == "series"; program.Name = programToken["title"].Value <string>(); program.Url = programToken["labels"].First(t => t["type"].Value <string>() == "itemId")["raw"].Value <string>(); program.Description = programToken["description"].Value <string>(); program.Thumb = string.Format(imageFormat, programToken["image"]["id"].Value <string>()); program.ParentCategory = parentCategory; programs.Add(program); } else { noOfpackages++; } } if (programs.Count + noOfpackages >= limit) { NextPageCategory next = new NextPageCategory(); next.Url = apiUrl; next.Other = (offset + limit).ToString(); next.ParentCategory = parentCategory; programs.Add(next); } parentCategory.SubCategories.AddRange(programs); }
public override List <SearchResultItem> Search(string query, string category = null) { List <SearchResultItem> results = new List <SearchResultItem>(); JObject json = GetWebData <JObject>(string.Format("https://areena.api.yle.fi/v1/ui/search?app_id=areena_web_personal_prod&app_key=6c64d890124735033c50099ca25dd2fe&client=yle-areena-web&language={0}&v=4&episodes=false&packages=false&query={1}&service=tv&limit=100", ApiLanguage, HttpUtility.UrlEncode(query))); foreach (JToken programToken in json["data"].Value <JArray>()) { string type = programToken["pointer"]["type"].Value <string>(); YleCategory program = new YleCategory(); program.IsSeries = type == "series"; program.Name = programToken["title"].Value <string>(); program.Description = programToken["description"] != null ? programToken["description"].Value <string>() : ""; program.Url = programToken["pointer"]["uri"].Value <string>().Replace("yleareena://items/", ""); program.Thumb = programToken["image"] != null?string.Format(imageFormat, programToken["image"]["id"].Value <string>()) : ""; results.Add(program); } return(results); }