Ergebnis 1 bis 5 von 5

Thema: psyBNC - Google

  1. #1
    Erfahrener Benutzer
    Registriert seit
    20.06.2003
    Beiträge
    689

    psyBNC - Google

    Hallo!

    Habe heute ein kleines C++ Programm geschrieben, das Google nach dem ersten Treffer eines Suchstrings fragt.
    Dieses lässt sich z.B. in den IRC-BNC psyBNC einbinden.

    psyBNC muss mit Scripting Support kompiliert sein, dann kann man z.B. in die Datei (/pfad/zu/psybnc/)scripts/DEFAULT.SCRIPT folgendes eintragen:
    Code:
    server PRIVMSG * * "!google*" echo "NOTICE $NICK :`scripts/google $CONTENT`"
    (Diese Zeile leitet alle PRIVMSGs die vom Server kommen und mit !google beginnen an das Skript weiter und sendet die Ausgabe per NOTICE an den Sender)

    Hier ist der C++ Source der für das Skript benötigt wird:
    Code:
    #include <string>
    #include <iostream>
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    
    std::string google (std::string q)
    {
            std::string res = "";
    
            int google_socket;
            struct sockaddr_in addr_in;
            struct hostent *host = gethostbyname ("www.google.com");
    
            addr_in.sin_family = AF_INET;
            addr_in.sin_port = htons (80);
            addr_in.sin_addr = *((struct in_addr*) host->h_addr);
    
            google_socket = socket (AF_INET, SOCK_STREAM, 0);
            connect (google_socket, (struct sockaddr*) &addr_in, sizeof (addr_in));
    
            std::string toSend = "HEAD /search?btnI=&q=" + q + " HTTP/1.0\r\n\r\n";
            send (google_socket, toSend.c_str(), toSend.size(), 0);
    
            char buffer[1024];
            int recvBytes = recv (google_socket, buffer, sizeof (buffer)-1, 0);
            buffer[recvBytes] = '\0';
    
            res += buffer;
    
            if (res.find ("Location", 0) == std::string::npos)
                    return "Nothing found";
            else
                    res = res.substr (res.find ("Location:", 0)+10, res.find ('\n', res.find ("Location:", 0)) - res.find ("Location:", 0)-11);
    
            return res;
    }
    
    int main (int argc, char* argv[])
    {
            std::string query = "";
            for (int h=2; h<argc; h++) // argv[1] = "!google" 
            {
                    query += argv[h];
                    query += '+';
            }
    
            //for (unsigned int i=0; i<query.length(); i++)
            //      if (query.at(i) == ' ') query[i] = '+';
    
            std::string url = google (query);
    
            std::cout << url << std::endl;
    
            return 0;
    }
    Der Code steht natürlich unter der GNU General Public License!

    Nachdem der Quelltext z.B. in die Datei google.cpp gespeichert wurde, muss er nur noch compiliert werden (g++ muss installiert sein):
    Code:
    g++ google.cpp -o google
    Die Binary google muss nur noch ins Skript Verzeichnis von psyBNC verschoben werden.
    (Nicht vergessen über /sreload bzw. /brehash die Skript Datei im BNC nachzuladen)

    Im Channel wo der BNC ist, einfach
    Code:
    !google Suchbegriff1 Suchbegriff2 etc.
    eingeben.

    Viel Spaß!

    MfG deki

  2. #2
    Neuer Benutzer
    Registriert seit
    06.04.2007
    Beiträge
    13
    Code:
     g++ google.cpp -o google
    google.cpp:45:36: error: unterminated comment
    google.cpp: In function 'int main(int, char**)':
    google.cpp:45: error: expected statement at end of input
    google.cpp:45: error: expected `}' at end of input
    das ist aber nicht normal oder?

    hab das ganze unter aktuellem debian mit 2.6.18.1'er kernel versucht, aktuelles g++ ist installiert

    funktioniert leider nicht ganz so einfach, wäre aber interessant das den bnc nutzern anbieten zu können.
    windows is just a joke

  3. #3
    Erfahrener Benutzer
    Registriert seit
    20.06.2003
    Beiträge
    689
    Habs korrigiert...
    Keine Ahnung wie sich der Fehler eingeschlichen hat...
    War nur ein falscher Kommentar.

  4. #4
    Neuer Benutzer
    Registriert seit
    06.04.2007
    Beiträge
    13
    das funktioniert soweit, wenn ich nicht selber den google befehl schreibe sondern ein andere nutzer das macht

    kann man auch irgendwie selber den befehl ausführen und dann die notice bekommen?
    windows is just a joke

  5. #5
    Erfahrener Benutzer
    Registriert seit
    20.06.2003
    Beiträge
    689
    Ich weiß es nicht mehr genau, ich nutze schon ewig kein psybnc mehr.
    Aber ich glaube das ging nicht. Evtl. über ein anderes psybnc-Script.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •