Not logged in. · Lost password · Register
Forum: PHP4You :: Scripts Support und Fragen RSS
neue Funktion : RSS to PHP to IRC bot ?
MaDDe1337 #1
Member since Jun 2009 · 4 posts
Group memberships: Mitglieder
Show profile · Link to this post
Subject: neue Funktion : RSS to PHP to IRC bot ?
Hallo,

Ich suche verzweifelt nach einem BOT der mir RSS feeds in einem IRC channel ausgibt : wie zum beispiel fußballergebnisse von einem RSS feed auslesen, und in einem Channel wiedergeben. Ich bin mir sicher dass es möglich ist. Bis jetzt habe ich dank google nichts gefunden.

Der PhPBot funktioniert bis zum joinen und die verschiedenen tools wunderbar ! :) nur der script für so einen livescorebot fehlt mir :)

Vielen Dank im vorraus.

Edit : Also eingetlich ist es nur einen RSS reader der die RSS news im channel wiedergibt, habe bisjetzt noch keinen script dazu gefunden :(
This post was edited on 2009-06-23, 20:27 by MaDDe1337.
Avatar
Janek (Administrator) #2
User title: Admin
Member since Aug 2006 · 125 posts · Location: Potsdam
Group memberships: Administratoren, Cehmes-Entwickler, Mitglieder
Show profile · Link to this post
Hi MaDDe1337,

im Grunde ist es recht einfach so etwas zu realisieren. Am besten ist es sich ein einfaches PHP Skript zum auslesen von RSS Feeds zu suchen. Ich vermute mal das es dafür diverse Tutorials gibt. Man kann so etwas natürlich auch selber schreiben aber dafür muss man sich dann näher mit dem Aufbau von RSS-XML Dateien befassen.

So bald man so etwas hat, ist es ziemlich einfach ein solches Skript durch den Bot bei bestimmten Befehlen aufrufen zu lassen.

Noch eine Frage dazu: Möchtest du das der Bot selbstständig alle X Minuten die Neusten Feed Einträge ausgibt oder soll das nur auf Abruf durch einen User im Channel passieren? Also beispielsweise durch "$news" oder "$fußballergebnisse"

Grüße
foxx
>> PHP4You
>> Against ICQ
MaDDe1337 #3
Member since Jun 2009 · 4 posts
Group memberships: Mitglieder
Show profile · Link to this post
hi foxx ! danke für deine Antwort !

ok habe jetzt alles geschafft, endlich liest der bot die rss, und gib sie dann wieder im channel.

Nur, wie mache ich jetzt dass er mir genau wenn ein neuer rss kommt den auch anzeigt?

so gesehen wäre es so :

prüfe rss seite alle 5 sekunden , gib den rss aus (ich kann ja durch den rss code den ich jetzt habe nur den letzten anzeigen lassen) habe den rss code von hier : http://www.web-spirit.de/webdesign-tutorial/7/RSS-Feed-aus…

nur wie code ich das, dass er immer die rss seite prüft und erst dann wenn ein neuer code erscheint gibt er es dann raus.

puuuh langsamm wirds komplieziert ^^
This post was edited 4 times, last on 2009-06-26, 23:32 by MaDDe1337.
Avatar
Janek (Administrator) #4
User title: Admin
Member since Aug 2006 · 125 posts · Location: Potsdam
Group memberships: Administratoren, Cehmes-Entwickler, Mitglieder
Show profile · Link to this post
hi MaDDe1337,

ich überleg im Moment noch wie das am besten machbar ist. Eine möglichkeit wäre das ganz normal über die Hooks zu machen. Nachteil dabei: RSS Feeds werden nur überprüft, wenn jemand eine Nachricht schreibt.
Machbar ist das, indem man einen Hook bei jeder Aktion aufrufen lässt und nicht nur bei bestimmten Nachrichten. Erklärt hab ich das schon einmal in einem anderen Thread.

das heißt für dein Plugin initiierst du den Hook ganz normal gibts als ersten Parameter allerdings einen leeren String an:

$bot->add_privmsg_hook("", "php4youBot_rss");

dann wird die Funktion "php4youBot_rss" bei jeder eingehenden Nachricht ausgeführt.

function php4youBot_rss($irc, $params, $prefix, $channel) {
    DEIN CODE
}

Mit Hilfe einer globalen Variable, welche den Zeitpunkt der letzen Überprüfung auf neue RSS Feeds speichert, kannst du noch einstellen, dass nicht bei jeder Nachricht gecheckt wird sondern nur alle X Minuten.

Vielleicht kriegst du das ja selber hin sonst schau ich nochmal genauer. Am besten wär ja wenn der automatisch checken würde. Also nicht über Hooks sondern alle X Minuten egal ob es Nachrichten gibt oder nicht. Dafür wird man allerdings denke ich den Code des Bots modifizieren müssen.
>> PHP4You
>> Against ICQ
MaDDe1337 #5
Member since Jun 2009 · 4 posts
Group memberships: Mitglieder
Show profile · Link to this post
also mit der funktion aufrufen hab ichs hinbekommen :)

