using Shared.Engine.RxEnumerate; using Shared.Models.Base; using Shared.Models.Online.Eneyida; using Shared.Models.Templates; using System.Text.Json; using System.Text.RegularExpressions; using System.Web; namespace Shared.Engine.Online { public struct EneyidaInvoke { #region EneyidaInvoke string host; string apihost; HttpHydra httpHydra; Func onstreamfile; Func onlog; Action requesterror; public EneyidaInvoke(string host, string apihost, HttpHydra httpHydra, Func onstreamfile, Func onlog = null, Action requesterror = null) { this.host = host != null ? $"{host}/" : null; this.apihost = apihost; this.httpHydra = httpHydra; this.onstreamfile = onstreamfile; this.onlog = onlog; this.requesterror = requesterror; } #endregion #region Embed public async Task Embed(string original_title, int year, string href, bool similar) { if (string.IsNullOrWhiteSpace(href) && (string.IsNullOrWhiteSpace(original_title) || year == 0)) return null; string link = href; var result = new EmbedModel(); if (string.IsNullOrEmpty(link)) { onlog?.Invoke("search start"); bool searchEmpty = false; string _site = apihost; await httpHydra.PostSpan($"{_site}/index.php?do=search", $"do=search&subaction=search&search_start=0&result_from=1&story={HttpUtility.UrlEncode(original_title)}", search => { searchEmpty = search.Contains(">Пошук по сайту<", StringComparison.OrdinalIgnoreCase); var rx = Rx.Split("
Анонс") || row.Contains(">Трейлер")) continue; string newslink = row.Match("href=\"(https?://[^/]+/[^\"]+\\.html)\""); if (newslink == null) continue; //
2025 • Thunderbolts
var g = row.Groups("class=\"short_subtitle\">(]+>([0-9]{4}))?([^<]+)"); string name = g[3].Value.Replace("•", "").Trim(); if (string.IsNullOrEmpty(name)) continue; if (result.similars == null) result.similars = new List(rx.Count); string uaname = row.Match("id=\"short_title\"[^>]+>([^<]+)<"); string img = row.Match("data-src=\"/([^\"]+)\""); result.similars.Add(new Similar() { title = $"{uaname} / {name}", year = g[2].Value, href = newslink, img = string.IsNullOrEmpty(img) ? null : $"{_site}/{img}" }); if (StringConvert.SearchName(name) == stitle && g[2].Value == year.ToString()) { link = newslink; break; } } }); if (similar) return result; if (string.IsNullOrEmpty(link)) { if (result.similars.Count > 0) return result; if (searchEmpty) return new EmbedModel() { IsEmpty = true }; requesterror?.Invoke(); return null; } } onlog?.Invoke("link: " + link); string iframeUri = null; await httpHydra.GetSpan(link, news => { if (news.Contains("full_content fx_row", StringComparison.Ordinal)) result.quel = Rx.Match(news, " (1080p|720p|480p)"); iframeUri = Rx.Match(news, "