mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-23 06:45:19 -07:00
Add import from http://movies.stevenlu.com/
This commit is contained in:
parent
8b3b46b724
commit
87da542758
5 changed files with 186 additions and 0 deletions
18
src/NzbDrone.Core/NetImport/StevenLu/StevenLuAPI.cs
Normal file
18
src/NzbDrone.Core/NetImport/StevenLu/StevenLuAPI.cs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.NetImport.StevenLu
|
||||||
|
{
|
||||||
|
public class StevenLuResponse
|
||||||
|
{
|
||||||
|
public Movie[] Movie { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Movie
|
||||||
|
{
|
||||||
|
public string title { get; set; }
|
||||||
|
public string imdb_id { get; set; }
|
||||||
|
public string poster_url { get; set; }
|
||||||
|
}
|
||||||
|
}
|
36
src/NzbDrone.Core/NetImport/StevenLu/StevenLuImport.cs
Normal file
36
src/NzbDrone.Core/NetImport/StevenLu/StevenLuImport.cs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
using FluentValidation.Results;
|
||||||
|
using NLog;
|
||||||
|
using NzbDrone.Common.Http;
|
||||||
|
using NzbDrone.Core.Configuration;
|
||||||
|
using NzbDrone.Core.Indexers;
|
||||||
|
using NzbDrone.Core.Indexers.PassThePopcorn;
|
||||||
|
using NzbDrone.Core.Parser;
|
||||||
|
using NzbDrone.Core.ThingiProvider;
|
||||||
|
using NzbDrone.Core.Tv;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.NetImport.StevenLu
|
||||||
|
{
|
||||||
|
public class StevenLuImport : HttpNetImportBase<StevenLuSettings>
|
||||||
|
{
|
||||||
|
public override string Name => "Popular movies from StevenLu";
|
||||||
|
public override bool Enabled => true;
|
||||||
|
public override bool EnableAuto => true;
|
||||||
|
|
||||||
|
public StevenLuImport(IHttpClient httpClient, IConfigService configService, IParsingService parsingService, Logger logger)
|
||||||
|
: base(httpClient, configService, parsingService, logger)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
public override INetImportRequestGenerator GetRequestGenerator()
|
||||||
|
{
|
||||||
|
return new StevenLuRequestGenerator() { Settings = Settings };
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IParseNetImportResponse GetParser()
|
||||||
|
{
|
||||||
|
return new StevenLuParser(Settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
82
src/NzbDrone.Core/NetImport/StevenLu/StevenLuParser.cs
Normal file
82
src/NzbDrone.Core/NetImport/StevenLu/StevenLuParser.cs
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using NzbDrone.Core.NetImport.Exceptions;
|
||||||
|
using NzbDrone.Core.Tv;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using System.Xml;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using NLog;
|
||||||
|
using NzbDrone.Common.Extensions;
|
||||||
|
using NzbDrone.Common.Http;
|
||||||
|
using NzbDrone.Core.Indexers;
|
||||||
|
using NzbDrone.Core.Indexers.Exceptions;
|
||||||
|
using NzbDrone.Core.Parser.Model;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.NetImport.StevenLu
|
||||||
|
{
|
||||||
|
public class StevenLuParser : IParseNetImportResponse
|
||||||
|
{
|
||||||
|
private readonly StevenLuSettings _settings;
|
||||||
|
private NetImportResponse _importResponse;
|
||||||
|
private readonly Logger _logger;
|
||||||
|
|
||||||
|
public StevenLuParser(StevenLuSettings settings)
|
||||||
|
{
|
||||||
|
_settings = settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IList<Tv.Movie> ParseResponse(NetImportResponse importResponse)
|
||||||
|
{
|
||||||
|
_importResponse = importResponse;
|
||||||
|
|
||||||
|
var movies = new List<Tv.Movie>();
|
||||||
|
|
||||||
|
if (!PreProcess(_importResponse))
|
||||||
|
{
|
||||||
|
return movies;
|
||||||
|
}
|
||||||
|
|
||||||
|
var jsonResponse = JsonConvert.DeserializeObject<StevenLuResponse>(_importResponse.Content);
|
||||||
|
|
||||||
|
// no movies were return
|
||||||
|
if (jsonResponse == null)
|
||||||
|
{
|
||||||
|
return movies;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var item in jsonResponse.Movie)
|
||||||
|
{
|
||||||
|
movies.AddIfNotNull(new Tv.Movie()
|
||||||
|
{
|
||||||
|
Title = item.title,
|
||||||
|
ImdbId = item.imdb_id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return movies;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual bool PreProcess(NetImportResponse indexerResponse)
|
||||||
|
{
|
||||||
|
if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
throw new NetImportException(indexerResponse, "Indexer API call resulted in an unexpected StatusCode [{0}]", indexerResponse.HttpResponse.StatusCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (indexerResponse.HttpResponse.Headers.ContentType != null && indexerResponse.HttpResponse.Headers.ContentType.Contains("text/json") &&
|
||||||
|
indexerResponse.HttpRequest.Headers.Accept != null && !indexerResponse.HttpRequest.Headers.Accept.Contains("text/json"))
|
||||||
|
{
|
||||||
|
throw new NetImportException(indexerResponse, "Indexer responded with html content. Site is likely blocked or unavailable.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
using NzbDrone.Common.Http;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.NetImport.StevenLu
|
||||||
|
{
|
||||||
|
public class StevenLuRequestGenerator : INetImportRequestGenerator
|
||||||
|
{
|
||||||
|
public StevenLuSettings Settings { get; set; }
|
||||||
|
|
||||||
|
public virtual NetImportPageableRequestChain GetMovies()
|
||||||
|
{
|
||||||
|
var pageableRequests = new NetImportPageableRequestChain();
|
||||||
|
|
||||||
|
pageableRequests.Add(GetMovies(null));
|
||||||
|
|
||||||
|
return pageableRequests;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerable<NetImportRequest> GetMovies(string searchParameters)
|
||||||
|
{
|
||||||
|
var request = new NetImportRequest($"{Settings.Link.Trim()}", HttpAccept.Json);
|
||||||
|
yield return request;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
22
src/NzbDrone.Core/NetImport/StevenLu/StevenLuSettings.cs
Normal file
22
src/NzbDrone.Core/NetImport/StevenLu/StevenLuSettings.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
using FluentValidation;
|
||||||
|
using NzbDrone.Core.Annotations;
|
||||||
|
using NzbDrone.Core.Profiles;
|
||||||
|
using NzbDrone.Core.ThingiProvider;
|
||||||
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.NetImport.StevenLu
|
||||||
|
{
|
||||||
|
|
||||||
|
public class StevenLuSettings : NetImportBaseSettings
|
||||||
|
{
|
||||||
|
public StevenLuSettings()
|
||||||
|
{
|
||||||
|
Link = "https://s3.amazonaws.com/popular-movies/movies.json";
|
||||||
|
}
|
||||||
|
|
||||||
|
[FieldDefinition(0, Label = "URL", HelpText = "Don't change this unless you know what you are doing.")]
|
||||||
|
public new string Link { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue