2009-07-31 3 views
6

Die Website zu erkennen ist http://www.ipalaces.org/support/JavaScript oder PHP-Option AIM Status

Der Code, den ich für die Statusanzeigen verwenden

<img src="http://big.oscar.aol.com/imperialpalaces?on_url=http://www.ipalaces.org/support/widget/status_green.gif&off_url=http://www.ipalaces.org/support/widget/status_offline.gif"> 

, die eine nette Sache ist, die big.oscar.aol.com Sie können tun, es leitet es an jedes Bild weiter, das Sie für die on_url festgelegt haben, wenn sie online sind, und dasselbe für off_url für offline. Ich möchte dies jedoch in einer if-Anweisung in PHP oder Javascript verwenden, um verschiedene Dinge anzuzeigen. Derzeit ich dies mit:

function getaim($screenname) { 
     $ch  = curl_init(); 
     $url = "http://big.oscar.aol.com/$screenname?on_url=true&off_url=false"; 
     curl_setopt($ch, CURLOPT_URL,$url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
     // added to fix php 5.1.6 issue: 
     curl_setopt($ch, CURLOPT_HEADER, 1); 
     $result = curl_exec($ch); 
     curl_close($ch); 

     if(eregi("true",$result)) { 
      return true; 
     } else { 
      return false; 
     } 
} 

If (getaim("ImperialPalaces")) { print "Online"; } else { print "Offline"; } 

Das Problem mit diesem Code ist, dass aus irgendeinem Grund zu zufälligen Zeiten kann es bis zu 12 Sekunden dauern, bis es tatsächlich um die Ergebnisse abzurufen. Während der Standardimage fast sofort ist.

Gibt es ein bekanntes Problem mit Curl? Gibt es einen schnelleren Weg?

Ich habe jemanden gesehen, der versucht, die .src des img-Tags zu lesen und eine if-Anweisung so zu machen, aber ich konnte es nicht zur Arbeit bringen.

Antwort

4

für ein Dutzend Sekunden Um zu vermeiden, warten, wenn die Dinge nicht in Ordnung zu tun, können Sie ein paar weitere Optionen festlegen, wie (curl_setopt e):

  • CURLOPT_CONNECTTIMEOUT: Die Anzahl der Sekunden zu warten, während der Verbindung versuchen, . Verwenden Sie 0, um unbegrenzt zu warten.
    • es ein paar Sekunden einstellen würde
  • CURLOPT_TIMEOUT genug sein: Die maximale Anzahl von Sekunden cURL Funktionen ermöglichen auszuführen.
    • gleiche für diese ein
  • CURLOPT_DNS_CACHE_TIMEOUT: Die Anzahl der Sekunden DNS-Einträge im Speicher zu halten. Diese Option ist standardmäßig auf 120 (2 Minuten) eingestellt.
    • Sie dies wahrscheinlich auf einen höheren Wert
  • im Allgemeinen auf sie für mehr als nur ein oder zwei Seiten bleiben

Wenn Benutzer Ihrer Website einstellen könnte es interessant sein könnte, dass die Informationen zu speichern, in $_SESSION, und holen Sie es nur hin und wieder.

Zum Beispiel könnten Sie es nur abrufen, wenn der in der Sitzung gespeicherte Wert vor mehr als 5 Minuten abgerufen wurde.Es wäre wahrscheinlich ein paar Anrufe :-)


Eine andere Art und Weise sparen könnte sein, dass auf der Client-Seite zu tun:

  • holt das Bild mit dem <img> Tag
  • im Falle von "Online", verwenden Sie ein Bild, das OK
    • einen Handler auf die "load" sogar des Bildes lädt, um es zu ersetzen Ein Text
  • im Fall von "offline", um ein Bild verwenden, das in 404
    • Steckern einen Handler auf den "error" even des Bildes ist, ist es mit einigem Text zu ersetzen

das ist nicht sehr schön ist (es ist eine Art von „hacky“, in der falschen Art und Weise), aber es sollte so

;-) Ihr Bild wäre:

<div id="arround-1"> 
    <img id="img-1" src="http://big.oscar.aol.com/imperialpalaces?on_url=http://www.ipalaces.org/support/widget/status_green.gif&amp;off_url=http://this.is-a-404-error.com" 
     onload="replace_img_status(1, 1);" 
     onerror="replace_img_status(1, 0);" 
    /> 
</div> 

Sie sehen, dass, wenn der Benutzer verbunden ist, die schließlich zu einem Bild führt, das existiert; also wird die "load" sogar gefeuert werden.

Und in dem Fall, dass der Benutzer nicht verbunden ist, wird die schließlich zu einem Bild führen, das nicht existiert (es gibt einen Fehler 404); Das Ereignis "error" wird ausgelöst.

Sie haben jetzt Pflege dieser beiden Fälle zu nehmen, mit etwas wie folgt aus:

<script type="text/javascript"> 
    var replace_img_status = function (num, status) { 
     var div = document.getElementById('arround-' + num); 
     if (div) { 
      if (status == 1) { 
       div.innerHTML = 'Online'; 
      } else { 
       div.innerHTML = 'Offline'; 
      } 
     } 
    }; 
</script> 

Wenn status1 ist, wir „Online“, und im anderen Fall („error“) angezeigt werden, wir zeigen „offline“ :-)

aber selbst ist es zu funktionieren scheint, ich weiß nicht wirklich, wie die Lösung ^^

1

+1 Pascal für das, aber für jeden, der dies will in PHP, und ist immer noch interessiert, ich habe ein kleines Skript gemacht, das das hea behandelt der Standort (der offline/online zurückkehrt oder was auch immer Sie am Ende der URL setzen (z. B. on_url = 1, in der Kopfzeile würde zurückkommen) Standort: 1)

<?php 
Define('Username', $_GET['sn']); 
Define('URL', 'http://big.oscar.aol.com/' . Username . '?on_url=online&off_url=offline'); 
Define('Online', 'Location: online'); // Change online to whatever you have for on_url 
Define('Offline', 'Location: offline'); // Change offline to whatever you have for off_url 

$Response = Get_Headers(URL); 

If(In_Array(Online, $Response)){ 
    Echo UCWords(StrToLower(Username)) . ' is currently online.'; 
} 
ElseIf(In_Array(Offline, $Response)){ 
    Echo UCWords(StrToLower(Username)) . ' is currently offline, or has set their privacy settings.'; 
} 
?> 
Verwandte Themen