function php4youBot_livescore($irc, $params, $prefix, $channel) {
    DEIN CODE
}

so siehts bei mir ungefähr aus :) das klappt schonmal alles.

Das problem ist wie du es beschrieben hast, das Aktualisieren von der rss seite, und dann das neueste davon ausgeben, und falls er das schon ausgegeben hat, nicht auszugeben^^ sehr kompliziert xD.

Mit Hilfe einer globalen Variable, welche den Zeitpunkt der letzen Überprüfung auf neue RSS Feeds speichert, kannst du noch einstellen, dass nicht bei jeder Nachricht gecheckt wird sondern nur alle X Minuten.

Wenn ich mir das irgendwo klauen kann werd ichs hinkriegen xD Ich versuch es heute abend.
Mein erster Versuch wäre erstmal dass er zum Beispiel alle 10 minuten den neusten RSS feed ausliest und wiedergibt.

Dass mit der Seite alle 5 sekunden checken werd ich erstmal lassen, außer du machst mir ein ganz neuen bot !!! :D

Danke nochmal für die Hilfe, wenn du Zeit hast kannst du dich mal mehr damit beschäftigen :P so werd ich vielleicht schneller fertig  :cool:

das nächste problem habe ich auch noch :

Wie füge ich diese $owner funktion in der livescore function ?
das nur ich den !livescore befehl ansteuern kann, habe es zwar einbischen mit dem code der in der admin.php versucht da rum zu spielen, jedoch bis jetzt noch erfolglos ^^

