Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 171
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Aktuelle Version eines Programms mittels Wikipedia ermitteln


Autor: Nab4Ever
Sprache: C#
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 2785
  
Kick it on dotnet-kicks.de  

Beschreibung:

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.


Abgelegt unter: wikipedia, programm, version, aktuell, ermitteln.



C#
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&#160;<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;
        }
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Nab4Ever schrieb am:  12.08.2010 12:48:32

Ergänzung: Ich habe den Wikipedia Support diesbezüglich angeschrieben - Diese Vorgehensweise ist aus ihrer Sicht legitim. Es ist kein Quellennachweis notwendig, da die Versionsnummer nicht die notwendige Schöpfungshöhe erreicht.
Firendeath schrieb am:  12.08.2010 15:59:55

Hi,
schönes Snippet...
aber ich hätte da noch 2 kleine Anmerkungen.
1tens:

string version = basicQuery();
return basicQuery();

Wieso rufst du an dieser Stelle 2 mal ein Funktion auf die dir höchstwahrscheinlich den selben Wert zurückgibt ?
Ich würd das so schreiben:
return basicQuery();


2tens:
catch (Exception e)

Exception kann ALLES sein,
bitte Prezisieren.

Ansonsten tolles Snippet,
Danke =)


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.