VB.NET: ICQ Benutzerinformationen auslesen
In Deutschland ist der Instant Messaging Client ICQ seht weit verbreitet. So könnte man doch ab und zu eine Funktion gebrauchen mit der man prüfen kann, ob ein Benutzer grade am PC ist.
Leider schränkt ICQ uns hier sehr ein und bietet keinerlei Schnittstelleninformationen. So müssen die Entwickler berühmter Clients wie QIP, Miranda oder Trillian die Funktionsweise des Protokolls selbst erarbeiten durch Reverse Engeneering!
Ich bin vor ein paar Tagen aber auf ein interessantes Skript gestolpert, dass die ICQ Webseite wohl intern dazu benutzt den Status der User im Forum und auf der eigenen Homepage darzustellen. Und natürlich können wir diesen auch anzapfen!
Das Skript befindet sich unter dieser Adresse: http://www.icq.com/js/pcc.php?Uin=[ICQNUMMER]
Ruft man diesen Link mit einer gültigen ICQ Nummer am Ende auf so erhält man ein großes Wirwar an Informationen die aber leider nicht geordnet dargestellt werden!
Auch wenn es nicht alle Informationen sind, die ICQ über einen speichert, so kann man mit den Daten trotzdem schon was anfangen!
Bild 1: Das ICQ Tool - und ja: Diese ICQ Nummer gibts wirklich
So kann man neben Status und Namen auch das Bild des Benutzers abfragen. Aber nur das Bild, das der User im Forum verwendet (glaube ich).
Desweiteren kann man nicht von allen Benutzern den Status abfragen. Ich vermute, das liegt daran dass diese Benutzer erst eine Autorisierung verlangen bevor sie den Status preisgeben.
Der Programmierteil beschränkt sich hierbei auf das Filtern der Informationen die man durch den Aufruf des oberen Links bekommt:
Private Function getICQInfos(ByVal uid As String) As String()
Dim Infos() As String
Dim retVal(8) As String
Dim web As WebClient = New WebClient
Infos = web.DownloadString("http://www.icq.com/js/pcc.php?Uin=" & uid).Split(vbNewLine)
'Zeile - Inhalt
'3 - fullname
'6 - userinfo
'9 - onlinestatus
'10 - email
'11 - handynummer
'13 - homepage
'14 - icq uin
'16 - userphoto
'17 - hausnummer
'18 - useronlineicon
'19 - nickname
'Vor und Nachnamen laden
retVal(0) = Infos(3).Substring(Infos(3).IndexOf("""") + 1, _
Infos(3).Length - 3 - Infos(3).IndexOf(""""))
'Benutzerbeschreibung7)
retVal(1) = Infos(6).Substring(Infos(6).IndexOf("""") + 1, _
Infos(6).Length - 3 - Infos(6).IndexOf(""""))
'Online Status als Zahl
retVal(2) = Infos(9).Substring(Infos(9).IndexOf("""") + 1, 1)
'E-Mailadresse
retVal(3) = Infos(10).Substring(Infos(10).IndexOf("""") + 1, _
Infos(10).Length - 3 - Infos(10).IndexOf(""""))
'Homepage
retVal(4) = Infos(13).Substring(Infos(13).IndexOf("""") + 1, _
Infos(13).Length - 3 - Infos(13).IndexOf(""""))
'Benutzerfoto URL 'jaja ich weis coole formel
retVal(5) = Infos(16).Substring(Infos(16).IndexOf(""") + 6, _
(Infos(16).Length - (Infos(16).IndexOf(""") + 6)) _
- (Infos(16).Length - (Infos(16).IndexOf("" "))))
'User Online Icon URL
retVal(6) = Infos(18).Substring(Infos(18).IndexOf("""") + 1, _
Infos(18).Length - 4 - Infos(18).IndexOf(""""))
'Nickname
retVal(7) = Infos(19).Substring(Infos(19).IndexOf("""") + 1, _
Infos(19).Length - 3 - Infos(19).IndexOf(""""))
web.Dispose()
Return retVal
End Function
Ich habe hier in dem Beispiel nicht alle Informationen gefiltert, aber für die Demo hier wirds wohl reichen!
Habt ihr auch schon mit solchen ICQ Skripts herumexperimentiert? Schreibt ein Kommentar mit euren Tools.
Das Demoprojekt gibts hier: Download