private IEnumerable<IndexerRequest> GetRssRequests() { var request = new IndexerRequest(string.Format("{0}/rss.php?uid={1}&passkey={2}", Settings.BaseUrl.Trim().TrimEnd('/'), Settings.UserId, Settings.RssPasskey), HttpAccept.Html); request.HttpRequest.AddCookie(Settings.Cookie); yield return request; }
private IEnumerable<IndexerRequest> GetRssRequests(String searchParameters) { var request = new IndexerRequest(Settings.BaseUrl.Trim().TrimEnd('/'), HttpAccept.Rss); if (Settings.Cookie.IsNotNullOrWhiteSpace()) { request.HttpRequest.AddCookie(Settings.Cookie); } yield return request; }
private IEnumerable<IndexerRequest> GetRssRequests() { var request = new IndexerRequest(string.Format("{0}/rss.php?uid={1}&passkey={2}", Settings.BaseUrl.Trim().TrimEnd('/'), Settings.UserId, Settings.RssPasskey), HttpAccept.Html); foreach (var cookie in HttpHeader.ParseCookies(Settings.Cookie)) { request.HttpRequest.Cookies[cookie.Key] = cookie.Value; } yield return request; }
private IEnumerable<IndexerRequest> GetRssRequests(string searchParameters) { var request = new IndexerRequest(Settings.BaseUrl.Trim().TrimEnd('/'), HttpAccept.Rss); if (Settings.Cookie.IsNotNullOrWhiteSpace()) { foreach (var cookie in HttpHeader.ParseCookies(Settings.Cookie)) { request.HttpRequest.Cookies[cookie.Key] = cookie.Value; } } yield return request; }
private IEnumerable <IndexerRequest> GetRequest(string searchParameters) { var filter = ""; if (searchParameters == null) { } var request = new IndexerRequest( $"{APIUrl}?{searchParameters}{filter}", HttpAccept.Json); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories) { var qParams = new NameValueCollection { { "tor[text]", term }, { "tor[srchIn][title]", "true" }, { "tor[srchIn][author]", "true" }, { "tor[searchType]", Settings.ExcludeVip ? "nVIP" : "all" }, // exclude VIP torrents { "tor[searchIn]", "torrents" }, { "tor[hash]", "" }, { "tor[sortType]", "default" }, { "tor[startNumber]", "0" }, { "thumbnails", "1" }, // gives links for thumbnail sized versions of their posters //{ "posterLink", "1"}, // gives links for a full sized poster //{ "dlLink", "1"}, // include the url to download the torrent { "description", "1" } // include the description //{"bookmarks", "0"} // include if the item is bookmarked or not }; var catList = Capabilities.Categories.MapTorznabCapsToTrackers(categories); if (catList.Any()) { var index = 0; foreach (var cat in catList) { qParams.Add("tor[cat][" + index + "]", cat); index++; } } else { qParams.Add("tor[cat][]", "0"); } var urlSearch = Settings.BaseUrl + "tor/js/loadSearchJSONbasic.php"; if (qParams.Count > 0) { urlSearch += $"?{qParams.GetQueryString()}"; } var request = new IndexerRequest(urlSearch, HttpAccept.Json); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null) { var searchUrl = Settings.BaseUrl + "api/v1/torrents"; // And this was option one from // https://github.com/Jackett/Jackett/pull/7166#discussion_r376817517 var queryCollection = new NameValueCollection(); var searchString = term; queryCollection.Add("extendedSearch", "false"); queryCollection.Add("freeleech", "false"); queryCollection.Add("index", "0"); queryCollection.Add("limit", "100"); queryCollection.Add("order", "desc"); queryCollection.Add("page", "search"); if (imdbId.IsNotNullOrWhiteSpace()) { queryCollection.Add("searchText", imdbId); } else { queryCollection.Add("searchText", searchString); } queryCollection.Add("sort", "d"); queryCollection.Add("section", "all"); queryCollection.Add("stereoscopic", "false"); queryCollection.Add("sweaudio", "false"); queryCollection.Add("swesub", "false"); queryCollection.Add("watchview", "false"); searchUrl += "?" + queryCollection.GetQueryString(); foreach (var cat in Capabilities.Categories.MapTorznabCapsToTrackers(categories)) { searchUrl += "&categories[]=" + cat; } var request = new IndexerRequest(searchUrl, HttpAccept.Json); request.HttpRequest.Headers.Add("Referer", Settings.BaseUrl); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null) { var searchUrl = Settings.BaseUrl + "torrents.php?" + string.Join(string.Empty, Capabilities.Categories.MapTorznabCapsToTrackers(categories).Select(cat => $"category[]={cat}&")); var queryCollection = new NameValueCollection { { "search", imdbId ?? term }, { "active", "0" }, { "options", "0" } }; // manually url encode parenthesis to prevent "hacking" detection searchUrl += queryCollection.GetQueryString().Replace("(", "%28").Replace(")", "%29").Replace(".", " "); var request = new IndexerRequest(searchUrl, HttpAccept.Rss); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, SearchCriteriaBase searchCriteria) { var qc = new NameValueCollection { { "adv_col", "on" }, { "postdate", "date" }, { "adv_sort", "date" }, { "q", term }, { "m", searchCriteria.Offset.ToString() }, { "max", searchCriteria.Limit?.ToString() ?? "100" } }; var searchUrl = string.Format("{0}/?{1}", Settings.BaseUrl.TrimEnd('/'), qc.GetQueryString()); var request = new IndexerRequest(searchUrl, HttpAccept.Json); yield return(request); }
static void Main(string[] args) { if (args.Length != 2) { Console.WriteLine("Usage: beagle-master-delete-button index-name uri-to-delete"); return; } string index_name = args [0]; LuceneQueryingDriver driver = new LuceneQueryingDriver(index_name, -1, true); Uri uri = new Uri(args [1], false); Uri uri_to_delete = RemapUri(driver, uri); LuceneIndexingDriver indexer = new LuceneIndexingDriver(index_name, false); Indexable indexable = new Indexable(uri_to_delete); indexable.Type = IndexableType.Remove; IndexerRequest request = new IndexerRequest(); request.Add(indexable); IndexerReceipt [] receipts = indexer.Flush(request); if (receipts == null || receipts.Length == 0) { Console.WriteLine("Uri {0} not found in {1}", uri, index_name); return; } IndexerRemovedReceipt r = receipts [0] as IndexerRemovedReceipt; if (r == null || r.NumRemoved == 0) { Console.WriteLine("Uri {0} not found in {1}", uri, index_name); return; } Console.WriteLine("Uri {0} deleted", uri); }
public IList <ReleaseInfo> ParseResponse(IndexerResponse indexerResponse) { var torrentInfos = new List <ReleaseInfo>(); var parser = new HtmlParser(); var dom = parser.ParseDocument(indexerResponse.Content); var domQuery = string.Empty; if (indexerResponse.Request.Url.Query.Contains("do=search")) { domQuery = ".searchitem > h3 > a"; } else { domQuery = "#dle-content > .story > .story_h > .lcol > h2 > a"; } var links = dom.QuerySelectorAll(domQuery); foreach (var link in links) { var url = link.GetAttribute("href"); var releaseRequest = new IndexerRequest(url, HttpAccept.Html); var releaseResponse = new IndexerResponse(releaseRequest, HttpClient.Execute(releaseRequest.HttpRequest)); // Throw common http errors here before we try to parse if (releaseResponse.HttpResponse.HasHttpError) { if ((int)releaseResponse.HttpResponse.StatusCode == 429) { throw new TooManyRequestsException(releaseRequest.HttpRequest, releaseResponse.HttpResponse); } else { throw new IndexerException(releaseResponse, "Http error code: " + releaseResponse.HttpResponse.StatusCode); } } torrentInfos.AddRange(ParseRelease(releaseResponse)); } return(torrentInfos.ToArray()); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null) { var searchUrl = string.Format("{0}/browse.php", Settings.BaseUrl.TrimEnd('/')); var parameters = new NameValueCollection(); var categoriesList = Capabilities.Categories.MapTorznabCapsToTrackers(categories); var searchterm = term; // Building our tracker query parameters.Add("incldead", "1"); parameters.Add("fullsearch", Settings.UseFullSearch ? "1" : "0"); parameters.Add("scenerelease", "0"); // If search term provided if (!string.IsNullOrWhiteSpace(imdbId)) { searchterm = "imdbsearch=" + imdbId; } else if (!string.IsNullOrWhiteSpace(term)) { searchterm = "search=" + term.UrlEncode(Encoding.GetEncoding(28591)); } else { // Showing all torrents (just for output function) searchterm = "search="; } var catQryStr = ""; foreach (var cat in categoriesList) { catQryStr += "&" + cat; } // Building our query searchUrl += "?" + searchterm + "&" + parameters.GetQueryString() + "&" + catQryStr; var request = new IndexerRequest(searchUrl, HttpAccept.Html); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null, int tmdbId = 0) { var body = new Dictionary <string, object> { { "action", "search" }, { "rsskey", Settings.RssKey } }; if (imdbId.IsNotNullOrWhiteSpace()) { body.Add("imdb_id", imdbId); } if (tmdbId > 0) { body.Add("tmdb_id", tmdbId); } if (term.IsNotNullOrWhiteSpace()) { body.Add("search", term); } var cats = Capabilities.Categories.MapTorznabCapsToTrackers(categories); if (cats.Count > 0) { body.Add("categories", string.Join(",", cats)); } var searchUrl = Settings.BaseUrl + "api/torrents/" + Settings.ApiKey; var request = new HttpRequest(searchUrl, HttpAccept.Json); request.Headers.Add("Content-type", "application/json"); request.Method = HttpMethod.Post; request.SetContent(body.ToJson()); var indexerRequest = new IndexerRequest(request); yield return(indexerRequest); }
private IEnumerable <IndexerRequest> GetRequest(string searchParameters) { Cookies = GetCookies(); Authenticate(); var request = new IndexerRequest( $"{Settings.BaseUrl.Trim().TrimEnd('/')}/torrents.php?action=advanced&json=noredirect&searchstr={searchParameters}", HttpAccept.Json); foreach (var cookie in Cookies) { request.HttpRequest.Cookies[cookie.Key] = cookie.Value; } CookiesUpdater(Cookies, DateTime.Now + TimeSpan.FromDays(30)); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term) { var searchTerm = term; if (string.IsNullOrWhiteSpace(searchTerm)) { searchTerm = DateTime.Now.Year.ToString(); } var qc = new NameValueCollection { { "q", searchTerm } }; var searchUrl = string.Format("{0}/api/search?{1}", Settings.BaseUrl.TrimEnd('/'), qc.GetQueryString()); var request = new IndexerRequest(searchUrl, HttpAccept.Json); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories) { // search cannot be blank and needs at least 3 characters if (term.IsNullOrWhiteSpace() || term.Length < 3) { yield break; } var qc = new NameValueCollection { { "size", "100" }, { "q", term } }; var searchUrl = string.Format("{0}/service/search?{1}", Settings.BaseUrl.TrimEnd('/'), qc.GetQueryString()); var request = new IndexerRequest(searchUrl, HttpAccept.Html); yield return(request); }
public override async Task <byte[]> Download(Uri link) { if (Settings.Freeleech) { _logger.Debug($"Attempting to use freeleech token for {link.AbsoluteUri}"); var idMatch = TorrentIdRegex.Match(link.AbsoluteUri); if (idMatch.Success) { var id = int.Parse(idMatch.Groups["id"].Value); var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); var freeleechUrl = Settings.BaseUrl + $"json/bonusBuy.php/{timestamp}"; var freeleechRequest = new HttpRequestBuilder(freeleechUrl) .AddQueryParam("spendtype", "personalFL") .AddQueryParam("torrentid", id) .AddQueryParam("timestamp", timestamp.ToString()) .Build(); var indexerReq = new IndexerRequest(freeleechRequest); var response = await FetchIndexerResponse(indexerReq).ConfigureAwait(false); var resource = Json.Deserialize <MyAnonamouseFreeleechResponse>(response.Content); if (resource.Success) { _logger.Debug($"Successfully to used freeleech token for torrentid ${id}"); } else { _logger.Debug($"Failed to use freeleech token: ${resource.Error}"); } } else { _logger.Debug($"Could not get torrent id from link ${link.AbsoluteUri}, skipping freeleech"); } } return(await base.Download(link).ConfigureAwait(false)); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null, int?season = null, string episode = null) { var qc = new NameValueCollection(); if (imdbId.IsNotNullOrWhiteSpace()) { qc.Add("imdbId", imdbId); } else { qc.Add("search", term); } if (season != null) { qc.Add("season", season.Value.ToString()); } if (episode != null) { qc.Add("episode", episode); } var cats = Capabilities.Categories.MapTorznabCapsToTrackers(categories); if (cats.Count > 0) { foreach (var cat in cats) { qc.Add("categories[]", cat); } } var searchUrl = Settings.BaseUrl + "/api/torrent?" + qc.GetQueryString(duplicateKeysIfMulti: true); var request = new IndexerRequest(searchUrl, HttpAccept.Json); request.HttpRequest.Headers.Set("Authorization", $"Bearer {Settings.ApiKey}"); yield return(request); }
public IList <ReleaseInfo> ParseResponse(IndexerResponse indexerResponse) { var torrentInfos = new List <ReleaseInfo>(); var parser = new HtmlParser(); var dom = parser.ParseDocument(indexerResponse.Content); var links = dom.QuerySelectorAll("a.ads-list__item__title"); foreach (var link in links) { var url = link.GetAttribute("href"); // Some URLs in search are broken if (url.StartsWith("//")) { url = "https:" + url; } var releaseRequest = new IndexerRequest(url, HttpAccept.Html); var releaseResponse = new IndexerResponse(releaseRequest, HttpClient.Execute(releaseRequest.HttpRequest)); // Throw common http errors here before we try to parse if (releaseResponse.HttpResponse.HasHttpError) { if ((int)releaseResponse.HttpResponse.StatusCode == 429) { throw new TooManyRequestsException(releaseRequest.HttpRequest, releaseResponse.HttpResponse); } else { throw new IndexerException(releaseResponse, "Http error code: " + releaseResponse.HttpResponse.StatusCode); } } torrentInfos.AddRange(ParseRelease(releaseResponse)); } return(torrentInfos.ToArray()); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories) { var apiUrl = Regex.Replace(Settings.BaseUrl, @"(https?:\/\/)(.*)", "$1api.$2v2"); var queryCollection = new NameValueCollection { { "limit", "100" }, { "filter", "names,code,torrents.list,season.year,type.string" } }; if (string.IsNullOrWhiteSpace(term)) { apiUrl += "/getUpdates?" + queryCollection.GetQueryString(); } else { apiUrl += "/searchTitles?" + queryCollection.GetQueryString() + "&search=" + Uri.EscapeDataString(term); } var request = new IndexerRequest(apiUrl, HttpAccept.Json); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null) { var searchString = term; var queryCollection = new NameValueCollection { { "apikey", Settings.ApiKey } }; queryCollection.Add("limit", "50"); // Default 30 queryCollection.Add("ponly", Settings.ProductsOnly ? "true" : "false"); foreach (var releaseType in Settings.ReleaseTypes) { queryCollection.Add("release_type", ((TorrentSyndikatReleaseTypes)releaseType).ToString().Replace("_", "-")); } if (imdbId != null) { queryCollection.Add("imdbId", imdbId); } else if (!string.IsNullOrWhiteSpace(searchString)) { // Suffix the first occurence of `s01` surrounded by whitespace with * // That way we also search for single episodes in a whole season search var regex = new Regex(@"(^|\s)(s\d{2})(\s|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase); queryCollection.Add("searchstring", regex.Replace(searchString.Trim(), @"$1$2*$3")); } var cats = string.Join(",", Capabilities.Categories.MapTorznabCapsToTrackers(categories)); if (!string.IsNullOrEmpty(cats)) { queryCollection.Add("cats", cats); } var searchUrl = string.Format("{0}/api_9djWe8Tb2NE3p6opyqnh/v1/browse.php?{1}", Settings.BaseUrl.TrimEnd('/'), queryCollection.GetQueryString()); var request = new IndexerRequest(searchUrl, HttpAccept.Html); yield return(request); }
private IEnumerable <IndexerRequest> GetRequest(string searchParameters) { var request = new IndexerRequest( $"{Settings.BaseUrl.Trim().TrimEnd('/')}/torrents.php?action=advanced&json=noredirect&searchstr={searchParameters}", HttpAccept.Json); request.HttpRequest.Headers["ApiUser"] = Settings.APIUser; request.HttpRequest.Headers["ApiKey"] = Settings.APIKey; if (Settings.APIKey.IsNullOrWhiteSpace()) { foreach (var cookie in Cookies) { request.HttpRequest.Cookies[cookie.Key] = cookie.Value; } CookiesUpdater(Cookies, DateTime.Now + TimeSpan.FromDays(30)); } yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null) { var search = new[] { imdbId, term }; var qc = new NameValueCollection { { "api", "" }, { "passkey", Settings.Passkey }, { "search", string.Join(" ", search.Where(s => s.IsNotNullOrWhiteSpace())) } }; foreach (var cat in Capabilities.Categories.MapTorznabCapsToTrackers(categories)) { qc.Add("categories[" + cat + "]", "1"); } var searchUrl = string.Format("{0}/browse.php?{1}", Settings.BaseUrl.TrimEnd('/'), qc.GetQueryString()); var request = new IndexerRequest(searchUrl, HttpAccept.Json); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(int maxPages, int?series_id = null, string episode = null, string season = null, DateTime?air_date = null) { var pageSize = PageSize; if (pageSize == 0) { maxPages = 1; pageSize = 100; } for (var page = 0; page < maxPages; page++) { var request = new IndexerRequest(string.Format("{0}/torrents?offset={1}&limit={2}", Settings.BaseUrl.TrimEnd('/'), page * pageSize, pageSize), HttpAccept.Json); request.HttpRequest.Headers.Add("X-Authorization", Settings.ApiKey); if (series_id.HasValue) { request.HttpRequest.AddQueryParam("series_id", series_id.Value.ToString(CultureInfo.InvariantCulture)); } if (season != null) { request.HttpRequest.AddQueryParam("season", season); } if (episode != null) { request.HttpRequest.AddQueryParam("episode", episode); } if (air_date.HasValue) { request.HttpRequest.AddQueryParam("air_date", air_date.Value.ToString("yyyy-MM-dd")); } yield return(request); } }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null) { var searchUrl = string.Format("{0}/api/v1/torrents", Settings.BaseUrl.TrimEnd('/')); var parameters = new NameValueCollection(); parameters.Add("extendedSearch", "false"); parameters.Add("freeleech", "false"); parameters.Add("index", "0"); parameters.Add("limit", "100"); parameters.Add("order", "desc"); parameters.Add("page", "search"); if (imdbId.IsNotNullOrWhiteSpace()) { parameters.Add("searchText", imdbId); } else { parameters.Add("searchText", term); } parameters.Add("sort", "d"); parameters.Add("section", "all"); parameters.Add("stereoscopic", "false"); parameters.Add("watchview", "false"); searchUrl += "?" + parameters.GetQueryString(); foreach (var cat in Capabilities.Categories.MapTorznabCapsToTrackers(categories)) { searchUrl += "&categories[]=" + cat; } var request = new IndexerRequest(searchUrl, HttpAccept.Json); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories) { var searchUrl = string.Format("{0}/retorno/2/index.php", Settings.BaseUrl.TrimEnd('/')); var qc = new NameValueCollection { { "page", "torrents" }, { "search", term }, { "active", "0" } }; searchUrl = searchUrl + "?" + qc.GetQueryString(); // categories are already encoded foreach (var cat in Capabilities.Categories.MapTorznabCapsToTrackers(categories)) { searchUrl += "&" + cat; } var request = new IndexerRequest(searchUrl, HttpAccept.Html); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null) { var searchUrl = Settings.BaseUrl + "browse.php?"; if (term.IsNotNullOrWhiteSpace()) { searchUrl += string.Format("do=search&keywords={0}&search_type=t_name&category=0&include_dead_torrents=no", WebUtility.UrlEncode(term)); } if (categories != null && categories.Length > 0) { if (term.IsNotNullOrWhiteSpace()) { searchUrl += "&"; } searchUrl += "selectedcats2=" + string.Join(",", Capabilities.Categories.MapTorznabCapsToTrackers(categories)); } var request = new IndexerRequest(searchUrl, HttpAccept.Html); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term) { var searchString = term; var searchUrl = Settings.BaseUrl + "browse.php?only=0&incomplete=1&lossless=1&hd=1&multiaudio=1&bonus=1&reorder=1&q="; if (Settings.AdultContent) { searchUrl = Settings.BaseUrl + "browse.php?only=0&hentai=1&incomplete=1&lossless=1&hd=1&multiaudio=1&bonus=1&reorder=1&q="; } var match = Regex.Match(term, @".*(?=\s(?:[Ee]\d+|\d+)$)"); if (match.Success) { searchString = match.Value; } var episodeSearchUrl = searchUrl + WebUtility.UrlEncode(searchString); var request = new IndexerRequest(episodeSearchUrl, null); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories) { var searchUrl = string.Format("{0}/forum/tracker.php", Settings.BaseUrl.TrimEnd('/')); var searchString = term; // NameValueCollection don't support cat[]=19&cat[]=6 var qc = new List <KeyValuePair <string, string> > { { "o", "1" }, { "s", "2" } }; // if the search string is empty use the getnew view if (string.IsNullOrWhiteSpace(searchString)) { qc.Add("nm", searchString); } else { // use the normal search searchString = searchString.Replace("-", " "); qc.Add("nm", searchString); } foreach (var cat in Capabilities.Categories.MapTorznabCapsToTrackers(categories)) { qc.Add("f[]", cat); } searchUrl = searchUrl + "?" + qc.GetQueryString(); var request = new IndexerRequest(searchUrl, HttpAccept.Html); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null, int tmdbId = 0, int tvdbId = 0) { var qc = new NameValueCollection { { "search", term }, { "api_token", Settings.ApiKey }, }; if (imdbId.IsNotNullOrWhiteSpace()) { qc.Add("imdb", imdbId); } if (tmdbId > 0) { qc.Add("tmdb", tmdbId.ToString()); } if (tvdbId > 0) { qc.Add("tvdb", tvdbId.ToString()); } var searchUrl = string.Format("{0}/api/torrents/v2/filter?{1}", Settings.BaseUrl.TrimEnd('/'), qc.GetQueryString()); foreach (var cat in Capabilities.Categories.MapTorznabCapsToTrackers(categories)) { searchUrl += $"&categories[]={cat}"; } var request = new HttpRequest(searchUrl, HttpAccept.Json); var indexerRequest = new IndexerRequest(request); yield return(indexerRequest); }
private IEnumerable <IndexerRequest> GetRequest(string searchParameters) { Authenticate(); var filter = ""; if (searchParameters == null) { } var request = new IndexerRequest( $"{Settings.BaseUrl.Trim().TrimEnd('/')}/ajax.php?action=browse&searchstr={searchParameters}{filter}", HttpAccept.Json); var cookies = AuthCookieCache.Find(Settings.BaseUrl.Trim().TrimEnd('/')); foreach (var cookie in cookies) { request.HttpRequest.Cookies[cookie.Key] = cookie.Value; } yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories) { var searchString = term; // replace any space, special char, etc. with % (wildcard) var replaceRegex = new Regex("[^a-zA-Z0-9]+"); searchString = replaceRegex.Replace(searchString, "%"); var searchUrl = Settings.BaseUrl + "ajax/torrents_data.php"; var searchUrlReferer = Settings.BaseUrl + "torrents.php?cat=0&searchin=filename&search="; var trackerCats = Capabilities.Categories.MapTorznabCapsToTrackers(categories) ?? new List <string>(); var queryCollection = new NameValueCollection { { "total", "146" }, // Not sure what this is about but its required! { "cat", trackerCats.Count == 1 ? trackerCats.First() : "0" }, { "page", "1" }, { "searchin", "filename" }, { "search", searchString } }; searchUrl += "?" + queryCollection.GetQueryString(); var extraHeaders = new NameValueCollection { { "X-Requested-With", "XMLHttpRequest" }, { "Referer", searchUrlReferer } }; var request = new IndexerRequest(searchUrl, null); request.HttpRequest.Headers.Add(extraHeaders); yield return(request); }
private IEnumerable <IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null) { var searchUrl = string.Format("{0}/browse.php", Settings.BaseUrl.TrimEnd('/')); var qc = new List <KeyValuePair <string, string> > // NameValueCollection don't support cat[]=19&cat[]=6 { { "st", "1" } // search in title }; if (imdbId.IsNotNullOrWhiteSpace()) { qc.Add("search", imdbId); qc.Add("sd", "1"); // search in description } else { qc.Add("search", term); } // parse categories and tags var catGroups = new HashSet <string>(); // HashSet instead of List to avoid duplicates var tagGroups = new HashSet <string>(); var cats = Capabilities.Categories.MapTorznabCapsToTrackers(categories); foreach (var cat in cats) { // "cat[]=7&tags=x264" var cSplit = cat.Split('&'); var gSplit = cSplit[0].Split('='); if (gSplit.Length > 1) { catGroups.Add(gSplit[1]); // category = 7 } if (cSplit.Length > 1) { var tSplit = cSplit[1].Split('='); if (tSplit.Length > 1) { tagGroups.Add(tSplit[1]); // tag = x264 } } } // add categories foreach (var cat in catGroups) { qc.Add("cat[]", cat); } // do not include too many tags as it'll mess with their servers if (tagGroups.Count < 7) { qc.Add("tags", string.Join(",", tagGroups)); // if tags are specified match any // if no tags are specified match all, with any we get random results qc.Add("tf", tagGroups.Any() ? "any" : "all"); } searchUrl = searchUrl + "?" + qc.GetQueryString(); var request = new IndexerRequest(searchUrl, HttpAccept.Html); yield return(request); }
protected override void ModifyRequest(IndexerRequest request) { request.HttpRequest.Headers.Set("Authorization", $"Bearer {Settings.ApiKey}"); }
private IEnumerable<IndexerRequest> GetPagedRequests(int maxPages, int? series_id = null, string episode = null, string season = null, DateTime? air_date = null) { var pageSize = PageSize; if (pageSize == 0) { maxPages = 1; pageSize = 100; } for (var page = 0; page < maxPages; page++) { var request = new IndexerRequest(string.Format("{0}/torrents?offset={1}&limit={2}", Settings.BaseUrl.TrimEnd('/'), page * pageSize, pageSize), HttpAccept.Json); request.HttpRequest.Headers.Add("X-Authorization", Settings.ApiKey); if (series_id.HasValue) { request.HttpRequest.AddQueryParam("series_id", series_id.Value.ToString(CultureInfo.InvariantCulture)); } if (season != null) { request.HttpRequest.AddQueryParam("season", season); } if (episode != null) { request.HttpRequest.AddQueryParam("episode", episode); } if (air_date.HasValue) { request.HttpRequest.AddQueryParam("air_date", air_date.Value.ToString("yyyy-MM-dd")); } yield return request; } }
private IEnumerable<IndexerRequest> GetPagedRequests(int maxPages, string rssType, params string[] searchParameters) { string searchUrl = null; if (searchParameters.Any()) { // Prevent adding a '/' if no search parameters are specified if (Settings.VerifiedOnly) { searchUrl = string.Format("/{0} verified:1", string.Join(" ", searchParameters)); } else { searchUrl = string.Format("/{0}", string.Join(" ", searchParameters)).Trim(); } } if (PageSize == 0) { var request = new IndexerRequest(string.Format("{0}/{1}{2}/?rss=1&field=time_add&sorder=desc", Settings.BaseUrl.TrimEnd('/'), rssType, searchUrl), HttpAccept.Rss); request.HttpRequest.SuppressHttpError = true; yield return request; } else { for (var page = 0; page < maxPages; page++) { var request = new IndexerRequest(string.Format("{0}/{1}{2}/{3}/?rss=1&field=time_add&sorder=desc", Settings.BaseUrl.TrimEnd('/'), rssType, searchUrl, page + 1), HttpAccept.Rss); request.HttpRequest.SuppressHttpError = true; yield return request; } } }