public async Task <T> GetFromApi <T>(ConnectionInfo connectionInfo, XtreamApiEnum xtreamApiEnum, CancellationToken cancellationToken, params string[] extraParams) { var jsonContent = await _client.GetStringAsync(new Uri(GetApiUrl(connectionInfo, xtreamApiEnum, extraParams))); cancellationToken.ThrowIfCancellationRequested(); jsonContent = TrimJsonAndConvertChannelsToArray(jsonContent); return(JsonConvert.DeserializeObject <T>(jsonContent)); }
internal async Task <T> GetFromApi <T>(string playlistUrl, XtreamApiEnum xtreamApiEnum, CancellationToken cancellationToken, params string[] extraParams) { using (var client = new HttpClient()) { var json = await client.GetStringAsync(new Uri(GetApiUrl(playlistUrl, xtreamApiEnum, extraParams))); cancellationToken.ThrowIfCancellationRequested(); return(JsonConvert.DeserializeObject <T>(json)); } }
//TODO: API Builder protected virtual string GetApiUrl(ConnectionInfo connectionInfo, XtreamApiEnum xtreamApiEnum, params string[] extraParams) { var urlBuilder = new StringBuilder(); urlBuilder.Append($"{connectionInfo.Server}"); switch (xtreamApiEnum) { case XtreamApiEnum.Player_Api: urlBuilder.Append($"/player_api.php?username={connectionInfo.UserName}&password={connectionInfo.Password}"); return(urlBuilder.ToString()); case XtreamApiEnum.LiveCategories: urlBuilder.Append($"/player_api.php?username={connectionInfo.UserName}&password={connectionInfo.Password}&action=get_live_categories"); return(urlBuilder.ToString()); case XtreamApiEnum.LiveStreams: urlBuilder.Append($"/player_api.php?username={connectionInfo.UserName}&password={connectionInfo.Password}&action=get_live_streams"); return(urlBuilder.ToString()); case XtreamApiEnum.LiveStreamsByCategories: urlBuilder.Append($"/player_api.php?username={connectionInfo.UserName}&password={connectionInfo.Password}&action=get_live_streams&category_id={extraParams[0]}"); return(urlBuilder.ToString()); case XtreamApiEnum.Panel_Api: urlBuilder.Append($"/panel_api.php?username={connectionInfo.UserName}&password={connectionInfo.Password}"); return(urlBuilder.ToString()); case XtreamApiEnum.VOD_Streams: urlBuilder.Append($"/player_api.php?username={connectionInfo.UserName}&password={connectionInfo.Password}&action=get_vod_streams"); return(urlBuilder.ToString()); case XtreamApiEnum.ShortEpgForStream: urlBuilder.Append($"/player_api.php?username={connectionInfo.UserName}&password={connectionInfo.Password}&action=get_short_epg&stream_id={extraParams[0]}"); return(urlBuilder.ToString()); case XtreamApiEnum.AllEpg: urlBuilder.Append($"/player_api.php?username={connectionInfo.UserName}&password={connectionInfo.Password}&action=get_simple_data_table"); return(urlBuilder.ToString()); case XtreamApiEnum.Xmltv: urlBuilder.Append($"/xmltv.php?username={connectionInfo.UserName}&password={connectionInfo.Password}"); return(urlBuilder.ToString()); default: return(string.Empty); } }
internal string GetApiUrl(string playlistUrl, XtreamApiEnum xtreamApiEnum, params string[] extraParams) { var reg = new Regex(XtreamUrlPattern, RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase).Match(playlistUrl); if (reg.Success) { switch (xtreamApiEnum) { case XtreamApiEnum.Player_Api: return($"{reg.Groups["portocol"]}://{reg.Groups["host"]}:{reg.Groups["port"]}/player_api.php?username={reg.Groups["username"]}&password={reg.Groups["password"]}"); case XtreamApiEnum.LiveCategories: return($"{reg.Groups["portocol"]}://{reg.Groups["host"]}:{reg.Groups["port"]}/player_api.php?username={reg.Groups["username"]}&password={reg.Groups["password"]}&action=get_live_categories"); case XtreamApiEnum.LiveStreams: return($"{reg.Groups["portocol"]}://{reg.Groups["host"]}:{reg.Groups["port"]}/player_api.php?username={reg.Groups["username"]}&password={reg.Groups["password"]}&action=get_live_streams"); case XtreamApiEnum.LiveStreamsByCategories: return($"{reg.Groups["portocol"]}://{reg.Groups["host"]}:{reg.Groups["port"]}/player_api.php?username={reg.Groups["username"]}&password={reg.Groups["password"]}&action=get_live_streams&category_id={extraParams[0]}"); case XtreamApiEnum.Panel_Api: return($"{reg.Groups["portocol"]}://{reg.Groups["host"]}:{reg.Groups["port"]}/panel_api.php?username={reg.Groups["username"]}&password={reg.Groups["password"]}"); case XtreamApiEnum.VOD_Streams: return($"{reg.Groups["portocol"]}://{reg.Groups["host"]}:{reg.Groups["port"]}/player_api.php?username={reg.Groups["username"]}&password={reg.Groups["password"]}&action=get_vod_streams"); case XtreamApiEnum.ShortEpgForStream: return($"{reg.Groups["portocol"]}://{reg.Groups["host"]}:{reg.Groups["port"]}/player_api.php?username={reg.Groups["username"]}&password={reg.Groups["password"]}&action=get_short_epg&stream_id={extraParams[0]}"); case XtreamApiEnum.AllEpg: return($"{reg.Groups["portocol"]}://{reg.Groups["host"]}:{reg.Groups["port"]}/player_api.php?username={reg.Groups["username"]}&password={reg.Groups["password"]}&action=get_simple_data_table&stream_id={extraParams[0]}"); case XtreamApiEnum.Xmltv: return($"{reg.Groups["portocol"]}://{reg.Groups["host"]}:{reg.Groups["port"]}/xmltv.php?username={reg.Groups["username"]}&password={reg.Groups["password"]}"); default: return(string.Empty); } } else { throw new ApplicationException("Xtream playlist format not valid"); } }