Nach mehreren Experimentierversuchen mit der verschollenen ICQ-API und der mysteriösen Oscarlib, die mich nicht wirklich weitergebracht haben, fand ich doch endlich einen Weg, auszulesen, ob eine UIN on- oder offline ist.
Es gibt nämlich eine mehr oder weniger geheime API-Seite, die ein paar Informationen über den jeweiligen User bereitstellt. Diese lautet
http://www.icq.com/js/pcc.php?Uin=123456789 (sorry für denjenigen, der diese Nummer hat

).
Wenn wir einmal auf diese Seite gehen, sehen wir einen Wall-Of-Text, aber wenn wir (bei FF Rechtsklick ► Seitenquelltext anzeigen) uns den Seitenquelltext angucken, sieht es schon etwas geordnet aus. Dort finden wir in der 8ten Zeile
gl_status = gl_pcc_info\[6\] = "0";. Wie man vermuten kann, stellt die Zahl hinten den Status dar. Wenn wir also diese Zahl auslesen würden, erhielten wir den aktuellen Online-Status.
|
Visual Basic Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Module IcqOnlineCheck
Public Function checkState(ByVal uin As String) As String
Dim str As String = (New Net.WebClient()).DownloadString("http://www.icq.com/js/pcc.php?Uin=" & uin)
Dim start As Short = Str.IndexOf("gl_status = gl_pcc_info\[6\] = ") + 32 '32 = Stringlänge
Dim status As String = Str.Substring(start, 1) 'Der momentane ICQ-Status
Select Case status
Case 0
status = "Offline"
Case Else
status = "Online"
End Select
Return status
End Function
End Module
|
(Ich erstelle keine Klasse, sondern ein Modul, weil ein nicht-statischer Status-Check für mich – für diesen Zweck– sinnfrei wäre)
Zuerst erstellen wir uns einen
WebClienten, mit dem wir den Seitenquelltext downloaden und direkt als String in
str speichern.
Dann finden wir
gl_status = gl_pcc_info\[6\] = (ohne die Zahl, da der Status ja variabel ist). Zu dieser Position rechnen wir noch 32 dazu, weil wir als Ergebnis ja nicht
gl_status = gl_pcc_info\[6\] = bekommen wollen, sondern die Zahl, welche den Status repräsentiert.
Dieses Ergebnis fangen wir dann in einem Case-Block ab und überprüfen, ob der User jetzt Off- oder Online ist.
[Away, N/A & Occupied binde ich hier nicht ein, weil bei mir bei Usern, die Away, N/A oder Occupied sind immer etwas Anderes herauskommt …]
Wenn wir jetzt bei einem Projekt ein Modul hinzufügen und uns obigen Code copy-&-pasten, brauchen wir für den Aufruf nur noch
|
Visual Basic Quellcode
|
1
|
MsgBox(ICQOnlineCheck.checkState("123456789"))
|
schreiben, und uns flattert ein lustiges „Offline“ (bzw. „Online“) entgegen.
Wenn noch Fragen oder Fehler auftauchen sollten …