Skip to content

Commit

Permalink
Merge pull request knightcrawler-stremio#98 from Gabisonfire/feat/nyaasi
Browse files Browse the repository at this point in the history
Adds Nyaa Crawler
  • Loading branch information
iPromKnight authored Feb 27, 2024
2 parents 4cbbb31 + 6c4282b commit aad59c3
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/producer/Configuration/scrapers.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
"IntervalSeconds": 60,
"Enabled": true
},
{
"Name": "SyncNyaaJob",
"IntervalSeconds": 60,
"Enabled": true
},
{
"Name": "SyncTpbJob",
"IntervalSeconds": 60,
Expand Down
32 changes: 32 additions & 0 deletions src/producer/Crawlers/Sites/NyaaCrawler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
namespace Producer.Crawlers.Sites;

public class NyaaCrawler(IHttpClientFactory httpClientFactory, ILogger<NyaaCrawler> logger, IDataStorage storage) : BaseXmlCrawler(httpClientFactory, logger, storage)
{
protected override string Url => "https://nyaa.si/?page=rss&c=1_2&f=0";
protected override string Source => "Nyaa";

private static readonly XNamespace XmlNamespace = "https://nyaa.si/xmlns/nyaa";

protected override IReadOnlyDictionary<string, string> Mappings =>
new Dictionary<string, string>
{
[nameof(Torrent.Name)] = "title",
[nameof(Torrent.Size)] = "size",
[nameof(Torrent.Seeders)] = "seeders",
[nameof(Torrent.Leechers)] = "leechers",
[nameof(Torrent.InfoHash)] = "infoHash",
[nameof(Torrent.Category)] = "category",
};

protected override Torrent ParseTorrent(XElement itemNode) =>
new()
{
Source = Source,
Name = itemNode.Element(Mappings[nameof(Torrent.Name)])?.Value,
Size = itemNode.Element(XmlNamespace + Mappings[nameof(Torrent.Size)])?.Value,
Seeders = int.Parse(itemNode.Element(XmlNamespace + Mappings[nameof(Torrent.Seeders)])?.Value ?? "0"),
Leechers = int.Parse(itemNode.Element(XmlNamespace + Mappings[nameof(Torrent.Leechers)])?.Value ?? "0"),
InfoHash = itemNode.Element(XmlNamespace + Mappings[nameof(Torrent.InfoHash)])?.Value,
Category = itemNode.Element(Mappings[nameof(Torrent.Category)])?.Value.ToLowerInvariant(),
};
}
3 changes: 3 additions & 0 deletions src/producer/Extensions/ServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ internal static IServiceCollection AddCrawlers(this IServiceCollection services)

services
.AddKeyedTransient<ICrawler, EzTvCrawler>(nameof(EzTvCrawler))
.AddKeyedTransient<ICrawler, NyaaCrawler>(nameof(NyaaCrawler))
.AddKeyedTransient<ICrawler, YtsCrawler>(nameof(YtsCrawler))
.AddKeyedTransient<ICrawler, TpbCrawler>(nameof(TpbCrawler))
.AddKeyedTransient<ICrawler, TgxCrawler>(nameof(TgxCrawler))
Expand Down Expand Up @@ -60,6 +61,7 @@ internal static IServiceCollection AddQuartz(this IServiceCollection services, I

services
.AddTransient<SyncEzTvJob>()
.AddTransient<SyncNyaaJob>()
.AddTransient<SyncTpbJob>()
.AddTransient<SyncYtsJob>()
.AddTransient<SyncTgxJob>()
Expand All @@ -75,6 +77,7 @@ internal static IServiceCollection AddQuartz(this IServiceCollection services, I
quartz =>
{
AddJobWithTrigger<SyncEzTvJob>(quartz, SyncEzTvJob.Key, SyncEzTvJob.Trigger, scrapeConfiguration);
AddJobWithTrigger<SyncNyaaJob>(quartz, SyncNyaaJob.Key, SyncNyaaJob.Trigger, scrapeConfiguration);
AddJobWithTrigger<SyncTpbJob>(quartz, SyncTpbJob.Key, SyncTpbJob.Trigger, scrapeConfiguration);
AddJobWithTrigger<SyncYtsJob>(quartz, SyncYtsJob.Key, SyncYtsJob.Trigger, scrapeConfiguration);
AddJobWithTrigger<SyncTgxJob>(quartz, SyncTgxJob.Key, SyncTgxJob.Trigger, scrapeConfiguration);
Expand Down
12 changes: 12 additions & 0 deletions src/producer/Jobs/SyncNyaaJob.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Producer.Crawlers.Sites;

namespace Producer.Jobs;

[DisallowConcurrentExecution]
public class SyncNyaaJob(ICrawlerProvider crawlerProvider) : BaseJob(crawlerProvider)
{
private const string JobName = nameof(NyaaCrawler);
public static readonly JobKey Key = new(JobName, nameof(Crawlers));
public static readonly TriggerKey Trigger = new($"{JobName}-trigger", nameof(Crawlers));
protected override string Crawler => nameof(NyaaCrawler);
}

0 comments on commit aad59c3

Please sign in to comment.