RSS Trillian History mit SimpleXML auslesen

verfasst 03.08.2008 von MediaCix | kurze URL: /t362 | Kommentar schreiben

Eigentlich war das nur mal so ein Versuch - auslesen der Trillian History mittels SimpleXML. Im folgenen Beispiel möchte ich nur eine Methode zeigen, wie man es machen könnte.

Der Aufbau der Trillian History sieht etwa so aus:

<session type="start" time="1192308577" medium="AIM" to="UserXYZ" from="Silesia124"/>
<message type="incoming_privateMessage" time="1192308578" medium="AIM" to="Silesia124"
 from="UserXYZ" from_display="UserXYZ" text="nabend%2E%2E"/>
<status type="online" time="1192553848" medium="AIM" from="UserXYZ"/>


Im File sind also 3 unterschiedliche Werte enthalten. Session, message und status. Dies muss beim auslesen dann mit beachtet werden.

Zum Testen habe ich das File erstmal so eingelesen:

» PHP
<?php
$content 
'<item>';
$content .= file_get_contents('test.xml');
$content .= '</item>';

$xml = new SimpleXMLElement($content);  

// zum Testen der Ausgabe
print_r($xml);
?>


Die Sache mit
$content = '<item>';
ist ein kleiner Trick, damit SimpleXML den Inhalt auch als XML-String erkennt. Ansonsten gibt es hier Fehlermeldungen. Wenn sonst alles im grünen Bereich ist, sollte uns print_r() jetzt etwas ausgeben. print_r() zeigt nun eine sortierte Ausgabe von session, message und status an. Dies muss nun so ausgelesen werden, dass alle Einträge nach dem Zeitstempel sortiert sind.

Zunächst habe ich noch eine Hilfs-Funktion mit eingebunden, um auf die jeweiligen Attribute zugreiffen zu können. Weiterhin habe ich mir überlegt, die Ausgabe gleich in ein neues Array ($log_array) zu schreiben, mit der ich besser arbeiten kann.

» PHP
<?php
function getAttribute($att$name){
 foreach(
$att as $key=>$val){
 if (
$key == $name) return (string)$val;
 }
}

$log_array = Array();
?>


Und jetzt kommt der eigentliche Spass - das Auslesen vom XML-Inhalt:

» PHP
<?php
for ($i 0$i count($xml); $i++ ) {

 if ( 
$xml->session[$i] ) {
 
$att $xml->session[$i]->attributes();
 
$time getAttribute($att,'time');
 
$log_array[$time] = Array(
 
'date' => date('d.m.y H:i'$time),
 
'type' => getAttribute($att,'type'),
 
'from' => getAttribute($att,'from'),
 
'to' => getAttribute($att,'to'),
 );
 }

 if ( 
$xml->message[$i] ) {
 
$att $xml->message[$i]->attributes();
 
$time getAttribute($att,'time');
 
$log_array[$time] = Array(
 
'date' => date('d.m.y H:i'$time),
 
'type' => getAttribute($att,'type'),
 
'from' => getAttribute($att,'from'),
 
'to' => getAttribute($att,'to'),
 
'text' => utf8_decodeurldecodegetAttribute($att,'text') ) ),
 );
 }

 if ( 
$xml->status[$i] ) {
 
$att $xml->status[$i]->attributes();
 
$time getAttribute($att,'time');
 
$log_array[$time] = Array(
 
'date' => date('d.m.y H:i'$time),
 
'type' => getAttribute($att,'type'),
 
'from' => getAttribute($att,'from'),
 
'to' => getAttribute($att,'to'),
 );
 }

}

print_r$log_array );
?>


Wenn jetzt alles funktioniert, sollte die Ausgabe von $log_array in etwa aussehen:

Array
(
    [1192308577] => Array
        (
            [date] => 13.10.07 22:49
            [type] => start
            [from] => Silesia124
            [to] => UserXYZ
        )
    [1192308578] => Array
        (
            [date] => 13.10.07 22:49
            [type] => incoming_privateMessage
            [from] => UserXYZ
            [to] => Silesia124
            [text] => nabend..
        )
    [1192553848] => Array
        (
            [date] => 16.10.07 18:57
            [type] => online
            [from] => UserXYZ
            [to] => 
        )

)


Nun das ist jetzt nur ein einfaches Beispiel. Das ganze kann noch verbessert werden. Auch könnte man daraus eine Klasse schreiben.

[Änderungen vorbehalten]

neuen Kommentar schreiben

Ich möchte automatisch eine E-Mail bei neuen Kommentaren erhalten.



Themen mit ähnlichen Inhalten

    - keine weiteren Themen gefunden -

Tags zum Beitrag

trillian-history     simplexml