Newsgroup: it.comp.www.php
Titolo: PHP/MYSQL  e IRC, possibile interagire?

Ciao a tutti,
come da oggetto, è possibile fare interagire PHP/MYSQL con IRC? In sostanza 
chiedo se sia possibile tramite uno script realizzato in php, determinare ad 
esempio il numero di utenti connessi in un dato istante su un determinato 
network irc oppure il numero di utenti connessi in un determinato istante in 
un dato canale irc.
In caso di risposta affermativa come è possibile fare ciò?
Grazie in anticipo per la risposta.
Cooper.
PS: Nel rispondere alle domande di cui sopra preciso che non si ha accesso 
ai database esclusivi del network ovviamente; quindi il tutto dovrebbe in 
teoria avvenire simulando una connessione a un network irc e acquisire 
l'informazione richiesta, che come detto sopra, può essere il numero di 
utenze massime connesse sul network oppure il numero di utenze massime 
connesse su un dato canale irc.
-- 
www.blueware.it
www.italchat.it
 

 Cooper.
tempo fa, gestivamo un network irc con community annessa, il server web
aveva oltre ad accesso ai database esclusivi dei services irc, anche un
sistema di irc-bot in php/mysql per interagire con esso via tcp/ip.
Le info che chiedi te sono output standard di comandi definiti
nell'rfc1459 e succ.
che vuoi sapere piů nel dettaglio?
-- 
2T STUDIO - Sviluppo Web
  [web]   
http://www.2t-studio.com/ng
	- Sviluppo Siti e Applicativi Web Oriented Validati W3C
	- Consulenze SEO (Posizionamento motori di ricerca)


Piů precisamente mi interessa sapere se:
a) il numero di utenti connessi in un network X;
b) il numero di utenti presenti in un canale Y del network X
Senza ricorrere a strumenti aggiuntivi (bot, client irc, script irc etc) ma 
semplicemente agendo attraverso pura programmazione php.
Grazie ancora,
Cooper.
-- 
www.blueware.it
www.italchat.it
 

 ha scritto nel messaggio 
news:o%Kvg.1409$br5...@tornado.fastwebnet.it...

Dimenticavo, per semplificare al massimo qualcosa del tipo:
    function netusers ($network) {
        // codice
      }
    function channeluser ($network, $channel) {
       // codice
     }
e poi chiamando le rispettive funzioni ottenere il relativo valore intero, 
che rappresenta nel primo caso il numero di utenti connessi sul network 
$network e nel secondo caso il numero di utenti presenti nel canale $channel 
del network $network
Grazie ancora
Cooper.
-- 
www.blueware.it
www.italchat.it
 

 come da oggetto, è possibile fare interagire PHP/MYSQL con IRC?
Prova a dare un'occhiata a questo pacchetto: 
http://phpmib.sourceforge.net/
Magari fa al caso tuo...
Heber D'Alberto

"Heber D'Alberto" <he...@NOMONNEZZAdalberto.it> ha scritto nel messaggio 
news:ud94p3-...@cassini.madteam.info...

Temo proprio di no :( questo simula un bot, (invece non cerco un bot anche 
se realizzato in php) ma semplicemente quel paio di funzioni che interrogati 
server/canale o entrambi restituiscano l'intero richiesto, questo in 
sintesi.
Grazie cmq per la risposta.
Cooper.
-- 
www.blueware.it
www.italchat.it
 

 Magari fa al caso tuo...
per farlo andare bisogna essere su hosting dedicato, giusto?
c'è qualcosa di simile che potrebbe andare su un condiviso, quindi che 
funzioni con le impostazioni base di php/apache? 


Adesso che ci penso, tempo addietro scrissi qualche riga di codice per 
interrogare un server IRC per controllare se una persona era on-line 
oppure no.
Se lo ritrovo lo posto.
Heber D'Alberto

 funzioni con le impostazioni base di php/apache?
visto che si tratta di uno script con un ciclo infinito (dal momento
che deve rimanere connesso al server irc a tempo indeterminato) la
scelta naturale e' farlo girare da linea di comando. e per far questo
si', devi avere una shell da cui farlo girare, che puo' essere in
hosting o semplicemente quella del tuo computer. ma non fa uso di
estensioni strane che non ci sono in una configurazione standard di
php.
cmq modificando il minimo necessario la parte di avvio del bot puoi
farlo girare anche su apache, richiamandolo da una pagina web.
se hai qualche dubbio o hai bisogno di qualche info chiedi pure.

 magari detto una cazzata ma ipotizzo)?
usare php e' di per se' uno strumento addizionale. quello che vuoi fare
tu e' un client irc (ovvero un programma che si connette ad un server
irc) con un numero limitato di funzionalita' (quelle che hai descritto
nel msg).
puoi fare le due funzioni che vuoi tu, pero' a questo punto hai due
scelte:
far conettere ogni volta che hai bisogno di quei lo script al server,
oppure tenere una connessione sempre aperta verso il server per
interrogarlo in tempo reale.
soprattutto se i dati devono finire in una pagina web e' preferibile la
seconda soluzione.
immagina altrimenti che ogni volta che viene caricata la pagina con i
dati che ti servono devi aspettare che le funzioni si connettano al
server irc, lo interroghino e infinte diano l'output che ti serve.
se invece usi un bot lo setti perche' in automatico prenda i tal dati,
li metta su mysql e dalla tua pagina non fai che interrogare il server
mysql.
il numero di utenti lo devi avere ad una data ora o in tempo reale?
ovvero: vuoi sapere quel dato all'ora X o al momento in cui viene
visualizzata la pagina?


in tempo reale è preferibile, ma non necessariamente; va bene anche ogni tot 
minuti o ogni tot ora (stesso discorso anche per il network, il real time 
anche qui è preferibile ma non necessario)
Quindi, chiarito il problema, come posso risolverlo?
Grazie mille ancora, spero di riuscire a venire a una soluzione a tal 
problema.
Cooper.
-- 
www.blueware.it
www.italchat.it

 Quindi, chiarito il problema, come posso risolverlo?
1- usi 
http://pear.php.net/package/Net_SmartIRC/
2- usi un client irc da linea di comando
3- usi i socket: ti connetti al network, invii il comando /list e gli
altri comandi secondo relativa RFC
Ciao.
T.

 problema.
dipende da quanto vuoi programmare.
se ti basta avere i dati ad un intervallo di tempo regolare puoi fare
collegare un client a quell'intervallo di tempo, prendere i dati e
metterli su db per poi interrogarli da li' quando visualizzi la pagina
web. qui pero' dovrai fare tutto da zero.
invece se vuoi giusto codare le due funzioni di cui parlavi tu usare
phpmib (o qualche altro bot) e' la soluzione indicata, visto che la
parte di carrier e connessione etc e' gia' tutta fatta. tu pero' non
vuoi usare un bot... (perche' poi?)


forse questa è la strada migliore, ma il comando list per il motivo di cui 
sopra non posso usarlo.
Cooper.
-- 
www.blueware.it
www.italchat.it
 


A me basterebbe semplicemente:
a) interrogare il network irc X e ottenere un intero Z che denoti il numero 
di utenti totali connessi in quel dato momento su X;
b) interrogare il network irc X e quindi il canale irc Y e ottenere un 
intero Z che denoti il numero di utenti totali connessi in quel momento nel 
canale Y del network X.
Nulla di più.
Mi è sembrato di capire che la strada migliore sia l'uso dei socket per 
compiere queste due operazioni: (a) e (b), ma non ho capito come devo fare, 
non ho confidenza con i socket.
Non c'è qualche classe già predisposta che prevede queste due funzioni qui?


 ma il comando list per il motivo di cui sopra non posso usarlo.
tieni presente anche che non su tutti i server è abilitato, tieni
presente il grande quantitativo di dati che può inviarti in risposta,
tieni presente che se uno dei chan che ti serve è +i non esce nella
lista, eccetera.
quindi escludi l'uso di /list. :))
Ciao.
T.


No, intendo tipo i motori di ricerca, risultati restituiti da un motore di 
ricerca. Insomma sto cercando di realizzare un banale motore di ricerca di 
canali irc.
Ora, ci sarà un database che conterrà i canali irc indicizzati, questi 
canali irc possono appartenere a più network; in altre parole possono 
esserci canali con lo stesso nome, ma appartenenti a network diversi e via 
dicendo.
Il mio obiettivo è ordinare detti canali in base al numero di utenti (ordine 
crescente, decrescente etc) indipendentemente dal network di appartenenza e 
mostrare quindi sulla pagina web (ovvero mediante il motore di ricerca che 
intendo costruire) il risultato, ovvero l'elenco dei canali irc indicizzati, 
in quel dato ordine.
Il discorso di sopra è analogo per i network irc.
Cooper.
-- 
www.blueware.it
www.italchat.it
 

 Non c'è qualche classe già predisposta che prevede queste due funzioni qui?
I socket già li hanno usati altri e ti hanno dato una classe semplice da
usare: SmartIRC.
Ciao.
T.


Proverò con questa allora vediamo un po' cosa riesco a tirar fuori.
Grazie mille.
Cooper.
-- 
www.blueware.it
www.italchat.it
 

 canali irc possono appartenere a più network
A 'sto punto ti conviene connetterti a 
searchirc.com
 eseguire una query
col nome del chan da cercare e parsare il risultato. No?
Poi se proprio vuoi fare il lavoro sporco, usa SmartIRC.
Ciao.
T.

 presenti sul canale.
Il +i su un chan è l'invite-only flag. Un po' più complicato gestire il
tutto da PHP, non certo impossibile, ma è necessario qualcuno che inviti
lo script. :-)
Ciao.
T.


