Fuzer: use browse.php

This commit is contained in:
kaso17
2017-10-24 18:30:09 +02:00
parent 0ada1871ba
commit b4e81301a3

View File

@@ -22,7 +22,7 @@ namespace Jackett.Indexers
{ {
public class Fuzer : BaseWebIndexer public class Fuzer : BaseWebIndexer
{ {
private string SearchUrl { get { return SiteLink + "index.php?name=torrents&"; } } private string SearchUrl { get { return SiteLink + "browse.php"; } }
private string LoginUrl { get { return SiteLink + "login.php"; } } private string LoginUrl { get { return SiteLink + "login.php"; } }
private const int MAXPAGES = 3; private const int MAXPAGES = 3;
@@ -47,47 +47,55 @@ namespace Jackett.Indexers
Type = "private"; Type = "private";
TorznabCaps.Categories.Clear(); TorznabCaps.Categories.Clear();
AddMultiCategoryMapping(TorznabCatType.Movies, 7, 9, 58, 59, 60, 61, 83); // סרטים
AddMultiCategoryMapping(TorznabCatType.MoviesSD, 7, 58); AddCategoryMapping(7, TorznabCatType.MoviesSD, "סרטים");
AddMultiCategoryMapping(TorznabCatType.MoviesHD, 9, 59, 61); AddCategoryMapping(9, TorznabCatType.MoviesHD, "סרטים HD");
AddMultiCategoryMapping(TorznabCatType.MoviesBluRay, 59); AddCategoryMapping(58, TorznabCatType.MoviesDVD, "סרטים DVD-R");
AddMultiCategoryMapping(TorznabCatType.MoviesForeign, 83); AddCategoryMapping(59, TorznabCatType.MoviesSD, "סרטי BDRIP-BRRip");
AddMultiCategoryMapping(TorznabCatType.MoviesDVD, 58); AddCategoryMapping(60, TorznabCatType.MoviesSD, "סרטים ישראליים");
AddMultiCategoryMapping(TorznabCatType.Movies3D, 9); AddCategoryMapping(61, TorznabCatType.MoviesHD, "סרטים ישראליים HD");
AddMultiCategoryMapping(TorznabCatType.MoviesWEBDL, 9); AddCategoryMapping(83, TorznabCatType.MoviesOther, "סרטים מדובבים");
AddMultiCategoryMapping(TorznabCatType.TV, 8, 10, 62, 63, 84);
AddMultiCategoryMapping(TorznabCatType.TVHD, 10, 63); // סדרות
AddMultiCategoryMapping(TorznabCatType.TVFOREIGN, 62, 84); AddCategoryMapping(8, TorznabCatType.TVSD, "סדרות");
AddMultiCategoryMapping(TorznabCatType.TVSport, 64); AddCategoryMapping(10, TorznabCatType.TVHD, "סדרות HD");
AddMultiCategoryMapping(TorznabCatType.TVAnime, 65); AddCategoryMapping(62, TorznabCatType.TVSD, "סדרות ישראליות");
AddMultiCategoryMapping(TorznabCatType.TVWEBDL, 10, 63); AddCategoryMapping(63, TorznabCatType.TVHD, "סדרות ישראליות HD");
AddMultiCategoryMapping(TorznabCatType.TVSD, 8, 62, 84); AddCategoryMapping(84, TorznabCatType.TVOTHER, "סדרות מדובבות");
AddMultiCategoryMapping(TorznabCatType.TVDocumentary, 8, 10, 62, 63);
AddMultiCategoryMapping(TorznabCatType.Console, 12, 55, 56, 57); // מוזיקה
AddMultiCategoryMapping(TorznabCatType.ConsoleXbox, 55); AddCategoryMapping(14, TorznabCatType.Audio, "מוזיקה עולמית");
AddMultiCategoryMapping(TorznabCatType.ConsoleXbox360, 55); AddCategoryMapping(66, TorznabCatType.Audio, "מוזיקה ישראלית");
AddMultiCategoryMapping(TorznabCatType.ConsoleXBOX360DLC, 55); AddCategoryMapping(67, TorznabCatType.AudioMP3, "FLAC");
AddMultiCategoryMapping(TorznabCatType.ConsolePS3, 12); AddCategoryMapping(68, TorznabCatType.Audio, "פסקולים");
AddMultiCategoryMapping(TorznabCatType.ConsolePS4, 12);
AddMultiCategoryMapping(TorznabCatType.ConsoleXboxOne, 55); // משחקים
AddMultiCategoryMapping(TorznabCatType.ConsolePS4, 12); AddCategoryMapping(11, TorznabCatType.PCGames, "משחקים PC");
AddMultiCategoryMapping(TorznabCatType.ConsoleWii, 56); AddCategoryMapping(12, TorznabCatType.ConsoleOther, "משחקים PS");
AddMultiCategoryMapping(TorznabCatType.ConsoleWiiwareVC, 56); AddCategoryMapping(55, TorznabCatType.ConsoleXbox, "משחקים XBOX");
AddMultiCategoryMapping(TorznabCatType.ConsolePSP, 57); AddCategoryMapping(56, TorznabCatType.ConsoleWii, "משחקים WII");
AddMultiCategoryMapping(TorznabCatType.ConsoleNDS, 57); AddCategoryMapping(57, TorznabCatType.PCPhoneOther, "משחקי קונסולות ניידות");
AddMultiCategoryMapping(TorznabCatType.MoviesOther, 57);
AddMultiCategoryMapping(TorznabCatType.PC, 11, 15); // תוכנה
AddMultiCategoryMapping(TorznabCatType.PCGames, 11); AddCategoryMapping(13, TorznabCatType.PCPhoneAndroid, "אפליקציות לאנדרואיד");
AddMultiCategoryMapping(TorznabCatType.PCMac, 71); AddCategoryMapping(15, TorznabCatType.PC0day, "תוכנות PC");
AddMultiCategoryMapping(TorznabCatType.PCPhoneAndroid, 13); AddCategoryMapping(70, TorznabCatType.PCPhoneIOS, "אפליקציות לאייפון");
AddMultiCategoryMapping(TorznabCatType.PCPhoneIOS, 70); AddCategoryMapping(71, TorznabCatType.PCMac, "תוכנות MAC");
AddMultiCategoryMapping(TorznabCatType.Audio, 14, 66, 67, 68);
AddMultiCategoryMapping(TorznabCatType.AudioForeign, 14); // שונות
AddMultiCategoryMapping(TorznabCatType.AudioLossless, 67); AddCategoryMapping(16, TorznabCatType.XXX, "למבוגרים בלבד");
AddMultiCategoryMapping(TorznabCatType.AudioAudiobook, 69); AddCategoryMapping(17, TorznabCatType.Other, "שונות");
AddMultiCategoryMapping(TorznabCatType.AudioOther, 68); AddCategoryMapping(64, TorznabCatType.Other, "ספורט");
AddMultiCategoryMapping(TorznabCatType.Other, 17); AddCategoryMapping(65, TorznabCatType.Other, "אנימה");
AddMultiCategoryMapping(TorznabCatType.XXX, 16); AddCategoryMapping(69, TorznabCatType.Books, "Ebooks");
// FuzePacks
AddCategoryMapping(72, TorznabCatType.Console, "משחקים");
AddCategoryMapping(73, TorznabCatType.Movies, "סרטים");
AddCategoryMapping(74, TorznabCatType.PC, "תוכנות");
AddCategoryMapping(75, TorznabCatType.Audio, "שירים");
AddCategoryMapping(76, TorznabCatType.TV, "סדרות");
} }
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson) public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
@@ -153,54 +161,32 @@ namespace Jackett.Indexers
{ {
searchString = hebName + " - עונה " + query.Season + " פרק " + query.Episode; searchString = hebName + " - עונה " + query.Season + " פרק " + query.Episode;
} }
searchUrl += "?";
int categoryCounter = 1; if (!string.IsNullOrWhiteSpace(searchString))
foreach (var cat in MapTorznabCapsToTrackers(query))
{
searchUrl += "c" + categoryCounter.ToString() + "=" + cat + "&";
categoryCounter++;
}
if (string.IsNullOrWhiteSpace(searchString))
{
searchUrl = SiteLink + "index.php?name=torrents";
}
else
{ {
var strEncoded = HttpUtility.UrlEncode(searchString, Encoding.GetEncoding("Windows-1255")); var strEncoded = HttpUtility.UrlEncode(searchString, Encoding.GetEncoding("Windows-1255"));
searchUrl += "text=" + strEncoded + "&category=0&search=1"; searchUrl += "&query=" + strEncoded + "&matchquery=any";
}
foreach (var cat in MapTorznabCapsToTrackers(query))
{
searchUrl += "&c[]=" + cat;
} }
var data = await RequestStringWithCookiesAndRetry(searchUrl); var data = await RequestStringWithCookiesAndRetry(searchUrl);
try try
{ {
CQ dom = data.Content; CQ dom = data.Content;
ReleaseInfo release; var rows = dom["tr.box_torrent"];
int rowCount = 0;
var rows = dom["#collapseobj_module_17 > tr"];
foreach (var row in rows) foreach (var row in rows)
{ {
CQ qRow = row.Cq(); CQ qRow = row.Cq();
if (rowCount < 1 || qRow.Children().Count() != 9) //skip 1 row because there's an empty row
{ var release = new ReleaseInfo();
rowCount++; var main_title_link = qRow.Find("div.main_title > a");
continue; release.Title = main_title_link.Attr("longtitle");
} if (release.Title.IsNullOrEmptyOrWhitespace())
release.Title = main_title_link.Text();
release = new ReleaseInfo();
release.Description = qRow.Find("td:nth-child(2) > a").Text(); ;
if (hebName != null)
{
release.Title = query.SearchTerm + " " + release.Description.Substring(release.Description.IndexOf(string.Format("S{0:D2}E{1:D2}", query.Season, int.Parse(query.Episode))));
}
else
{
const string DELIMITER = " | ";
release.Title = release.Description.Substring(release.Description.IndexOf(DELIMITER) + DELIMITER.Length);
}
release.MinimumRatio = 1; release.MinimumRatio = 1;
release.MinimumSeedTime = 172800; release.MinimumSeedTime = 172800;
@@ -214,46 +200,39 @@ namespace Jackett.Indexers
release.Peers = peers + release.Seeders; release.Peers = peers + release.Seeders;
} }
} }
release.Grabs = ParseUtil.CoerceLong(qRow.Find("td:nth-child(5)").Text().Replace(",", ""));
string fullSize = qRow.Find("td:nth-child(5) > div").Text(); release.Seeders = ParseUtil.CoerceInt(qRow.Find("td:nth-child(6)").Text().Replace(",", ""));
release.Peers = ParseUtil.CoerceInt(qRow.Find("td:nth-child(7)").Text().Replace(",", "")) + release.Seeders;
string fullSize = qRow.Find("td:nth-child(4)").Text();
release.Size = ReleaseInfo.GetBytes(fullSize); release.Size = ReleaseInfo.GetBytes(fullSize);
release.Guid = new Uri(qRow.Find("td:nth-child(2) > a").Attr("href")); release.Comments = new Uri(SiteLink + qRow.Find("a.threadlink[href]").Attr("href"));
release.Link = new Uri(SiteLink + qRow.Find("td:nth-child(3) > a").Attr("href")); release.Link = new Uri(SiteLink + qRow.Find("a:has(div.dlimg)").Attr("href"));
release.Comments = release.Guid; release.Guid = release.Comments;
release.BannerUrl = new Uri(qRow.Find("a[imgsrc]").Attr("imgsrc"));
string[] dateSplit = qRow.Find("td:nth-child(2) > span.torrentstime").Text().Split(' '); var dateStringAll = qRow.Find("div.up_info2")[0].ChildNodes.Last().ToString();
string dateString = dateSplit[1] + " " + dateSplit[3]; var dateParts = dateStringAll.Split(' ');
release.PublishDate = DateTime.ParseExact(dateString, "dd-MM-yy HH:mm", CultureInfo.InvariantCulture); string dateString = dateParts[dateParts.Length - 2] + " " + dateParts[dateParts.Length - 1];
release.PublishDate = DateTime.ParseExact(dateString, "dd/MM/yy HH:mm", CultureInfo.InvariantCulture);
string category = qRow.Find("script:nth-child(1)").Text(); string categoryLink = qRow.Find("a[href^=\"/browse.php?cat=\"]").Attr("href");
int index = category.IndexOf("category="); var catid = ParseUtil.GetArgumentFromQueryString(categoryLink, "cat");
if (index == -1) release.Category = MapTrackerCatToNewznab(catid);
{
/// Other type
category = "17";
}
else
{
category = category.Substring(index + "category=".Length, 2);
if (category[1] == '\\')
{
category = category[0].ToString();
}
}
release.Category = MapTrackerCatToNewznab(category); if (qRow.Find("a[href^=\"?freeleech=1\"]").Length >= 1)
var grabs = qRow.Find("td:nth-child(6)").Text();
release.Grabs = ParseUtil.CoerceInt(grabs);
if (qRow.Find("img[src=\"/images/FL.png\"]").Length >= 1)
release.DownloadVolumeFactor = 0; release.DownloadVolumeFactor = 0;
else else
release.DownloadVolumeFactor = 1; release.DownloadVolumeFactor = 1;
release.UploadVolumeFactor = 1; release.UploadVolumeFactor = 1;
var sub_title = qRow.Find("div.sub_title");
var imdb_link = sub_title.Find("span.imdb-inline > a");
release.Imdb = ParseUtil.GetLongFromString(imdb_link.Attr("href"));
sub_title.Find("span.imdb-inline").Remove();
release.Description = sub_title.Text();
releases.Add(release); releases.Add(release);
} }
} }