schwobeseggl.de

ein Neigschmecktr in Baden

  • Artikel
  • Fotos
  • Impressum

Quassel – PHP_search

Posted at April 24, 2009

Ich nutze ja schon eine Weile lang Quassel-IRC. Leider durchsucht die Suche nur das bereits vorhandene Backlog (bzw. die “Chathistorie”) und man muss immer erst mühsam bis zum Anfang hochscrollen, damit er sich “mehr” holt.

Jetzt hab ich einfach auf dem Server auf dem der Core läuft folgendes PHP-Script hinterlegt:

#!/usr/bin/php -q
<?php
$shortopts  = "";
$shortopts .= "h:";
$shortopts .= "u:";
$shortopts .= "c:";
$shortopts .= "s:";

$options = getopt($shortopts);

function getMessage($db, $quasseluser, $channel, $search = null) {
    $quasseluser = sqlite_escape_string($quasseluser);
    $channel = sqlite_escape_string($channel);
    $search = sqlite_escape_string($search);

    $sql = '
        SELECT DISTINCT
                backlog.time AS time,
                sender.sender AS sender,
                backlog.message AS message,
                buffer.buffername AS buffername
        FROM backlog
        OUTER JOIN quasseluser, buffer, sender
        ON (
                quasseluser.username = "'.$quasseluser.'"
                AND
                backlog.bufferid = buffer.bufferid
                AND
                quasseluser.userid = buffer.userid
                AND
                buffer.buffername LIKE "%'.$channel.'%"
                AND
                sender.senderid = backlog.senderid
        )';
    if ($search != null) {
        $sql .= ' WHERE message LIKE "%'.$search.'%";';
    }
    $output = array();
    $longestname = 0;
    foreach ($db->query($sql) as $row) {
        $sender = explode("!", $row['sender']);
        $sendername = $sender[0];
        if (strlen($sendername) > $longestname) {
            $longestname = strlen($sendername);
        }
        array_push(
            $output,
            array(
                date("Y-m-d H:i:s", $row['time']),
                $row['buffername'],
                $sendername,
                $row['message']
            ));
    }
    foreach ($output as $entry) {
        printf("%s (%s) %s : %s\n", $entry[0], $entry[1], str_pad($entry[2], $longestname, " "), $entry[3]);
    }
    printf("Es wurden %u Ergebnisse gefunden.\n", count($output));
}

try {
    $homepath = $options["h"];
    $username = $options["u"];
    $buffer = $options["c"];
    $search = $options["s"];

    if(!$homepath || !$username || !$buffer) {
        $output = "usage: ";
        $output .= __FILE__." -h <path/to/quassel/sqlite> -u <quasseluser> -c <channel/buffer> [-s <string>]";
        die($output . "\n");
    }

    $db = new PDO('sqlite:' . $homepath);
    getMessage($db, $username, $buffer, $search);

} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

Keinerlei Fehlerbehandlung, wenns schiefläuft geht bestimmt irgendwas irreperabel kaputt. Keine Garantie für nichts :) Ein möglicher Aufruf wäre:

14:34:46 pennywise ~# ./searchQuassel.php -h quassel-storage.sqlite -u pennywise -c quassel.de -s foobar
2008-11-03 11:49:01 (#quassel.de) pennywise    : und da war der Bot jetzt halt drin, weil er irgendwas gesagt hat wie "hallo foobar, wilkkommen in der hölle"
2008-11-06 20:35:57 (#quassel.de) pennywise    : kann ich auch ein temporäres netzwerk haben? sowas wie /join irc.server.com/#foobar?
2008-11-12 11:52:56 (#quassel.de) hanswurst    : im core-log steht nur "foobar benutzer x getrennt"

manpage

-h : Pfad zur SQLite-DB von quasselcore. Liegt meist in ~/.config/quassel-irc.org/
-u : Der Benutzer mit dem man sich in quassel einloggt. Dies hat nichts mit der IRC-Identität zu tun.
-c : Der Channel (bzw. das Query) in dem gesucht werden soll. Ist case insensitive und kann auch nur teilweise übergeben werden (z.B. "quassel" findet "#quassel", "#quassel.de" und "quassel-announce")
-s : OPTIONAL. Der Text nach dem gesucht werden soll. Wenn weggelassen, dann werden alle Nachrichten im übergebenen Channel zurückgegeben

Ich hatte auch noch ne Version mit Prepared Statements, aber die hat beim "$db->prepare($sql)" einfach kein Statement erzeugt. Ohne Fehlermeldung ohne alles. WTF?!

Ähnliche Artikel:

  1. Quassel – ein IRC-Dings
  2. Quassel – Client vom Server aus trennen
  3. PHP hates me – eine Set-Klasse
  4. google

Linux, PHP, Sonstiges, Spass
  • Digg
  • Stumbleupon
  • Del.icio.us
  • Reddit
  • Technorati

If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.

Comments are closed.

Search

Archives

  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • February 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • November 2007
  • October 2007
  • March 2007
  • March 2006
  • November 2005
  • October 2005
  • September 2005

Categories

  • Arbeit
  • PC & Accessoires
    • Linux
  • Pfadfinder
  • Programmiersprachen
    • C#
    • Java
    • PHP
  • Sonstiges
  • Spass
  • Studium
    • Diplomarbeit
    • Praxissemester
    • USA
  • Uncategorized
  • Wordpress
  • Recent Posts

    • URLdump
    • Flagge zeigen
    • London
    • $N zufällig gewählte Dateien
    • Hamburg – Jetzt in echt und mit Bildern
  • Tags

    Addon Amerika Apple Auto bahn bild Computer dell Deutschland eisdiele Extension fahrrad Film firefox flash geburtstag google Indiana indianapolis Internet itunes Java Javascript junit kaputt karlsruhe Kino Kinofilm Laptop last.fm Linux Microsoft Mozilla PHP Praxissemester skype Spass system Thunderbird umzug USA windows wohnung Wordpress Zoll
  • Links

    • almightyfish - A new world order
    • DPSG Stamm Holzgerlingen - Die Homepage des Pfadfinderstamms der DPSG Holzgerlingen
    • eisdiele’s blog - Der Blog eines tollen Typs. Ich mein, er ist Pfadfinder, solche Leute sind per se einfach spitze …
    • Jule’s Blog - Ein Blog von der Jule :) in good ol’ Karlsruhe
    • Stephan’s Blog - Ein Komolitone

Powered by Wordpress | WP Premium theme by Premium Wordpress Themes
Copyright 2010 schwobeseggl.de. All rights reserved

  • Artikel
  • Fotos
  • Impressum