In che senso? non ti seguo :( Perchč sporco? se volessi fare il tutto in 
modo indipendente?


 In che senso? non ti seguo :( Perchè sporco?
Perché devi gestire la lista dei server e dei chan, le connessioni ai
server, devi sbirciare nel source di SmartIRC ed adattarlo alle tue
esigenze, eccetera. Mentre, appoggiandoti a 
searchirc.com
, sia tu, sia
chi cerca, ottiene in pochi istanti quello che vuole e soprattutto il db
dei chan è molto più grande.
Comunque se decidi di farlo tu, tanto di guadagnato. :-)
Ciao.
T.

 Se lo ritrovo lo posto.
Purtroppo l'ho "zappato" via :-(
Heber D'Alberto

"Tristan" <tri...@natsirt.mirror> ha scritto nel messaggio 
news:j102c2l81r417f4ev...@4ax.com...
[Cut]
Ho scaricato SMARTIRC come suggerito, ho trovato la soluzione a una dei due 
problemi, ovvero a quello dei canali, infatti leggo:
example2.php
 This example shows how to display the amount of users in a specific
 IRC channel on your homepage.Rimane il problema adesso di rilevare il 
numero di utenti connessi in un dato network, qualche soluzione? qualche 
altra classe da consigliare?Grazie in anticipo.Cooper.
-- 
www.blueware.it
www.italchat.it
 


Ciao tristan,
scusami di nuovo, mi ritrovo al punto di partenza, smartirc con l'esempio 
che ti citavo io nel post precedente non risolve ugualmente il problema, nel 
senso che da una serie di warning ed errori strani,alcuni di questi si 
riferiscono al fatto che il network irc non č conforme alla rfc 2812, e una 
serie di warning del tipo:
Warning: array_key_exists() [function.array-key-exists]: The second argument 
should be either an array or an object in C:\Documents and 
Settings\xxxxxx\Documenti\web\SmartIRC.php on line 1942
Alla fine poi non restituiisce alcun risultato, ovvero sembra connettersi al 
server, ma..... non fornisce l'informazione richiesta :(
Che consigli?


 il network irc non è conforme alla rfc 2812
Purtroppo, se non è conforme alla RFC (ne sei certo?), o lasci perdere
quel network, o chiedi loro di adeguarsi allo standard, oppure dovrai
agire a mano sul codice per adeguarti tu a loro. :-/
Ad ogni modo, io ho provato con diversi server e questo codice funziona:
include_once('Net/SmartIRC.php');
$irc = &new Net_SmartIRC();
$irc->connect('
irc.azzurranet.org
', 6667);
$irc->login('MyNick', 'MyName', 0, 'MyUserName');
$chan = '#MyTestChannel';
$irc->getList($chan);
$resultar = $irc->objListenFor(SMARTIRC_TYPE_LIST);
$irc->disconnect();
$users = $resultar[0]->rawmessageex[4];
echo "Ci sono $users utenti su $chan";
In questo modo, però, il $chan *deve* essere presente tra i chan che
vengono elencati con /list. E, ovviamente, devi gestire tutti gli
eventuali errori (ad es. se il $chan non esiste, cioè se è chiuso,
$users non sarà un numero, ma "of" di "End of /LIST").
Per quanto riguarda quell'altra informazione, be', ti basta inviare il
comando /lusers al server e parsare il risultato: vedi se tra i metodi
ce n'è uno che ti faccia inviare al server un comando raw, altrimenti
dovrai estendere la classe e creartelo.
Ciao.
Tristan


Per quanto concerne il mirc, il comando da mettere in remote è questo qui:
raw 266:*:{ echo -a $gettok($1-,5,32) }
il quale restituisce facendo /users il numero di utenti totali connessi in 
quel momento sul network.
Come dovrei tradurre questo comando nella classe NET_SMARTIRC ?
Grazie mille,
Cooper.
-- 
www.blueware.it
www.italchat.it
 

 > raw, altrimenti dovrai estendere la classe e creartelo.
Se avessi scritto io la classe, certamente avrei fornito un tale metodo.
E, ad ogni modo, ci sarebbe stata una funzione adatta per l'invio di
comandi raw. Se non vuoi spulciare tra i sorgenti, prova ad andare sul
sito ufficiale del progetto e leggi/chiedi nel relativo forum.
Ciao.
Tristan

"Tristan" <tri...@natsirt.mirror> ha scritto nel messaggio 
news:5da9c2lg7dks6785u...@4ax.com...

Mi è sembrato di capire leggendo la guida che la funzione ci sia già, ma non 
so come applicarla :( proverò a seguire cmq il tuo consiglio.


 so come applicarla :(
Ho guardato un po' i sorgenti...
Puoi usare la funzione _send() definita in SmartIRC.php oppure puoi
modificare la funzione message() definita in SmartIRC/irccommands.php,
aggiungendo un message type a tua scelta nello switch, in modo che
_send()i il comando /lusers per poi parsare il risultato ottenuto, così
come già fatto per il numero di utenti.
Inoltre, potresti cercare di eliminare quante più righe possibile di
codice superfluo, dato che a te serve solo inviare due comandi. Anche se
comunque penso che la maggior parte del tempo necessario allo script
derivi dallo stabilire la connessione ai server.
Ciao.
Tristan