Cum să îţi faci un robot de IM


Am aşteptat mult timp să pot scrie un astfel de articol. Dacă vă amintiţi, la sfârşitul anului trecut am scris despre ymistic, un robot pentru Yahoo Messenger. În comentarii Gabriel ne întreba cum se poate face unul. Sincer… nu ştiu. Cinste ortodocşilor pentru ymistic şi robotoasteadomnului. Dar uite că între timp a apărut soluţia şi pentru… mai habarnişti. Citez reclama: "If you can create a web page, youcan create an interactive Instant Messaging agent that runs on the instant messaging IDs you choose." În realitate trebuie să ştiţi ceva programare web. Două exemple sunt PHP şi ASP. Eu am încercat puţin şi am făcut un robot (în joacă) în ASP numit catholica@bot.im şi unul în PHP numit cnetro@bot.im.

img276

Acum dezlegarea misterului, cu părţile bune şi rele. IMified (am prezentat serviciul anul trecut, aici) are şi o versiune pentru developeri. Practic e vorba de teste (aşa că dacă nu vor merge cei doi roboţi la un moment dat se poate să fie din această cauză, a beta-ului de teste). Pe viitor robotul ar urma să meargă cu toate reţelele de mesagerie instant mai cunoscute… acum merge însă doar cu GTalk. Ce poate face un astfel de robot?

  • să răspundă la comenzi simple (precum mai sus unde vedeţi eu spun "Ce mai faci?" el răspunde cu "Bine, mulţumesc.")
  • să răspundă la comenzi în paşi (vedeţi mai sus întreb "Noutati?" iar el îmi cere să mai dau un pas, al doilea, cu numărul de articole)
  • să trimită automat mesaje unor abonaţi (să ne imaginăm: când apare un articol pe CNet.ro îi anunţă pe cei care au bot-ul ca prieten)

Reţineţi că e vorba de un beta pentru developeri. Puteţi sări în beta… instant, pentru că codul de invitaţie se trimite automat (evident, vorbesc de data scrierii acestui articol). Să ajungem şi la partea proastă: serviciul nu va rămâne gratuit pentru totdeauna. De fapt se promite introducerea mai multor planuri, între care unul gratuit. Cât de limitat va fi cel gratuit? Vom afla. Oricum, în curând se intenţionează adăugarea de noi funcţii, după cum îmi scria unul dintre cei care lucrează la IMified.

img277

Deci… cum se face un robot IM (mesagerie instant)? Habar nu am. Via IMified se poate face însă uşor. Tot ce trebuie să faceţi este să recepţionaţi parametri msg şi step, ca şi cum ar veni submişi printr-un formular, şi în funcţie de ei să returnaţi ce consideraţi Dvs. Am vrut să scriu un mic robot, de demo. Am sfârşit prin a scrie un cod mai lunguţ, dar cred că l-am păstrat totuşi rezonabil pentru a putea vorbi de un material demonstrativ. După cum vedeţi mai jos, am încercat să definesc câteva saluturi la care robotul răspunde repetându-le, şi câteva întrebări sau mulţumiri la care robotul dă un răspuns distinct. Şi ca să fie şi ceva mai complicat, am făcut şi un proces în doi paşi, cel în care robotul dă lista noutăţilor, întrebând însă cât de lungă să fie lista. Succes la lectura codului. Dacă sunt nelămuriri vă stau la dispoziţie. A, şi nu uitaţi, testaţi robotul adăugând cnetro@bot.im ca prieten în Google Talk (atenţie: dacă citiţi articolul după n luni de când a fost scris, se poate să fi dispărut odată cu ieşirea din beta a serviciului IMified pentru developeri).

<?php
require_once("../../wp-config.php");
function articole($cate){
	$raspunstmp = "";
	$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
	mysql_select_db(DB_NAME);
	$sqlstr = mysql_query("SELECT post_title FROM wp_posts WHERE post_status='publish' ORDER BY id DESC LIMIT $cate");
	while ($row = mysql_fetch_array($sqlstr)) {
		$raspunstmp .= $row['post_title']."<br>";
	}
	mysql_close($link);
	return $raspunstmp;
}
$elim = array("!","?",".");
$saluturi = array("salut","buna ziua","buna seara","buna dimineata","servus","ciao");
$intrebari = array("ce faci","ce mai faci","cum esti","ce faceti","ce mai faceti","cum sunteti");
$multumiri = array("mersi","multumesc","multzam","thanks","ok");
$articole = array("noutati","articole","articolele","ultimele articole");
$mesaj_orig = $_REQUEST['msg'];
$pas = $_REQUEST['step'];
$mesaj = "".$mesaj_orig;
$mesaj = "".strtolower($mesaj_orig);
$mesaj = "".str_replace($elim,"",$mesaj);
$raspuns = "";
if($pas==1){
	if(in_array($mesaj,$saluturi)){
		$raspuns = $mesaj_orig."<reset>";
	}
	else if(in_array($mesaj,$intrebari)){
		$raspuns = "Bine, mulţumesc.<reset>";
	}
	else if(in_array($mesaj,$multumiri)){
		$raspuns = "Cu plăcere.<reset>";
	}
	else if(in_array($mesaj,$articole)){
		$raspuns = "Cate articole anume? (Un număr între 3 şi 7).";
	}
	else
		$raspuns = "Ups... chiar nu am înţeles ce vreţi să spuneţi. Scrieţi ajutor dacă doriţi să aflaţi ce comenzi înţeleg.<reset>";
}
else if($pas==2){
	if($mesaj>="3" && $mesaj<="7")
		$raspuns = "Lista articole<br><br>".articole($mesaj)."<reset>";
	else
		$raspuns = "Nu aţi introdus un număr între 3 şi 7.<error>";
}
if($mesaj=="reset")
	$raspuns = "<reset>";
echo $raspuns;
?>

Ce roboţi aţi putea scrie? De exemplu unul care întrebat să răspundă cu… cursul valutar (sau chiar convertiri valutare); vremea într-o localitate anume; pagerank-ul unui sit… ş.a. Idei v-am dat, soluţia o aveţi (să sperăm că planul gratuit va fi cât de cât atrăgător şi util)… dacă vă interesează tema succes!!!


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (6 evaluări, media: 4,33 din 5)
Loading...Loading...

10 comentarii

  1. Dever spune:

    Cu toate ca solutia este interesanta si am testat-o cu succes, probabil cele mai interesante aplicatii necesita o conexiune la o baza de date.
    Nu prea as avea incredere sa trimit aceste date prin IMified ne-criptate pentru ca se vede ca le parseaza/modifica cat de cat (dispare din mesaje ‹ reset ›) si au si locatia fisierului php unde sta bot-ul.
    Probabil ceva mai complex implica si utilizarea mai multor „pasi”.

  2. radu.capan spune:

    Să vedem puţin problemele ridicate:

    1. Cele mai interesante aplicaţii, corect, cer conectare la baza de date. Am demonstrat mai sus: scriptul se conectează la baza de date CNet.ro şi află ultimele articole.

    2. Despre încredere: a) cum ar putea IMified să facă bot-ul să lucreze fără să ştie adresa scriptului? b) ca orice pagină PHP sau ASP, ceea ce se poate şti din exteriorul serverului este DOAR output-ul, nu codul. IMified obţine DOAR ceea ce noi dăm prin echo şi atât. Şi acel conţinut îl parsează, evident, pentru a interpreta comenzile. Nu există nici o gaură de securitate via IMified, ci doar eventualele riscuri de injecţii MySQL ce nu ţin de IMified ci de programator. Deci, ca să tragem o concluzie, nu există nici o problemă de încredere/neîncredere cu IMified.

  3. Dever spune:

    Am realizat mai tarziu ca am spus prostii in legatura cu parola (nu stiu exact la ce ma gandeam) dar am trantit-o cu convingere dupa o noapte lunga.
    De asemenea pe cine intereseaza subiectul dar nu vor sa fie legati de IMified puteti sa aruncati o privire la clasa asta.

  4. Comy spune:

    Cum pot sa vorbesc cu robotu? Adica ce program trebuie?

  5. radu.capan spune:

    Pentru moment merge cu Google Talk: cand creezi robotul ti se va furniza „numele” lui ce se foloseste la adaugare. In timp robotii vor putea fi folositi si sub alte platforme de IM.

  6. david_elites spune:

    Am si eu 2 intrebari.

    1) La ce se refera require_once(„../../wp-config.php”); ?
    Am facut curand un blog si as vrea sa fac un robot in genul acestui model. Ce trebuie sa pun la require_once?

    2) La DB_HOST pun localhost? La trivia si la toate aplicatiile care cereau conectare la baza de date asa am pus.

    Eu aveam un robot care dadea raspunsuri la intrebari

    P.S. Sunt cam incepator.

  7. radu.capan spune:

    wp-config.php e strict legat de WordPress. Pentru alte cazuri nu are relevanta (ca si restul codului).

  8. david_elites spune:

    Pai eu am facut blog pe wordpress.
    Daca bag wp-config.php spune ca nu poate accesa. Ca e interzis accesul. Am incercat sa schimb permisiunile la fisier si tot la fel zice

  9. Denys spune:

    Salut. Ma chinui de ceva vreme dar nu ma prea pricep… Ma cam depaseste situatia, daca ar putea cineva sa ma ajuta va rog.


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *