public ConfigurationDataBasicLoginWith2FA(string instructionMessageOptional = null)
 {
     Username      = new StringConfigurationItem("Username");
     Password      = new StringConfigurationItem("Password");
     TwoFactorAuth = new StringConfigurationItem("Two-Factor Auth");
     Instructions  = new DisplayInfoConfigurationItem("", instructionMessageOptional);
 }
 public ConfigurationDataBasicLoginWithRSSAndDisplay(string instructionMessageOptional = null)
 {
     Username     = new StringConfigurationItem("Username");
     Password     = new StringConfigurationItem("Password");
     RSSKey       = new HiddenStringConfigurationItem("RSSKey");
     Instructions = new DisplayInfoConfigurationItem("", instructionMessageOptional);
 }
Ejemplo n.º 3
0
 public ConfigurationDataXthor()
     : base()
 {
     CredentialsWarning = new DisplayInfoConfigurationItem("Credentials", "<b>Credentials Configuration</b> (<i>Private Tracker</i>),<br /><br /> <ul><li><b>PassKey</b> is your private key on your account</li></ul>");
     PassKey            = new StringConfigurationItem("PassKey")
     {
         Value = ""
     };
     Accent = new StringConfigurationItem("Accent")
     {
         Value = ""
     };
     PagesWarning = new DisplayInfoConfigurationItem("Preferences", "<b>Preferences Configuration</b> (<i>Tweak your search settings</i>),<br /><br /> <ul><li><b>Freeleech Only</b> let you search <u>only</u> for torrents which are marked Freeleech.</li><li><b>Replace MULTI</b>, replace multi keyword in the resultset (leave empty  to deactivate)</li><li><b>Enhanced anime search</b>, Enhance sonarr compatibility with Xthor. Only effective on requests with the <u>TVAnime Torznab category</u>.</li><li><b>Accent</b> is the french accent you want. 1 for VFF (Truefrench) 2 for VFQ (FRENCH, canada). When one is selected, the other will not be searched.</li></ul>");
     Freeleech    = new BoolConfigurationItem("Freeleech Only (Optional)")
     {
         Value = false
     };
     ReplaceMulti = new StringConfigurationItem("Replace MULTI")
     {
         Value = "MULTI.FRENCH"
     };
     EnhancedAnime = new BoolConfigurationItem("Enhanced anime search")
     {
         Value = false
     };
     Vostfr = new BoolConfigurationItem("Replace VOSTFR or SUBFRENCH with ENGLISH")
     {
         Value = false
     };
 }
 public ConfigurationDataAbnormal()
     : base()
 {
     AuthKey = new HiddenStringConfigurationItem("AuthKey")
     {
         Value = ""
     };
     TorrentPass = new HiddenStringConfigurationItem("TorrentPass")
     {
         Value = ""
     };
     CredentialsWarning = new DisplayInfoConfigurationItem("Credentials", "<b>Credentials Configuration</b> (<i>Private Tracker</i>),<br /><br /> <ul><li><b>Username</b> is your account name on this tracker.</li><li><b>Password</b> is your password associated to your account name.</li></ul>");
     Username           = new StringConfigurationItem("Username")
     {
         Value = ""
     };
     Password = new StringConfigurationItem("Password")
     {
         Value = ""
     };
     PagesWarning = new DisplayInfoConfigurationItem("Preferences", "<b>Preferences Configuration</b> (<i>Tweak your search settings</i>),<br /><br /> <ul><li><b>Replace MULTI</b>, replace multi keyword in the resultset (leave empty  to deactivate)</li><li><b>Max Pages to Process</b> let you specify how many page (max) Jackett can process when doing a search. Setting a value <b>higher than 4 is dangerous</b> for you account ! (<b>Result of too many requests to tracker...that <u>will be suspect</u></b>).</li></ul>");
     Pages        = new StringConfigurationItem("Max Pages to Process (Required)")
     {
         Value = "4"
     };
     ReplaceMulti = new StringConfigurationItem("Replace MULTI")
     {
         Value = "MULTI.FRENCH"
     };
 }
 public ConfigurationDataBeyondHDApi(string instructionMessageOptional)
 {
     ApiKey                   = new StringConfigurationItem("API Key");
     RSSKey                   = new StringConfigurationItem("RSS Key");
     Instructions             = new DisplayInfoConfigurationItem("", instructionMessageOptional);
     AddHybridFeaturesToTitle = new BoolConfigurationItem("Include DV/HDR10 in title when release has multiple HDR formats.");
 }
Ejemplo n.º 6
0
 public ConfigurationDataMyAnonamouse()
 {
     MamId        = new StringConfigurationItem("mam_id");
     MamIdHint    = new DisplayInfoConfigurationItem("mam_id instructions", "Go to your <a href=\"https://www.myanonamouse.net/preferences/index.php?view=security\" target=\"_blank\">security preferences</a> and create a new session for the IP used by the Jackett server. Then paste the resulting mam_id value into the mam_id field here.");
     ExcludeVip   = new BoolConfigurationItem("Exclude VIP torrents");
     Instructions = new DisplayInfoConfigurationItem("", "For best results, change the 'Torrents per page' setting to 100 in your Profile => Torrent tab.");
 }
