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;
        }
Example #5
0
        private IEnumerable <IndexerRequest> GetRequest(string searchParameters)
        {
            var filter = "";

            if (searchParameters == null)
            {
            }

            var request =
                new IndexerRequest(
                    $"{APIUrl}?{searchParameters}{filter}",
                    HttpAccept.Json);

            yield return(request);
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #9
0
        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);
        }
Example #10
0
    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);
    }
Example #11
0
        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());
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #15
0
        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);
        }
Example #16
0
        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);
        }
Example #17
0
        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));
        }
Example #18
0
        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);
        }
Example #19
0
        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());
        }
Example #20
0
        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);
        }
Example #21
0
        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);
        }
Example #22
0
        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);
        }
Example #23
0
        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);
            }
        }
Example #25
0
        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);
        }
Example #26
0
        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);
        }
Example #27
0
        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);
        }
Example #28
0
        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);
        }
Example #29
0
        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);
        }
Example #30
0
        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);
        }
Example #32
0
        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);
        }
Example #33
0
        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);
        }
Example #34
0
 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;
                }
            }
        }