global $owner ist mir klar,
nur wie mache ich mich selber zum owner und wie stelle ich die Funktion ein dass sie dann nur über mich ansprechbar ist ? danke ! :)
This post was edited on 2009-06-27, 15:23 by MaDDe1337.
Avatar
Janek (Administrator) #6
User title: Admin
Member since Aug 2006 · 125 posts · Location: Potsdam
Group memberships: Administratoren, Cehmes-Entwickler, Mitglieder
Show profile · Link to this post
tut mir leid das es mit meinem antworten so lange dauert... hab grad leider auch keine bessere antwort. wollte nur sagen das ich dich nicht vergessen hab, kann mich aber denke ich erst so gegen samstag/sonntag damit beschäftigen.
bei ganz konkreten, kleineren fragen kann ich schon vorher helfen.
oder hast du schon was ausprobiert? du könntest mir wenn du möchtest den code/entsprechende code"schnipsel" schicken und ich kann schauen was probleme bereiten könnte.
>> PHP4You
>> Against ICQ
MaDDe1337 #7
Member since Jun 2009 · 4 posts
Group memberships: Mitglieder
Show profile · Link to this post
Ich hab bisjetzt noch nichts rausgefunden wie ich es coden sollte dass er das jedes mal aktualisiert :(

das mit dem RSS auslesen klappt sehr gut hier der code :


also ich bin sicher dass da ein paar sachen weg können usw, ich bin erstmal froh dass es überhaupt klappt xD

Es ist auf Französisch, da es in einem FR channel ausgegeben wird ^^
das ist die function die bei mir unter livescore.php in den ordner bot_function steht :

Ich rufe es dann per !actufoot auf

Die global owner function war ein Versuch, wo nur ich den Bot starten kann, klappt jedoch nicht :(
Der Online Status klappt aber. also hab ich wahrscheinlich was hier vergessen ^^

<?php

$bot->add_privmsg_hook($c . "actufoot", "php4youBot_actufoot");

    function php4youBot_actufoot($object, $params, $prefix, $channel,$rssfeed="http://www.lequipe.fr/Xml/Football/Titres/actu_rss.xml", $cssclass="www.lequipe.fr", $encode="auto", $anzahl=1, $mode=1){
        global $owner;
       
    $nick = IRC::get_nick($prefix);
    $object->privmsg($channel, ":#Fifa-Esports vous informe sur toute l'actualité du football");
        $day = date('d-m-Y');
        $timer = date('h-i-s');
        $today_str = "$day chas $timer";
        $object->privmsg($channel, ": www.Fifa-Esports.fr ");
        $object->privmsg($channel, ":Lactu : www.lequipe.fr");
if ($nick == "dignitas\MaDDe") {
{
    // $encode e[".*"; "no"; "auto"]

    // $mode e[0; 1; 2; 3]:
    // 0 = nur Titel und Link der Items weden ausgegeben
    // 1 = Titel und Link zum Channel werden ausgegeben
    // 2 = Titel, Link und Beschreibung der Items werden ausgegeben
    // 3 = 1 & 2
   
    // Zugriff auf den RSS Feed
    $data = @file($rssfeed);
    $data = implode ("", $data);
    if(strpos($data,"</item>") > 0)
    {
        preg_match_all("/<item.*>(.+)<\/item>/Uism", $data, $items);
        $atom = 0;
    }
    elseif(strpos($data,"</entry>") > 0)
    {
        preg_match_all("/<entry.*>(.+)<\/entry>/Uism", $data, $items);
        $atom = 1;
    }
   
    // Encodierung
    if($encode == "auto")
    {
        preg_match("/<?xml.*encoding=\"(.+)\".*?>/Uism", $data, $encodingarray);
        $encoding = $encodingarray[1];
    }
    else
    {$encoding = $encode;}
   
    echo "<!-- RSS Feed Script von Sebastian Gollus: http://www.web-spirit.de/webdesign-tutorial/7/RSS-Feed-auslesen-mit-PHP -->\n";
    echo "<div class=\"rssfeed_".$cssclass."\">\n";

    // Titel und Link zum Channel
    if($mode == 1 || $mode == 3)
    {
        if(strpos($data,"</item>") > 0)
        {
            $data = preg_replace("/<item.*>(.+)<\/item>/Uism", '', $data);
        }
        else
        {
            $data = preg_replace("/<entry.*>(.+)<\/entry>/Uism", '', $data);
        }
        preg_match("/<title.*>(.+)<\/title>/Uism", $data, $channeltitle);

        if($atom == 0)
        {
            preg_match("/<link>(.+)<\/link>/Uism", $data, $channellink);
               
        }
        elseif($atom == 1)
        {
            preg_match("/<link.*alternate.*text\/html.*href=[\"\'](.+)[\"\'].*\/>/Uism", $data, $channellink);
        }

        $channeltitle = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $channeltitle);
        $channellink = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $channellink);
    
        echo "<h1><a href=\"".$channellink[1]."\" title=\"";
       
        if($encode != "no")
        {echo htmlentities($channeltitle[1],ENT_QUOTES,$encoding);}
        else
        {echo $channeltitle[1];}
        echo "\">";
        if($encode != "no")
        {echo htmlentities($channeltitle[1],ENT_QUOTES,$encoding);}
        else
        {echo $channeltitle[1];}
        echo "</a></h1>\n";
    }
   
    // Titel, Link und Beschreibung der Items
    foreach ($items[1] as $item) {
        preg_match("/<title.*>(.+)<\/title>/Uism", $item, $title);
        if($atom == 0)
        {
            preg_match("/<link>(.+)<\/link>/Uism", $item, $link);
        }
        elseif($atom == 1)
        {
            preg_match("/<link.*alternate.*text\/html.*href=[\"\'](.+)[\"\'].*\/>/Uism", $item, $link);
        }
       
        if($atom == 0)
        {
            preg_match("/<description>(.*)<\/description>/Uism", $item, $description);
        }
        elseif($atom == 1)
        {
            preg_match("/<summary.*>(.*)<\/summary>/Uism", $item, $description);
        }
      
        $title = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $title);
        $description = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $description);
        $link = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $link);
        echo "<p class=\"link\">\n";
        echo "<a href=\"".$link[1]."\" title=\"";
        $object->privmsg($channel,":" .$title[1] );
        if($encode != "no")
        {echo htmlentities($title[1],ENT_QUOTES,$encoding);}
        else
        {echo $title[1];}
        echo "\">";
        if($encode != "no")
        {echo htmlentities($title[1],ENT_QUOTES,$encoding)."</a>\n";}
        else
        {echo $title[1]."</a>\n";}
        echo "</p>\n";
        if($mode == 2 || $mode == 3 && ($description[1]!="" && $description[1]!=" "))
        {
            echo "<p class=\"description\">\n";
            if($encode != "no")
            {echo htmlentities($description[1],ENT_QUOTES,$encoding)."\n";}
            else
            {echo $description[1];}
            echo "</p>\n";
        }
        if ($anzahl-- <= 1) break;
    }
    echo "</div>\n\n";
}}}
?>

was jetzt noch bleibt ist diese aktualisierung der php seite wenn ein neuer rss feed kommt soll er es ausgeben
This post was edited on 2009-07-07, 15:54 by MaDDe1337.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please note the verification code from the picture into the text field next to it.
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
This board is powered by the Unclassified NewsBoard software, 20090606-dev, © 2003-8 by Yves Goergen
Current time: 2012-02-05, 19:51:01 (UTC +01:00)