Ejemplo n.º 7
0
 public ConfigurationDataNorbits()
 {
     CredentialsWarning = new DisplayInfoConfigurationItem("Credentials", "<b>Credentials Configuration</b> (<i>Private Tracker</i>),<br /><br /> <ul><li><b>Username</b> is your account name on this tracker.</li><li><b>Password</b> is your password associated to your account name.</li></ul>");
     Username = new StringConfigurationItem("Username") { Value = "" };
     Password = new StringConfigurationItem("Password") { Value = "" };
     PagesWarning = new DisplayInfoConfigurationItem("Preferences", "<b>Preferences Configuration</b> (<i>Tweak your search settings</i>),<br /><br /> <ul><li><b>Max Pages to Process</b> let you specify how many page (max) Jackett can process when doing a search. Setting a value <b>higher than 4 is dangerous</b> for you account ! (<b>Result of too many requests to tracker...that <u>will be suspect</u></b>).</li></ul>");
     Pages = new StringConfigurationItem("Max Pages to Process (Required)") { Value = "4" };
     UseFullSearch = new BoolConfigurationItem("Enable search in description.") { Value = false };
     SecurityWarning = new DisplayInfoConfigurationItem("Security", "<b>Security Configuration</b> (<i>Read this area carefully !</i>),<br /><br /> <ul><li><b>Latency Simulation</b> will simulate human browsing with Jacket by pausing Jacket for an random time between each request, to fake a real content browsing.</li><li><b>Browser Simulation</b> will simulate a real human browser by injecting additionals headers when doing requests to tracker.<b>You must enable it to use this provider!</b></li></ul>");
     Latency = new BoolConfigurationItem("Latency Simulation (Optional)") { Value = false };
     Browser = new BoolConfigurationItem("Browser Simulation (Forced)") { Value = true };
     LatencyWarning = new DisplayInfoConfigurationItem("Simulate Latency", "<b>Latency Configuration</b> (<i>Required if latency simulation enabled</i>),<br /><br/> <ul><li>By filling this range, <b>Jackett will make a random timed pause</b> <u>between requests</u> to tracker <u>to simulate a real browser</u>.</li><li>MilliSeconds <b>only</b></li></ul>");
     LatencyStart = new StringConfigurationItem("Minimum Latency (ms)") { Value = "1589" };
     LatencyEnd = new StringConfigurationItem("Maximum Latency (ms)") { Value = "3674" };
     HeadersWarning = new DisplayInfoConfigurationItem("Injecting headers", "<b>Browser Headers Configuration</b> (<i>Required if browser simulation enabled</i>),<br /><br /> <ul><li>By filling these fields, <b>Jackett will inject headers</b> with your values <u>to simulate a real browser</u>.</li><li>You can get <b>your browser values</b> here: <a href='https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending' target='blank'>www.whatismybrowser.com</a></li></ul><br /><i><b>Note that</b> some headers are not necessary because they are injected automatically by this provider such as Accept_Encoding, Connection, Host or X-Requested-With</i>");
     HeaderAccept = new StringConfigurationItem("Accept") { Value = "" };
     HeaderAcceptLang = new StringConfigurationItem("Accept-Language") { Value = "" };
     HeaderDnt = new BoolConfigurationItem("DNT") { Value = false };
     HeaderUpgradeInsecure = new BoolConfigurationItem("Upgrade-Insecure-Requests") { Value = false };
     HeaderUserAgent = new StringConfigurationItem("User-Agent") { Value = "" };
     DevWarning = new DisplayInfoConfigurationItem("Development", "<b>Development Facility</b> (<i>For Developers ONLY</i>),<br /><br /> <ul><li>By enabling development mode, <b>Jackett will bypass his cache</b> and will <u>output debug messages to console</u> instead of his log file.</li><li>By enabling Hard Drive Cache, <b>This provider</b> will <u>save each query answers from tracker</u> in temp directory, in fact this reduce drastically HTTP requests when building a provider at parsing step for example. So, <b> Jackett will search for a cached query answer on hard drive before executing query on tracker side !</b> <i>DEV MODE must be enabled to use it !</li></ul>");
     DevMode = new BoolConfigurationItem("Enable DEV MODE (Developers ONLY)") { Value = false };
     HardDriveCache = new BoolConfigurationItem("Enable HARD DRIVE CACHE (Developers ONLY)") { Value = false };
     HardDriveCacheKeepTime = new StringConfigurationItem("Keep Cached files for (ms)") { Value = "300000" };
 }
Ejemplo n.º 8
0
        public ConfigurationDataTVstore(JToken json)
        {
            var configData = new ConfigurationDataTVstore();

            dynamic configArray = JsonConvert.DeserializeObject(json.ToString());

            foreach (var config in configArray)
            {
                var propertyName = UppercaseFirst((string)config.id);
                switch (propertyName)
                {
                case "Username":
                    Username = new StringConfigurationItem(propertyName)
                    {
                        Value = config.value
                    };
                    break;

                case "Password":
                    Password = new StringConfigurationItem(propertyName)
                    {
                        Value = config.value
                    };
                    break;

                default:
                    break;
                }
            }
        }
Ejemplo n.º 9
0
        public override async Task <ConfigurationData> GetConfigurationForSetup()
        {
            var loginPage = await RequestWithCookiesAsync(LandingUrl);

            var parser      = new HtmlParser();
            var dom         = parser.ParseDocument(loginPage.ContentString);
            var qCaptchaImg = dom.QuerySelector("img#regimage");

            if (qCaptchaImg != null)
            {
                var captchaUrl           = qCaptchaImg.GetAttribute("src");
                var captchaImageResponse = await RequestWithCookiesAsync(captchaUrl, loginPage.Cookies, RequestType.GET, LandingUrl);

                var captchaText  = new StringConfigurationItem("Captcha Text");
                var captchaImage = new DisplayImageConfigurationItem("Captcha Image")
                {
                    Value = captchaImageResponse.ContentBytes
                };

                configData.AddDynamic("CaptchaText", captchaText);
                configData.AddDynamic("CaptchaImage", captchaImage);
            }
            else
            {
                logger.Debug($"{Id}: No captcha image found");
            }

            return(configData);
        }
 public ConfigurationDataBasicLoginWithPID(string instructionMessageOptional = null)
 {
     Username = new StringConfigurationItem("Username");
     Password = new StringConfigurationItem("Password");
     Pid = new StringConfigurationItem("Pid");
     Instructions = new DisplayInfoConfigurationItem("", instructionMessageOptional);
 }
Ejemplo n.º 11
0
 public ConfigurationDataBasicLoginWithFilter(string FilterInstructions)
 {
     Username          = new StringConfigurationItem("Username");
     Password          = new StringConfigurationItem("Password");
     LastLoggedInCheck = new HiddenStringConfigurationItem("LastLoggedInCheck");
     FilterExample     = new DisplayInfoConfigurationItem("", FilterInstructions);
     FilterString      = new StringConfigurationItem("Filters (optional)");
 }
Ejemplo n.º 12
0
 public ConfigurationDataCookie(string instructionMessageOptional = null)
 {
     Cookie             = new StringConfigurationItem("Cookie");
     CookieInstructions = new DisplayInfoConfigurationItem("Cookie Instructions",
                                                           "Please enter the cookie for the site manually. <a href=\"https://github.com/Jackett/Jackett/wiki/Finding-cookies\" target=\"_blank\">See here</a> on how get the cookies." +
                                                           "<br>Example cookie header (usually longer than this):<br><code>PHPSESSID=8rk27odm; ipsconnect_63ad9c=1; more_stuff=etc;</code>");
     Instructions = new DisplayInfoConfigurationItem("", instructionMessageOptional);
 }
 /// <param name="instructionMessageOptional">Enter any instructions the user will need to setup the tracker</param>
 public ConfigurationDataCaptchaLogin(string instructionMessageOptional = null)
 {
     Username      = new StringConfigurationItem("Username");
     Password      = new StringConfigurationItem("Password");
     CaptchaImage  = new DisplayImageConfigurationItem("Captcha Image");
     CaptchaText   = new StringConfigurationItem("Captcha Text");
     CaptchaCookie = new HiddenStringConfigurationItem("Captcha Cookie");
     Instructions  = new DisplayInfoConfigurationItem("", instructionMessageOptional);
 }
Ejemplo n.º 14
0
 public ConfigurationDataAniLibria() : base()
 {
     ApiLink = new StringConfigurationItem("API Url")
     {
         Value = "https://api.anilibria.tv/v2/"
     };
     StaticLink = new StringConfigurationItem("Static Url")
     {
         Value = "https://static.anilibria.tv/"
     };
 }
Ejemplo n.º 15
0
 public ConfigurationDataTVstore()
 {
     Username = new StringConfigurationItem("Username")
     {
         Value = ""
     };
     Password = new StringConfigurationItem("Password")
     {
         Value = ""
     };
 }
Ejemplo n.º 16
0
        public EraiRaws(IIndexerConfigurationService configService, Utils.Clients.WebClient wc, Logger l,
                        IProtectionService ps, ICacheService cs)
            : base(id: "erai-raws",
                   name: "Erai-Raws",
                   description: "Erai-Raws is a team release site for Anime subtitles.",
                   link: "https://www.erai-raws.info/",
                   caps: new TorznabCapabilities
        {
            TvSearchParams = new List <TvSearchParam>
            {
                TvSearchParam.Q
            }
        },
                   configService: configService,
                   client: wc,
                   logger: l,
                   p: ps,
                   cacheService: cs,
                   configData: new ConfigurationData())
        {
            Encoding = Encoding.UTF8;
            Language = "en-US";
            Type     = "semi-private";

            var rssKey = new StringConfigurationItem("RSSKey")
            {
                Value = ""
            };

            configData.AddDynamic("rssKey", rssKey);
            configData.AddDynamic("rssKeyHelp", new DisplayInfoConfigurationItem(string.Empty, "Find the RSS Key by accessing <a href=\"https://www.erai-raws.info/rss-page/\" target =_blank>Erai-Raws RSS page</a> while you're logged in. Copy the <i>All RSS</i> URL, the RSS Key is the last part. Example: for the URL <b>.../feed/?type=torrent&0879fd62733b8db8535eb1be2333</b> the RSS Key is <b>0879fd62733b8db8535eb1be2333</b>"));

            configData.AddDynamic(
                "DDoS-Guard",
                new DisplayInfoConfigurationItem("", "This site may use DDoS-Guard Protection, therefore Jackett requires <a href='https://github.com/Jackett/Jackett#configuring-flaresolverr' target='_blank'>FlareSolverr</a> to access it.")
                );
            // Add note that download stats are not available
            configData.AddDynamic(
                "download-stats-unavailable",
                new DisplayInfoConfigurationItem("", "<p>Please note that the following stats are not available for this indexer. Default values are used instead. </p><ul><li>Files</li><li>Seeders</li><li>Leechers</li></ul>")
                );

            configData.AddDynamic("include-subs", new BoolConfigurationItem("Enable appending SubTitles to the Title"));

            // Config item for title detail parsing
            configData.AddDynamic("title-detail-parsing", new BoolConfigurationItem("Enable Title Detail Parsing"));
            configData.AddDynamic(
                "title-detail-parsing-help",
                new DisplayInfoConfigurationItem("", "Title Detail Parsing will attempt to determine the season and episode number from the release names and reformat them as a suffix in the format S1E1. If successful, this should provide better matching in applications such as Sonarr.")
                );

            // Configure the category mappings
            AddCategoryMapping(1, TorznabCatType.TVAnime, "Anime - Sub");
        }
Ejemplo n.º 17
0
 public ConfigurationDataCookieUA(string instructionMessageOptional = null)
 {
     Cookie             = new StringConfigurationItem("Cookie");
     CookieInstructions = new DisplayInfoConfigurationItem("Cookie Instructions",
                                                           "Please enter the cookie for the site manually. <a href=\"https://github.com/Jackett/Jackett/wiki/Finding-cookies\" target=\"_blank\">See here</a> on how get the cookies." +
                                                           "<br>Example cookie header (usually longer than this):<br><code>PHPSESSID=8rk27odm; ipsconnect_63ad9c=1; more_stuff=etc;</code>");
     UserAgent             = new StringConfigurationItem("User-Agent");
     UserAgentInstructions = new DisplayInfoConfigurationItem("User Agent Instructions",
                                                              "<ol><li>From the same place you fetched the cookie,<li>Find <b>'user-agent:'</b> in the <b>Request Headers</b> section<li><b>Select</b>" +
                                                              "and <b>Copy</b> the whole user-agent string <i>(everything after 'user-agent: ')</i> and <b>Paste</b> here.</ol>");
     Instructions = new DisplayInfoConfigurationItem("", instructionMessageOptional);
 }
