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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
class wikipediaReader
{
private string basicWikiLink = "http://de.wikipedia.org/wiki/";
private string appName;
private const string startSequence = "<td valign=\"top\"><b>Aktuelle <a href=\"/wiki/Version_(Software)\" title=\"Version (Software)\">Version</a></b></td>";
public wikipediaReader(string appName)
{
this.appName = appName;
}
public string getNewestAppVersion()
{
try
{
string version = basicQuery();
return basicQuery();
}
catch (Exception e)
{
return "Die aktuelle Version konnte nicht ermittelt werden";
}
}
private string extendedQuery(string source)
{
if (source.IndexOf("<ul class=\"mw-search-results\">") > 0) {
source = source.Substring(source.IndexOf("<ul class=\"mw-search-results\">")); }
else{
source = source.Substring(source.IndexOf("<ul"));}
source = source.Substring(source.IndexOf("href="));
source = source.Substring(source.IndexOf('"')+1);
source = source.Substring(0,source.IndexOf('"'));
string url = "http://de.wikipedia.org" + source;
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10"; // Als Firefox ausgeben - Wikipedia aktzeptiert keine Requests von unbekannten UserAgents
// WebResponse vom WebRequest erstellen
HttpWebResponse wResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
// StreamReader initiieren, um den Inhalt der URL zu lesen
StreamReader sr = new StreamReader(wResponse.GetResponseStream(), Encoding.ASCII);
StringBuilder contentBuilder = new StringBuilder();
while (-1 != sr.Peek())
{
// Zeile für Zeile auslesen
contentBuilder.Append(sr.ReadLine());
}
// Zuweisung des StringBuilder auf String
string strSource = contentBuilder.ToString();
// Response abschließen
wResponse.Close();
// Request beenden
myHttpWebRequest.Abort();
return strSource;
}
/* Liefert die aktuellste Version des übergebenen Programms zurück. Zunächst wird geprüft, ob
* basicWikiLink + this.appName zu einem gültigen Softwareartikel führt. Falls das nicht der Fall ist,
* wird der erste vorgeschlagene Link aufgerufen und nach der Versionsnummer gesucht.
*/
private string basicQuery()
{
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(this.basicWikiLink + this.appName);
myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10"; // Als Firefox ausgeben - Wikipedia aktzeptiert keine Requests von unbekannten UserAgents
// WebResponse vom WebRequest erstellen
HttpWebResponse wResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
// StreamReader initiieren, um den Inhalt der URL zu lesen
StreamReader sr = new StreamReader(wResponse.GetResponseStream(), Encoding.ASCII);
StringBuilder contentBuilder = new StringBuilder();
while (-1 != sr.Peek())
{
// Zeile für Zeile auslesen
contentBuilder.Append(sr.ReadLine());
}
// Zuweisung des StringBuilder auf String
string strSource = contentBuilder.ToString();
// Response abschließen
wResponse.Close();
// Request beenden
myHttpWebRequest.Abort();
/* Wenn der String nicht enthalten ist, ist die geöffnete Seite kein Artikel über Software */
if(!strSource.Contains(startSequence)){
strSource = this.extendedQuery(strSource); /* Falls mehrere Einträge zum Suchwort existieren, wähle den ersten Artikel */
if (!strSource.Contains(startSequence))
{
return "Aktuelle Version nicht verfügbar";
}
}
strSource = strSource.Substring(strSource.IndexOf(startSequence)); // Dokument ab Beginn der Version Zeile
strSource = strSource.Substring(0,strSource.IndexOf("</tr>")); // Nur die Version Zeile
strSource = strSource.Substring(strSource.IndexOf("</td>")); // Titel wegschneiden
strSource = strSource.Substring(strSource.IndexOf("<td>") + 4); // Begínn des Feldes, dass den Versionstring enthält
int index = 0;
for (int i = 0; i < strSource.Length; i++)
{
char actChar = Convert.ToChar(strSource.Substring(i, 1));
if (actChar != ' ' && !Char.IsNumber(actChar) && actChar != '.')
{
index = i;
break;
}
}
strSource = strSource.Substring(0,index); // Nur das VersionFeld
return strSource;
}
|