-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDilbertProvider.cs
92 lines (78 loc) · 3.05 KB
/
DilbertProvider.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;
using ComicPoster.Common;
using HtmlAgilityPack;
namespace ComicPoster.Dilbert
{
public class DilbertProvider : IComicProvider
{
private const string ComicUrl = "http://dilbert.com/";
public Comic DownloadComic(string oldId)
{
var document = DownloadDocument();
var comicBody = document.GetElementbyId("js_comics");
var comicDiv =
comicBody.Descendants()
.FirstOrDefault(
x =>
x.Attributes.Any(
y => y.Value.Equals("img-comic-container", StringComparison.OrdinalIgnoreCase)));
var comicTitle = comicBody.Descendants()
.FirstOrDefault(
x => x.Attributes.Any(y => y.Value.Equals("comic-title-name", StringComparison.OrdinalIgnoreCase)))?
.InnerText;
var imageContainter = comicDiv?.ChildNodes
.FirstOrDefault(x => x.Name.Equals("a", StringComparison.OrdinalIgnoreCase));
var imageNode = imageContainter?.ChildNodes
.FirstOrDefault(x => x.Name.Equals("img", StringComparison.OrdinalIgnoreCase));
var imageUrl =imageNode?.Attributes
.FirstOrDefault(x => x.Name.Equals("src", StringComparison.OrdinalIgnoreCase))?
.Value;
var comicUrl = imageContainter?.Attributes
.FirstOrDefault(
x => x.Name.Equals("href", StringComparison.OrdinalIgnoreCase))?.Value;
if (oldId.Equals(comicUrl, StringComparison.OrdinalIgnoreCase)
|| string.IsNullOrEmpty(comicTitle)
|| string.IsNullOrEmpty(imageUrl)
|| string.IsNullOrEmpty(comicUrl))
{
return null;
}
var newImageUrl = imageUrl;
if (!imageUrl.Contains("http://") && !imageUrl.Contains("https://"))
{
if (imageUrl.StartsWith("//"))
newImageUrl = "https:" + imageUrl;
}
var imageUri = new Uri(newImageUrl);
var comic = new Comic
{
Name = "Dilbert",
PermaLink = new Uri(comicUrl),
ComicUrl = new Uri(ComicUrl),
Id = comicUrl,
Title = HttpUtility.HtmlDecode(comicTitle),
ComicImages = new List<ComicImage>
{
new ComicImage
{
AltText = null,
ImageUrl = imageUri
}
}
};
return comic;
}
private static HtmlDocument DownloadDocument()
{
var webclient = new WebClient();
var html = webclient.DownloadString(ComicUrl);
var document = new HtmlDocument();
document.LoadHtml(html);
return document;
}
}
}