Ejemplo n.º 18
0
        public ConfigurationDataGazelleTracker(bool has2Fa    = false, bool supportsFreeleechToken = false,
                                               bool useApiKey = false, bool usePassKey             = false,
                                               string instructionMessageOptional = null)
        {
            if (useApiKey)
            {
                ApiKey = new StringConfigurationItem("APIKey");
            }
            else
            {
                Username = new StringConfigurationItem("Username");
                Password = new PasswordConfigurationItem("Password");
            }

            if (has2Fa)
            {
                CookieHint = new DisplayInfoConfigurationItem("CookieHint",
                                                              @"Use the Cookie field only if 2FA is enabled for your account, let it empty otherwise.
<ol><li>Login to this tracker with your browser
<li>Open the <b>DevTools</b> panel by pressing <b>F12</b>
<li>Select the <b>Network</b> tab
<li>Click on the <b>Doc</b> button
<li>Refresh the page by pressing <b>F5</b>
<li>Select the <b>Headers</b> tab
<li>Find 'cookie:' in the <b>Request Headers</b> section
<li>Copy & paste the whole cookie string to here.</ol>");
                CookieItem = new StringConfigurationItem("Cookie")
                {
                    Value = ""
                };
            }

            if (usePassKey)
            {
                PassKey = new StringConfigurationItem("Passkey");
            }

            if (supportsFreeleechToken)
            {
                UseTokenItem = new BoolConfigurationItem("Use Freeleech Tokens when Available")
                {
                    Value = false
                }
            }
            ;

            Instructions = new DisplayInfoConfigurationItem("", instructionMessageOptional);
        }
    }
        public ConfigurationDataAPILoginWithUserAndPasskeyAndFilter(string FilterInstructions)
        {
            KeyHint = new DisplayInfoConfigurationItem("API Authentication", "<ul><li>Visit the security tab on your user settings page to access your ApiUser and ApiKey <li>If you haven't yet generated a key, you may have to first generate one using the checkbox below your keys</ul>");
            User    = new StringConfigurationItem("ApiUser")
            {
                Value = string.Empty
            };
            Key = new StringConfigurationItem("ApiKey")
            {
                Value = string.Empty
            };

            FilterExample = new DisplayInfoConfigurationItem("", FilterInstructions);
            FilterString  = new StringConfigurationItem("Filters (optional)");
        }
Ejemplo n.º 20
0
 public ConfigurationDataEliteTracker()
 {
     TorrentHTTPSMode = new BoolConfigurationItem("Use HTTPS for tracker URL")
     {
         Value = false
     };
     PagesWarning = new DisplayInfoConfigurationItem("Preferences", "<b>Preferences Configuration</b> (<i>Tweak your search settings</i>),<br /><br /> <ul><li><b>Replace MULTI</b>, replace multi keyword in the resultset (leave empty  to deactivate)</li><li><b>Replace VOSTFR with ENGLISH</b> lets you change the titles by replacing VOSTFR with ENGLISH.</li></ul>");
     ReplaceMulti = new StringConfigurationItem("Replace MULTI")
     {
         Value = "MULTI.FRENCH"
     };
     Vostfr = new BoolConfigurationItem("Replace VOSTFR with ENGLISH")
     {
         Value = false
     };
 }
Ejemplo n.º 21
0
 public ConfigurationDataXthor()
     : base()
 {
     CredentialsWarning = new DisplayInfoConfigurationItem("Credentials", "<b>Credentials Configuration</b> (<i>Private Tracker</i>),<br /><br /> <ul><li><b>PassKey</b> is your private key on your account</li></ul>");
     PassKey            = new StringConfigurationItem("PassKey")
     {
         Value = ""
     };
     Accent = new StringConfigurationItem("Accent")
     {
         Value = ""
     };
     PagesWarning = new DisplayInfoConfigurationItem("Preferences", "<b>Preferences Configuration</b> (<i>Tweak your search settings</i>),<br /><br /> <ul><li><b>Freeleech Only</b> let you search <u>only</u> for torrents which are marked Freeleech.</li><li><b>Replace MULTI</b>, replace multi keyword in the resultset (leave empty  to deactivate)</li><li><b>Enhanced anime search</b>, Enhance sonarr compatibility with Xthor. Only effective on requests with the <u>TVAnime Torznab category</u>.</li><li><b>Accent</b> is the french accent you want. 1 for VFF (Truefrench) 2 for VFQ (FRENCH, canada). When one is selected, the other will not be searched.</li></ul>");
     Freeleech    = new BoolConfigurationItem("Freeleech Only (Optional)")
     {
         Value = false
     };
     ReplaceMulti = new StringConfigurationItem("Replace MULTI")
     {
         Value = "MULTI.FRENCH"
     };
     EnhancedAnime = new BoolConfigurationItem("Enhanced anime search")
     {
         Value = false
     };
     DevWarning = new DisplayInfoConfigurationItem("Development", "<b>Development Facility</b> (<i>For Developers ONLY</i>),<br /><br /> <ul><li>By enabling development mode, <b>Jackett will bypass his cache</b> and will <u>output debug messages to console</u> instead of his log file.</li><li>By enabling Hard Drive Cache, <b>This provider</b> will <u>save each query answers from tracker</u> in temp directory, in fact this reduce drastically HTTP requests when building a provider at parsing step for example. So, <b> Jackett will search for a cached query answer on hard drive before executing query on tracker side !</b> <i>DEV MODE must be enabled to use it !</li></ul>");
     DevMode    = new BoolConfigurationItem("Enable DEV MODE (Developers ONLY)")
     {
         Value = false
     };
     HardDriveCache = new BoolConfigurationItem("Enable HARD DRIVE CACHE (Developers ONLY)")
     {
         Value = false
     };
     HardDriveCacheKeepTime = new StringConfigurationItem("Keep Cached files for (ms)")
     {
         Value = "300000"
     };
     Vostfr = new BoolConfigurationItem("Replace VOSTFR or SUBFRENCH with ENGLISH")
     {
         Value = false
     };
 }
Ejemplo n.º 22
0
 public ConfigurationDataNorbits()
 {
     CredentialsWarning = new DisplayInfoConfigurationItem("Credentials", "<b>Credentials Configuration</b> (<i>Private Tracker</i>),<br /><br /> <ul><li><b>Username</b> is your account name on this tracker.</li><li><b>Password</b> is your password associated to your account name.</li></ul>");
     Username           = new StringConfigurationItem("Username")
     {
         Value = ""
     };
     Password = new StringConfigurationItem("Password")
     {
         Value = ""
     };
     PagesWarning = new DisplayInfoConfigurationItem("Preferences", "<b>Preferences Configuration</b> (<i>Tweak your search settings</i>),<br /><br /> <ul><li><b>Max Pages to Process</b> let you specify how many page (max) Jackett can process when doing a search. Setting a value <b>higher than 4 is dangerous</b> for you account ! (<b>Result of too many requests to tracker...that <u>will be suspect</u></b>).</li></ul>");
     Pages        = new StringConfigurationItem("Max Pages to Process (Required)")
     {
         Value = "4"
     };
     UseFullSearch = new BoolConfigurationItem("Enable search in description.")
     {
         Value = false
     };
 }
