Mit Hilfe dieser Klasse lässt sich die aktuelle Version eines Programmes ermitteln.
Im Falle von Firefox würde zum jetzigen Zeitpunkt "3.6.8" zurückgeliefert werden.
Die Informationen werden aus Wikipedia ausgelesen.
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;
}
2 Kommentare zum Snippet