private List <CommitStripItem> ParseRss(string rss) { var xdoc = XDocument.Parse(rss); var comics = new List <CommitStripItem>(); var items = xdoc.Descendants("item"); XNamespace nsContent = "http://purl.org/rss/1.0/modules/content/"; foreach (var item in items) { var categoryList = item.Elements("category").Select(category => (string)category).ToList(); var comic = new CommitStripItem() { Title = (string)item.Element("title"), Description = (string)item.Element(nsContent + "encoded"), Link = (string)item.Element("link"), PubDate = parseTime((string)item.Element("pubDate")), ImageLink = ComicParser.GetImageLink((string)item.Element(nsContent + "encoded")), Id = StringHelper.RemoveSpecialCharacters((string)item.Element("link")), Categories = categoryList }; comics.Add(comic); } return(comics); }
public void GetUrlGeneratorSmbc() { var smbcUrl = "http://www.smbc-comics.com/index.php?db=comics&id=614"; var smbcUrl0 = "http://www.smbc-comics.com/comics/20061010.gif"; var smbcUrl1 = "http://www.smbc-comics.com/comics/20061011.gif"; var smbcUrl2 = "http://www.smbc-comics.com/comics/20061012.gif"; var smbcParser = new ComicParser(smbcUrl); // get the generator object DateGenerator urlGen = (DateGenerator)smbcParser.GetUrlGenerator(); urlGen.Days = DateGenerator.EveryDay; // generate 10 urls, going backwards, including the original (and starting from the original) List <string> backUrls = urlGen.Get(-1, 10); // generate 10 urls, going forwards, excluding the original (and starting from the original) List <string> forwardUrls = urlGen.Get(0, 10); // each url should be the comic, directly // urls are sorted Assert.AreEqual(smbcUrl0, backUrls [0]); Assert.AreEqual(smbcUrl1, backUrls [1]); Assert.AreEqual(10, backUrls.Count()); Assert.AreEqual(smbcUrl1, forwardUrls [0]); Assert.AreEqual(smbcUrl2, forwardUrls [1]); Assert.AreEqual(10, forwardUrls.Count()); }
public void DownloadMany() { // choose target files to download var url = "http://www.smbc-comics.com/comics/20061001.gif"; // var url = "http://www.irregularwebcomic.net/55.html"; var parser = new ComicParser(url); var urlGen = parser.GetUrlGenerator() as DateGenerator; urlGen.Days = DateGenerator.EveryDay; var urls = urlGen.Get(0, 20); foreach (var x in urls) { Console.WriteLine(x); } var numComics = urls.Where <string> (x => x != String.Empty).Count(); using (var repo = new Repository()) { // set the gate AutoResetEvent auto = new AutoResetEvent(false); // event handler allows program to progress repo.MultipleDownloadsCompleted += delegate(object sender, EventArgs e) { auto.Set(); }; // begin the download and block repo.Download(urls); // auto.WaitOne (); // check that it worked Assert.AreEqual(numComics, repo.Files.Count); } }
public void GetDirectly() { var url = "http://comic.com/009.png"; var parser = new ComicParser(url); var img0 = "http://comic.com/613.png"; var img1 = "http://comic.com/614.png"; var img2 = "http://comic.com/615.png"; // get the generator object UrlGenerator urlGen = parser.GetUrlGenerator(); Assert.AreEqual("1", urlGen.Start); // generate 10 urls, starting from 605 List <string> backUrls = urlGen.Get(612, 10); // generate 10 urls, starting from 615 List <string> forwardUrls = urlGen.Get(614, 10); // each url should be the comic, directly // urls are sorted Assert.AreEqual(10, backUrls.Count()); Assert.AreEqual(img0, backUrls [0]); Assert.AreEqual(img1, backUrls [1]); Assert.AreEqual(img2, backUrls [2]); Assert.AreEqual(10, forwardUrls.Count()); Assert.AreEqual(img2, forwardUrls [0]); }
public void GetUrlGeneratorIrregularWebcomic() { var pageUrl = "http://www.irregularwebcomic.net/32.html"; var comicUrl = "http://www.irregularwebcomic.net/comics/irreg0032.jpg"; var parser = new ComicParser(pageUrl); var urlGen = parser.GetUrlGenerator(); Assert.AreEqual(comicUrl, urlGen.Comic.AbsoluteUri); }
public void GetUrlGeneratorXkcd() { var xkcdUrl = "http://xkcd.com/614"; var xkcdParser = new ComicParser(xkcdUrl); // get the generator object - should be the right type UrlGenerator urlGen = xkcdParser.GetUrlGenerator(); Assert.IsTrue(urlGen.ToString().Contains("SequentialGenerator")); }
public void TryRedirectToImgIrregularWebcomic() { var url = "http://www.irregularwebcomic.net/32.html"; var imgUrl = "http://www.irregularwebcomic.net/comics/irreg0032.jpg"; var parser = new ComicParser(url); var urlGen = parser.GetUrlGenerator(); Assert.AreEqual(imgUrl, urlGen.Comic.AbsoluteUri); parser = new ComicParser(imgUrl); urlGen = parser.GetUrlGenerator(); Assert.AreEqual(imgUrl, urlGen.Comic.AbsoluteUri); }
public void TryRedirectToImgSmbc() { var url = "http://www.smbc-comics.com/index.php?db=comics&id=614"; var imgUrl = "http://www.smbc-comics.com/comics/20061011.gif"; var parser = new ComicParser(url); var urlGen = parser.GetUrlGenerator(); Assert.AreEqual(imgUrl.Substring(10), urlGen.Comic.AbsoluteUri.Substring(10)); parser = new ComicParser(imgUrl); urlGen = parser.GetUrlGenerator(); Assert.AreEqual(imgUrl.Substring(10), urlGen.Comic.AbsoluteUri.Substring(10)); }
private UrlGenerator SetupTask() { var comic = new ComicUri(InputUrl); var parser = new ComicParser(InputUrl); var urlGen = parser.GetUrlGenerator(); // in the interests of simplicity, just start from given comicå urlGen.Start = comic.Indices [0]; return(urlGen); }
public void GetFromPageIrregularWebcomic() { var url = "http://www.irregularwebcomic.net/55.html"; var parser = new ComicParser(url); var urlGen = parser.GetUrlGenerator(); var urls = urlGen.Get(0, 20); Assert.AreEqual("http://www.irregularwebcomic.net/comics/irreg0001.jpg", urls[0]); Assert.AreEqual("http://www.irregularwebcomic.net/comics/irreg0002.jpg", urls[1]); Assert.AreEqual("http://www.irregularwebcomic.net/comics/irreg0003.jpg", urls[2]); Assert.AreEqual("http://www.irregularwebcomic.net/comics/irreg0004.jpg", urls[3]); Assert.AreEqual("http://www.irregularwebcomic.net/comics/irreg0005.jpg", urls[4]); }
public void GetResponse_ReturnsSuccessFalse_OnAuthError() { // Arrange dynamic json = JObject.Parse(TestJson.Get("auth-error")); var sut = new ComicParser(); // Act Response <Comic> result = sut.GetResponse <Comic>(json); // Assert Assert.AreEqual(false, result.Success); Assert.AreEqual("InvalidCredentials", result.Code); Assert.AreEqual("The passed API key is invalid.", result.Status); Assert.IsNull(result.Data); }
public void GetResponse_ReturnsSuccessFalse_OnError() { // Arrange dynamic json = JObject.Parse(TestJson.Get("api-error")); var sut = new ComicParser(); // Act Response <Comic> result = sut.GetResponse <Comic>(json); // Assert Assert.AreEqual(false, result.Success); Assert.AreEqual("409", result.Code); Assert.AreEqual("Limit greater than 100.", result.Status); Assert.IsNull(result.Data); }
public void GetResponse_ReturnsSuccessTrue_OnSuccess() { // Arrange dynamic json = JObject.Parse(TestJson.Get("comic-success")); var sut = new ComicParser(); // Act Response <Comic> result = sut.GetResponse <Comic>(json); // Assert Assert.AreEqual(true, result.Success); Assert.AreEqual("200", result.Code); Assert.AreEqual("Success.", result.Status); Assert.IsNotNull(result.Data); }
public void CancelDownloads() { // choose target files to download var url = "http://www.smbc-comics.com/comics/20061001.gif"; // var url = "http://www.irregularwebcomic.net/55.html"; var parser = new ComicParser(url); var urlGen = parser.GetUrlGenerator() as DateGenerator; urlGen.Days = DateGenerator.EveryDay; var urls = urlGen.Get(0, 20); foreach (var x in urls) { Console.WriteLine(x); } using (var repo = new Repository()) { // set the gate AutoResetEvent auto = new AutoResetEvent(false); int num = 0; // event handler to count number of async downloads repo.DownloadFileCompleted += delegate(object sender, AsyncCompletedEventArgs e) { num += 1; // here we set the canceller if (num == 5) { repo.CancelDownloads(); auto.Set(); } }; // event handler allows program to progress (in case of cancel failure) repo.MultipleDownloadsCompleted += delegate(object sender, EventArgs e) { auto.Set(); }; // begin the download and block repo.Download(urls); auto.WaitOne(); // check that it worked Assert.AreEqual(5, repo.Files.Count); } }
public void GetFromPageXkcd() { var xkcdUrl = "http://xkcd.com/614"; var xkcdParser = new ComicParser(xkcdUrl); var xkcdImg = "http://imgs.xkcd.com/comics/woodpecker.png"; var xkcdImg2 = "http://imgs.xkcd.com/comics/avoidance.png"; // get the generator object UrlGenerator urlGen = xkcdParser.GetUrlGenerator(); Assert.AreEqual("1", urlGen.Start); // generate 10 urls, starting from 605 List <string> backUrls = urlGen.Get(605, 10); // generate 10 urls, starting from 615 List <string> forwardUrls = urlGen.Get(615, 10); // generate 10 urls, starting from 614 List <string> incUrls = urlGen.Get(614, 10); // each url should be the comic, directly // urls are sorted // foreach (var x in backUrls) { // Console.WriteLine (x); // } // Seems like this is a legitimate fail... // backUrls[0] is actually comic 606, expected 605 // further investigation required Assert.AreEqual(10, backUrls.Count()); Assert.AreEqual(xkcdImg, backUrls [9]); Assert.AreEqual(10, forwardUrls.Count()); Assert.AreEqual(xkcdImg2, forwardUrls [0]); Assert.AreEqual(10, incUrls.Count()); Assert.AreEqual(xkcdImg, incUrls [0]); Assert.AreEqual(xkcdImg2, incUrls [1]); }
public void Parse_ReturnsComic() { // Arrange dynamic json = JObject.Parse(TestJson.Get("comic")); var sut = new ComicParser(); // Act Comic result = sut.Parse(json); // Assert Assert.AreEqual(21472, result.Id); Assert.AreEqual(0, result.DigitalId); Assert.AreEqual("Ultimate Spider-Man (Spanish Language Edition) (2000) #8", result.Title); Assert.AreEqual(8, result.IssueNumber); Assert.AreEqual("Variant description", result.VariantDescription); Assert.AreEqual("Test description", result.Description); Assert.AreEqual(null, result.Modified); Assert.AreEqual("TestIsbn0001", result.Isbn); Assert.AreEqual("TestUpc0001", result.Upc); Assert.AreEqual("TestDiamondCode0001", result.DiamondCode); Assert.AreEqual("TestEan0001", result.Ean); Assert.AreEqual("TestIssn0001", result.Issn); Assert.AreEqual("Comic", result.Format); Assert.AreEqual(0, result.PageCount); Assert.AreEqual(1, result.TextObjects.Count); Assert.AreEqual("issue_solicit_text", result.TextObjects.Single().Type); Assert.AreEqual("en-us", result.TextObjects.Single().Language); Assert.AreEqual("\"The Marvel Age of Comics continues! This time around, Spidey meets his match against such classic villains as Electro and the Lizard, and faces the return of one of his first foes: the Vulture! Plus: Spider-Man vs. the Living Brain, Peter Parker's fight with Flash Thompson, and the wall-crawler tackles the high-flying Human Torch!\"", result.TextObjects.Single().Text); Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/21472", result.ResourceUri); Assert.AreEqual(1, result.Urls.Count); Assert.AreEqual("detail", result.Urls.Single().Type); Assert.AreEqual("http://marvel.com/comics/issue/21472/ultimate_spider-man_spanish_language_edition_2000_8?utm_campaign=apiRef&utm_source=20f18f98d97b8d7b9733fa6bdcfaea77", result.Urls.Single().Value); Assert.AreEqual("http://gateway.marvel.com/v1/public/series/5105", result.Series.ResourceUri); Assert.AreEqual("Ultimate Spider-Man (Spanish Language Edition) (2000 - 2001)", result.Series.Name); Assert.AreEqual(2, result.Variants.Count); Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/56155", result.Variants.First().ResourceUri); Assert.AreEqual("Old Man Logan (2016) #8", result.Variants.First().Name); Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/60075", result.Variants.Last().ResourceUri); Assert.AreEqual("Old Man Logan (2016) #8 (Albuquerque Death of X Variant)", result.Variants.Last().Name); Assert.AreEqual(0, result.Collections.Count); Assert.AreEqual(4, result.CollectedIssues.Count); Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/546", result.CollectedIssues.First().ResourceUri); Assert.AreEqual("Marvel Age Spider-Man (2004) #8", result.CollectedIssues.First().Name); Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/681", result.CollectedIssues.Last().ResourceUri); Assert.AreEqual("Marvel Age Spider-Man (2004) #5", result.CollectedIssues.Last().Name); Assert.AreEqual(2, result.Dates.Count); Assert.AreEqual("onsaleDate", result.Dates.First().Type); Assert.AreEqual(new DateTimeOffset(new DateTime(2029, 12, 31), new TimeSpan(-5, 0, 0)), result.Dates.First().Date); Assert.AreEqual("focDate", result.Dates.Last().Type); Assert.AreEqual(null, result.Dates.Last().Date); Assert.AreEqual(1, result.Prices.Count); Assert.AreEqual("printPrice", result.Prices.Single().Type); Assert.AreEqual(2.25, result.Prices.Single().Price); Assert.AreEqual("http://i.annihil.us/u/prod/marvel/i/mg/b/40/image_not_available", result.Thumbnail.Path); Assert.AreEqual("jpg", result.Thumbnail.Extension); Assert.AreEqual(4, result.Images.Count); Assert.AreEqual("http://i.annihil.us/u/prod/marvel/i/mg/a/40/4bc689a4ce796", result.Images.First().Path); Assert.AreEqual("jpg", result.Images.First().Extension); Assert.AreEqual("http://i.annihil.us/u/prod/marvel/i/mg/9/20/4bc665483c3aa", result.Images.Last().Path); Assert.AreEqual("jpg", result.Images.Last().Extension); Assert.AreEqual(0, result.Creators.Available); Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/21472/creators", result.Creators.CollectionUri); Assert.AreEqual(0, result.Creators.Items.Count); Assert.AreEqual(0, result.Creators.Returned); Assert.AreEqual(1, result.Characters.Available); Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/21472/characters", result.Characters.CollectionUri); Assert.AreEqual(1, result.Characters.Items.Count); Assert.AreEqual("http://gateway.marvel.com/v1/public/characters/1011010", result.Characters.Items.Single().ResourceUri); Assert.AreEqual("Spider-Man (Ultimate)", result.Characters.Items.Single().Name); Assert.AreEqual(null, result.Characters.Items.Single().Type); Assert.AreEqual(null, result.Characters.Items.Single().Role); Assert.AreEqual(1, result.Characters.Returned); Assert.AreEqual(2, result.Stories.Available); Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/21472/stories", result.Stories.CollectionUri); Assert.AreEqual(2, result.Stories.Items.Count); Assert.AreEqual("http://gateway.marvel.com/v1/public/stories/48972", result.Stories.Items.First().ResourceUri); Assert.AreEqual("Cover #48972", result.Stories.Items.First().Name); Assert.AreEqual("cover", result.Stories.Items.First().Type); Assert.AreEqual(null, result.Stories.Items.First().Role); Assert.AreEqual("http://gateway.marvel.com/v1/public/stories/48973", result.Stories.Items.Last().ResourceUri); Assert.AreEqual("Interior #48973", result.Stories.Items.Last().Name); Assert.AreEqual("interiorStory", result.Stories.Items.Last().Type); Assert.AreEqual(null, result.Stories.Items.Last().Role); Assert.AreEqual(2, result.Stories.Returned); Assert.AreEqual(0, result.Events.Available); Assert.AreEqual("http://gateway.marvel.com/v1/public/comics/21472/events", result.Events.CollectionUri); Assert.AreEqual(0, result.Events.Items.Count); Assert.AreEqual(0, result.Events.Returned); }