Ejemplo n.º 23
0
 public ConfigurationDataNCore()
 {
     Username = new StringConfigurationItem("Username")
     {
         Value = ""
     };
     Password = new StringConfigurationItem("Password")
     {
         Value = ""
     };
     TwoFactor = new StringConfigurationItem("Twofactor")
     {
         Value = ""
     };
     Hungarian = new BoolConfigurationItem("Hungarian")
     {
         Value = true
     };
     English = new BoolConfigurationItem("English")
     {
         Value = true
     };
 }
 public ConfigurationDataUserPasskey(string instructionMessageOptional = null)
 {
     Username     = new StringConfigurationItem("Username");
     Passkey      = new StringConfigurationItem("Passkey");
     Instructions = new DisplayInfoConfigurationItem("", instructionMessageOptional);
 }
Ejemplo n.º 25
0
        public RarBG(IIndexerConfigurationService configService, Utils.Clients.WebClient wc, Logger l,
                     IProtectionService ps, ICacheService cs)
            : base(id: "rarbg",
                   name: "RARBG",
                   description: "RARBG is a Public torrent site for MOVIES / TV / GENERAL",
                   link: "https://rarbg.to/",
                   caps: new TorznabCapabilities
        {
            TvSearchParams = new List <TvSearchParam>
            {
                TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep, TvSearchParam.ImdbId
            },
            MovieSearchParams = new List <MovieSearchParam>
            {
                MovieSearchParam.Q, MovieSearchParam.ImdbId
            },
            MusicSearchParams = new List <MusicSearchParam>
            {
                MusicSearchParam.Q
            },
            TvSearchImdbAvailable = true
        },
                   configService: configService,
                   client: wc,
                   logger: l,
                   p: ps,
                   cacheService: cs,
                   configData: new ConfigurationData())
        {
            Encoding = Encoding.GetEncoding("windows-1252");
            Language = "en-US";
            Type     = "public";

            webclient.requestDelay = 2.5; // The api has a 1req/2s limit

            var ConfigApiEndpoint = new StringConfigurationItem("API URL")
            {
                Value = "https://torrentapi.org/pubapi_v2.php"
            };

            configData.AddDynamic("apiEndpoint", ConfigApiEndpoint);

            var sort = new SingleSelectConfigurationItem("Sort requested from site", new Dictionary <string, string>
            {
                { "last", "created" },
                { "seeders", "seeders" },
                { "leechers", "leechers" }
            })
            {
                Value = "last"
            };

            configData.AddDynamic("sort", sort);

            //AddCategoryMapping(4, TorznabCatType.XXX, "XXX (18+)"); // 3x is not supported by API #11848
            AddCategoryMapping(14, TorznabCatType.MoviesSD, "Movies/XVID");
            AddCategoryMapping(17, TorznabCatType.MoviesSD, "Movies/x264");
            AddCategoryMapping(18, TorznabCatType.TVSD, "TV Episodes");
            AddCategoryMapping(23, TorznabCatType.AudioMP3, "Music/MP3");
            AddCategoryMapping(25, TorznabCatType.AudioLossless, "Music/FLAC");
            AddCategoryMapping(27, TorznabCatType.PCGames, "Games/PC ISO");
            AddCategoryMapping(28, TorznabCatType.PCGames, "Games/PC RIP");
            AddCategoryMapping(32, TorznabCatType.ConsoleXBox360, "Games/XBOX-360");
            AddCategoryMapping(33, TorznabCatType.PCISO, "Software/PC ISO");
            AddCategoryMapping(40, TorznabCatType.ConsolePS3, "Games/PS3");
            AddCategoryMapping(41, TorznabCatType.TVHD, "TV HD Episodes");
            AddCategoryMapping(42, TorznabCatType.MoviesBluRay, "Movies/Full BD");
            AddCategoryMapping(44, TorznabCatType.MoviesHD, "Movies/x264/1080");
            AddCategoryMapping(45, TorznabCatType.MoviesHD, "Movies/x264/720");
            AddCategoryMapping(46, TorznabCatType.MoviesBluRay, "Movies/BD Remux");
            AddCategoryMapping(47, TorznabCatType.Movies3D, "Movies/x264/3D");
            AddCategoryMapping(48, TorznabCatType.MoviesHD, "Movies/XVID/720");
            AddCategoryMapping(49, TorznabCatType.TVUHD, "TV UHD Episodes");
            // torrentapi.org returns "Movies/TV-UHD-episodes" for some reason
            // possibly because thats what the category is called on the /top100.php page
            AddCategoryMapping(49, TorznabCatType.TVUHD, "Movies/TV-UHD-episodes");
            AddCategoryMapping(50, TorznabCatType.MoviesUHD, "Movies/x264/4k");
            AddCategoryMapping(51, TorznabCatType.MoviesUHD, "Movies/x265/4k");
            AddCategoryMapping(52, TorznabCatType.MoviesUHD, "Movs/x265/4k/HDR");
            AddCategoryMapping(53, TorznabCatType.ConsolePS4, "Games/PS4");
            AddCategoryMapping(54, TorznabCatType.MoviesHD, "Movies/x265/1080");

            _appId = "jackett_" + EnvironmentUtil.JackettVersion();

            EnableConfigurableRetryAttempts();
        }
Ejemplo n.º 26
0
        public Abnormal(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps,
                        ICacheService cs)
            : base(id: "abnormal",
                   name: "Abnormal",
                   description: "General French Private Tracker",
                   link: "https://abn.lol/",
                   caps: new TorznabCapabilities
        {
            TvSearchParams = new List <TvSearchParam>
            {
                TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
            },
            MovieSearchParams = new List <MovieSearchParam>
            {
                MovieSearchParam.Q
            },
            BookSearchParams = new List <BookSearchParam>
            {
                BookSearchParam.Q
            }
        },
                   configService: configService,
                   client: w,
                   logger: l,
                   p: ps,
                   cacheService: cs,
                   downloadBase: "https://abn.lol/Torrent/Download?ReleaseId=",
                   configData: new ConfigurationDataBasicLogin()
                   )
        {
            Encoding = Encoding.UTF8;
            Language = "fr-FR";
            Type     = "private";

            AddCategoryMapping(1, TorznabCatType.TV, "Series");
            AddCategoryMapping(2, TorznabCatType.Movies, "Movies");
            AddCategoryMapping(3, TorznabCatType.TVDocumentary, "Documentaries");
            AddCategoryMapping(4, TorznabCatType.TVAnime, "Anime");
            AddCategoryMapping(5, TorznabCatType.PCGames, "Games");
            AddCategoryMapping(6, TorznabCatType.PC, "Applications");
            AddCategoryMapping(7, TorznabCatType.BooksEBook, "Ebooks");
            AddCategoryMapping(9, TorznabCatType.TV, "Emissions");

            // Dynamic Configuration
            ConfigData.AddDynamic("advancedConfigurationWarning", new DisplayInfoConfigurationItem(string.Empty, "<center><b>Advanced Configuration</b></center>,<br /><br /> <center><b><u>WARNING !</u></b> <i>Be sure to read instructions before editing options bellow, you can <b>drastically reduce performance</b> of queries or have <b>non-accurate results</b>.</i></center><br/><br/><ul><li><b>Delay between Requests</b>: (<i>not recommended</i>) you can increase delay to requests made to the tracker, but a minimum of 2.1s is enforced as there is an anti-spam protection.</li><br /><li><b>Max Pages</b>: (<i>not recommended</i>) you can increase max pages to follow when making a request. But be aware that others apps can consider this indexer not working if jackett take too many times to return results. </li><br /><li><b>Enhanced Anime</b>: if you have \"Anime\", this will improve queries made to this tracker related to this type when making searches.</li><br /><li><b>Multi Replacement</b>: you can dynamically replace the word \"MULTI\" with another of your choice like \"MULTI.FRENCH\" for better analysis of 3rd party softwares.</li><br /><li><b>Sub Replacement</b>: you can dynamically replace the word \"VOSTFR\" or \"SUBFRENCH\" with the word \"ENGLISH\" for better analysis of 3rd party softwares.</li></ul>"));

            var ConfigWebRequestDelay = new SingleSelectConfigurationItem("Which delay do you want to apply between each requests made to tracker ?", new Dictionary <string, string>
            {
                { "0", "0s (disabled)" },
                { "0.1", "0.1s" },
                { "0.3", "0.3s" },
                { "0.5", "0.5s (default)" },
                { "0.7", "0.7s" },
                { "1.0", "1.0s" },
                { "1.25", "1.25s" },
                { "1.50", "1.50s" }
            })
            {
                Value = "0.5"
            };

            ConfigData.AddDynamic("webRequestDelay", ConfigWebRequestDelay);

            var ConfigMaxPages = new SingleSelectConfigurationItem("How many pages do you want to follow ?", new Dictionary <string, string>
            {
                { "1", "1 (50 results - default / best perf.)" },
                { "2", "2 (100 results)" },
                { "3", "3 (150 results)" },
                { "4", "4 (200 results - hard limit max)" },
            })
            {
                Value = "1"
            };

            ConfigData.AddDynamic("maxPages", ConfigMaxPages);

            var ConfigEnhancedAnimeSearch = new BoolConfigurationItem("Do you want to use enhanced ANIME search ?")
            {
                Value = false
            };

            ConfigData.AddDynamic("enhancedAnimeSearch", ConfigEnhancedAnimeSearch);

            var ConfigMultiReplacement = new StringConfigurationItem("Do you want to replace \"MULTI\" keyword in release title by another word ?")
            {
                Value = "MULTI.FRENCH"
            };

            ConfigData.AddDynamic("multiReplacement", ConfigMultiReplacement);

            var ConfigSubReplacement = new BoolConfigurationItem("Do you want to replace \"VOSTFR\" and \"SUBFRENCH\" with \"ENGLISH\" word ?")
            {
                Value = false
            };

            ConfigData.AddDynamic("subReplacement", ConfigSubReplacement);

            webclient.requestDelay = Convert.ToDouble(WebRequestDelay);
        }
 public ConfigurationDataBasicLoginWithRSS()
 {
     Username = new StringConfigurationItem("Username");
     Password = new StringConfigurationItem("Password");
     RSSKey   = new HiddenStringConfigurationItem("RSSKey");
 }
 public ConfigurationDataBasicLoginWithEmail(string instructionMessageOptional = null)
 {
     Email        = new StringConfigurationItem("Email");
     Password     = new StringConfigurationItem("Password");
     Instructions = new DisplayInfoConfigurationItem("", instructionMessageOptional);
 }
Ejemplo n.º 29
0
        public Xthor(IIndexerConfigurationService configService, Utils.Clients.WebClient w, Logger l,
                     IProtectionService ps, ICacheService cs)
            : base(id: "xthor-api",
                   name: "Xthor API",
                   description: "General French Private Tracker",
                   link: "https://xthor.tk/",
                   caps: new TorznabCapabilities
        {
            TvSearchParams = new List <TvSearchParam>
            {
                TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
            },
            MovieSearchParams = new List <MovieSearchParam>
            {
                MovieSearchParam.Q, MovieSearchParam.TmdbId
            },
            MusicSearchParams = new List <MusicSearchParam>
            {
                MusicSearchParam.Q
            },
            BookSearchParams = new List <BookSearchParam>
            {
                BookSearchParam.Q
            }
        },
                   configService: configService,
                   client: w,
                   logger: l,
                   p: ps,
                   cacheService: cs,
                   downloadBase: "https://xthor.tk/download.php?torrent=",
                   configData: new ConfigurationDataPasskey()
                   )
        {
            Encoding = Encoding.UTF8;
            Language = "fr-fr";
            Type     = "private";

            // Movies / Films
            AddCategoryMapping(118, TorznabCatType.MoviesBluRay, "Films 2160p/Bluray");
            AddCategoryMapping(119, TorznabCatType.MoviesBluRay, "Films 2160p/Remux");
            AddCategoryMapping(107, TorznabCatType.MoviesUHD, "Films 2160p/x265");
            AddCategoryMapping(1, TorznabCatType.MoviesBluRay, "Films 1080p/BluRay");
            AddCategoryMapping(2, TorznabCatType.MoviesBluRay, "Films 1080p/Remux");
            AddCategoryMapping(100, TorznabCatType.MoviesHD, "Films 1080p/x265");
            AddCategoryMapping(4, TorznabCatType.MoviesHD, "Films 1080p/x264");
            AddCategoryMapping(5, TorznabCatType.MoviesHD, "Films 720p/x264");
            AddCategoryMapping(7, TorznabCatType.MoviesSD, "Films SD/x264");
            AddCategoryMapping(3, TorznabCatType.Movies3D, "Films 3D");
            AddCategoryMapping(6, TorznabCatType.MoviesSD, "Films XviD");
            AddCategoryMapping(8, TorznabCatType.MoviesDVD, "Films DVD");
            AddCategoryMapping(122, TorznabCatType.MoviesHD, "Films HDTV");
            AddCategoryMapping(94, TorznabCatType.MoviesWEBDL, "Films WEBDL");
            AddCategoryMapping(95, TorznabCatType.MoviesWEBDL, "Films WEBRiP");
            AddCategoryMapping(12, TorznabCatType.TVDocumentary, "Films Documentaire");
            AddCategoryMapping(31, TorznabCatType.MoviesOther, "Films Animation");
            AddCategoryMapping(33, TorznabCatType.MoviesOther, "Films Spectacle");
            AddCategoryMapping(125, TorznabCatType.TVSport, "Films Sports");
            AddCategoryMapping(20, TorznabCatType.AudioVideo, "Films Concerts, Clips");
            AddCategoryMapping(9, TorznabCatType.MoviesOther, "Films VOSTFR");

            // TV / Series
            AddCategoryMapping(104, TorznabCatType.TVOther, "Series BluRay");
            AddCategoryMapping(13, TorznabCatType.TVOther, "Series Pack VF");
            AddCategoryMapping(15, TorznabCatType.TVHD, "Series HD VF");
            AddCategoryMapping(14, TorznabCatType.TVSD, "Series SD VF");
            AddCategoryMapping(98, TorznabCatType.TVOther, "Series Pack VOSTFR");
            AddCategoryMapping(17, TorznabCatType.TVHD, "Series HD VOSTFR");
            AddCategoryMapping(16, TorznabCatType.TVSD, "Series SD VOSTFR");
            AddCategoryMapping(101, TorznabCatType.TVAnime, "Series Packs Anime");
            AddCategoryMapping(32, TorznabCatType.TVAnime, "Series Animes");
            AddCategoryMapping(110, TorznabCatType.TVAnime, "Series Anime VOSTFR");
            AddCategoryMapping(123, TorznabCatType.TVOther, "Series Animation");
            AddCategoryMapping(109, TorznabCatType.TVDocumentary, "Series DOC");
            AddCategoryMapping(34, TorznabCatType.TVOther, "Series Sport");
            AddCategoryMapping(30, TorznabCatType.TVOther, "Series Emission TV");

            // XxX / MISC
            AddCategoryMapping(36, TorznabCatType.XXX, "MISC XxX/Films");
            AddCategoryMapping(105, TorznabCatType.XXX, "MISC XxX/Séries");
            AddCategoryMapping(114, TorznabCatType.XXX, "MISC XxX/Lesbiennes");
            AddCategoryMapping(115, TorznabCatType.XXX, "MISC XxX/Gays");
            AddCategoryMapping(113, TorznabCatType.XXX, "MISC XxX/Hentai");
            AddCategoryMapping(120, TorznabCatType.XXX, "MISC XxX/Magazines");

            // Books / Livres
            AddCategoryMapping(24, TorznabCatType.BooksEBook, "Livres Romans");
            AddCategoryMapping(124, TorznabCatType.AudioAudiobook, "Livres Audio Books");
            AddCategoryMapping(96, TorznabCatType.BooksMags, "Livres  Magazines");
            AddCategoryMapping(99, TorznabCatType.BooksOther, "Livres Bandes dessinées");
            AddCategoryMapping(116, TorznabCatType.BooksEBook, "Livres Romans Jeunesse");
            AddCategoryMapping(102, TorznabCatType.BooksComics, "Livres Comics");
            AddCategoryMapping(103, TorznabCatType.BooksOther, "Livres Mangas");

            // SOFTWARE / Logiciels
            AddCategoryMapping(25, TorznabCatType.PCGames, "Logiciels Jeux PC");
            AddCategoryMapping(27, TorznabCatType.ConsolePS3, "Logiciels Playstation");
            AddCategoryMapping(111, TorznabCatType.PCMac, "Logiciels Jeux MAC");
            AddCategoryMapping(26, TorznabCatType.ConsoleXBox360, "Logiciels XboX");
            AddCategoryMapping(112, TorznabCatType.PC, "Logiciels Jeux Linux");
            AddCategoryMapping(28, TorznabCatType.ConsoleWii, "Logiciels Nintendo");
            AddCategoryMapping(29, TorznabCatType.ConsoleNDS, "Logiciels NDS");
            AddCategoryMapping(117, TorznabCatType.PC, "Logiciels ROM");
            AddCategoryMapping(21, TorznabCatType.PC, "Logiciels Applis PC");
            AddCategoryMapping(22, TorznabCatType.PCMac, "Logiciels Applis Mac");
            AddCategoryMapping(23, TorznabCatType.PCMobileAndroid, "Logiciels Smartphone");

            // Dynamic Configuration
            ConfigData.AddDynamic("optionsConfigurationWarning", new DisplayInfoConfigurationItem(string.Empty, "<center><b>Available Options</b></center>,<br /><br /> <ul><li><b>Freeleech Only</b>: (<i>Restrictive</i>) If you want to discover only freeleech torrents to not impact your ratio, check the related box. So only torrents marked as freeleech will be returned instead of all.</li><br /><li><b>Specific Language</b>: (<i>Restrictive</i>) You can scope your searches with a specific language / accent.</li></ul>"));

            var ConfigFreeleechOnly = new BoolConfigurationItem("Do you want to discover only freeleech tagged torrents ?");

            ConfigData.AddDynamic("freeleechOnly", ConfigFreeleechOnly);

            var ConfigSpecificLanguageAccent = new SingleSelectConfigurationItem("Do you want to scope your searches with a specific language ? (Accent)", new Dictionary <string, string>
            {
                { "0", "All Voices (default)" },
                { "1", "Françaises" },
                { "2", "Quebecoises" },
                { "47", "Françaises et Québécoises" },
                { "3", "Anglaises" },
                { "4", "Japonaises" },
                { "5", "Espagnoles" },
                { "6", "Allemandes" },
                { "7", "Chinoises" },
                { "8", "Italiennes" },
                { "9", "Coréennes" },
                { "10", "Danoises" },
                { "11", "Russes" },
                { "12", "Portugaises" },
                { "13", "Hindi" },
                { "14", "Hollandaises" },
                { "15", "Suédoises" },
                { "16", "Norvégiennes" },
                { "17", "Thaïlandaises" },
                { "18", "Hébreu" },
                { "19", "Persanes" },
                { "20", "Arabes" },
                { "21", "Turques" },
                { "22", "Hongroises" },
                { "23", "Polonaises" },
                { "24", "Finnoises" },
                { "25", "Indonésiennes" },
                { "26", "Roumaines" },
                { "27", "Malaisiennes" },
                { "28", "Estoniennes" },
                { "29", "Islandaises" },
                { "30", "Grecques" },
                { "31", "Serbes" },
                { "32", "Norvégiennes" },
                { "33", "Ukrainiennes" },
                { "34", "Bulgares" },
                { "35", "Tagalogues" },
                { "36", "Xhosa" },
                { "37", "Kurdes" },
                { "38", "Bengali" },
                { "39", "Amhariques" },
                { "40", "Bosniaques" },
                { "41", "Malayalam" },
                { "42", "Télougou" },
                { "43", "Bambara" },
                { "44", "Catalanes" },
                { "45", "Tchèques" },
                { "46", "Afrikaans" }
            })
            {
                Value = "0"
            };

            ConfigData.AddDynamic("specificLanguageAccent", ConfigSpecificLanguageAccent);

            ConfigData.AddDynamic("advancedConfigurationWarning", new DisplayInfoConfigurationItem(string.Empty, "<center><b>Advanced Configuration</b></center>,<br /><br /> <center><b><u>WARNING !</u></b> <i>Be sure to read instructions before editing options bellow, you can <b>drastically reduce performance</b> of queries or have <b>non-accurate results</b>.</i></center><br/><br/><ul><li><b>Delay betwwen Requests</b>: (<i>not recommended</i>) you can increase delay to requests made to the tracker, but a minimum of 2.1s is enforced as there is an anti-spam protection.</li><br /><li><b>Max Pages</b>: (<i>not recommended</i>) you can increase max pages to follow when making a request. But be aware that others apps can consider this indexer not working if jackett take too many times to return results. Another thing is that API is very buggy on tracker side, most of time, results of next pages are same ... as the first page. Even if we deduplicate rows, you will loose performance for the same results. You can check logs to see if an higher pages following is not benefical, you will see an error percentage (duplicates) with recommandations.</li><br /><li><b>Bypass for TMDB</b>: (<i>recommended</i>) this indexer is compatible with TMDB queries (<i>for movies only</i>), so when requesting content with an TMDB ID, we will search directly ID on API instead of name. Results will be more accurate, so you can enable a max pages bypass for this query type. You will be at least limited by the hard limit of 4 pages.</li><br /><li><b>Drop categories</b>: (<i>recommended</i>) this indexer has some problems when too many categories are requested for filtering, so you will have better results by dropping categories from TMDB queries or selecting fewer categories in 3rd apps.</li><br /><li><b>Enhanced Anime</b>: if you have \"Anime\", this will improve queries made to this tracker related to this type when making searches.</li><br /><li><b>Multi Replacement</b>: you can dynamically replace the word \"MULTI\" with another of your choice like \"MULTI.FRENCH\" for better analysis of 3rd party softwares.</li><br /><li><b>Sub Replacement</b>: you can dynamically replace the word \"VOSTFR\" or \"SUBFRENCH\" with the word \"ENGLISH\" for better analysis of 3rd party softwares.</li></ul>"));

            var ConfigWebRequestDelay = new SingleSelectConfigurationItem("Which delay do you want to apply between each requests made to tracker ?", new Dictionary <string, string>
            {
                { "2.1", "2.1s (minimum)" },
                { "2.2", "2.2s" },
                { "2.3", "2.3s" },
                { "2.4", "2.4s" },
                { "2.5", "2.5s" },
                { "2.6", "2.6s" }
            })
            {
                Value = "2.1"
            };

            ConfigData.AddDynamic("webRequestDelay", ConfigWebRequestDelay);

            var ConfigMaxPages = new SingleSelectConfigurationItem("How many pages do you want to follow ?", new Dictionary <string, string>
            {
                { "1", "1 (32 results - default / best perf.)" },
                { "2", "2 (64 results)" },
                { "3", "3 (96 results)" },
                { "4", "4 (128 results - hard limit max)" },
            })
            {
                Value = "1"
            };

            ConfigData.AddDynamic("maxPages", ConfigMaxPages);

            var ConfigMaxPagesBypassForTMDB = new BoolConfigurationItem("Do you want to bypass max pages for TMDB searches ? (Radarr) - Hard limit of 4")
            {
                Value = true
            };

            ConfigData.AddDynamic("maxPagesBypassForTMDB", ConfigMaxPagesBypassForTMDB);

            var ConfigDropCategories = new SingleSelectConfigurationItem("Drop requested categories", new Dictionary <string, string>
            {
                { "0", "Disabled" },
                { "1", "Yes, only for TMDB requests (default)" },
                { "2", "Yes, for all requests" },
            })
            {
                Value = "1"
            };

            ConfigData.AddDynamic("dropCategories", ConfigDropCategories);

            var ConfigEnhancedAnimeSearch = new BoolConfigurationItem("Do you want to use enhanced ANIME search ?")
            {
                Value = false
            };

            ConfigData.AddDynamic("enhancedAnimeSearch", ConfigEnhancedAnimeSearch);

            var ConfigMultiReplacement = new StringConfigurationItem("Do you want to replace \"MULTI\" keyword in release title by another word ?")
            {
                Value = "MULTI.FRENCH"
            };

            ConfigData.AddDynamic("multiReplacement", ConfigMultiReplacement);

            var ConfigSubReplacement = new BoolConfigurationItem("Do you want to replace \"VOSTFR\" and \"SUBFRENCH\" with \"ENGLISH\" word ?")
            {
                Value = false
            };

            ConfigData.AddDynamic("subReplacement", ConfigSubReplacement);

            // Api has 1req/2s limit (minimum)
            webclient.requestDelay = Convert.ToDouble(WebRequestDelay);
        }
 public static StringConfigurationItem CreateStringConfigurationItem(string ID, bool volatil)
 {
     StringConfigurationItem item = new StringConfigurationItem(ID, volatil);
     return item;
 }
 public ConfigurationDataAPIKeyAndRSSKey()
 {
     ApiKey = new StringConfigurationItem("API Key");
     RSSKey = new StringConfigurationItem("RSS Key");
 }