Subversion Repositories Sites.tela-botanica.org

Compare Revisions

Ignore whitespace Rev 442 → Rev 443

/trunk/client/projet/services/projet_statistiques.php
19,7 → 19,7
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: projet_statistiques.php,v 1.2 2008-03-28 08:19:07 j_grillot Exp $
// CVS : $Id:$
/**
* Application projet
*
31,7 → 31,7
//Autres auteurs :
*@author Julien Grillot <julien.grillot@gmail.com>
*@copyright Tela-Botanica 2000-2005
*@version $Revision: 1.2 $
*@version $Revision:$
// +------------------------------------------------------------------------------------------------------+
*/
 
49,13 → 49,53
define("URL_WIKINI", "http://www.tela-botanica.org/wikini/");
 
/**
* Retourne le contenu de la page $adresse de facon asynchrone
* @param string $adresse URL de la page dont le contenu doit etre recupere
* @param int timeout temps d'attente maximum avant abandon de la recuperation
*/
function monFileGetContents($adresse, $timeout = 30){
$url = parse_url($adresse);
$url['port'] = isset($url['port']) ? $url['port'] : '80';
$url['scheme'] = isset($url['scheme']) ? strtoupper($url['scheme']) : 'HTTP';
$fp = fsockopen($url['host'], $url['port'], $errno, $errstr, $timeout);
if (!$fp) {
echo "Erreur de socket: $errno - $errstr<br />\n";
return false;
} else {
$header = 'GET '.$url['path'].' '.$url['scheme']."/1.1\r\n";
$header .= "Host: www.yahoo.com\r\n";
$header .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n";
$header .= "Referer: http://www.yahoo.com/\r\n";
 
$header .= 'Connection: Close\r\n\r\n';
 
fputs($fp, $header);
stream_set_timeout($fp, $timeout);
while (!feof($fp)) {
$page .= fread($fp, 262144);
}
$stream = stream_get_meta_data($fp);
fclose($fp);
if ($stream['timed_out']) {
echo 'Le d�lai de r�ponse de la page <b>'.$adresse.'</b> a d�pass� le timeout de <b>'.$timeout.'</b> sec.';
return false;
}else{
return $page;
}
}
}
 
/**
* Procedure retrouvant le nombre de contribution, de message et le contenu de la page a partir des informations de la BDD
* @param object $ligne resultat d'un fetch row contenant l'url du document a analyser
* @param int $nombre_contrib recupere le nombre de contributions du projet
* @param int $nombre_message recupere le nombre de nouveaux messages du projet
* @param int $nombre_membre recupere le nombre de nouveaux messages du projet
* @param int $nombre_photo recupere le nombre de nouveaux messages du projet
* @return false si la fonction echoue lors de la tentative de recuperation des donnees utiles
*/
function analyser($ligne, &$nombre_contrib, &$nombre_message) {
function analyser($ligne, &$res, &$nombre_contrib, &$nombre_message, &$nombre_membre, &$nombre_photo) {
$nombre_contrib='0';
$nombre_msg='0';
$r=false;
75,24 → 115,32
$url='http://fr.groups.yahoo.com/group/'.$ligne->AGO_A_NOMGRP;
// Recherche du schema retrouvant le nombre de nouveaux message dans la semaine
$pattern='>([0-9]+)</span> nouveau';
$pattern1='>([0-9]+)</span> .ouveaux? .embres?';
$pattern2='>([0-9]+)</span> .ouveaux? .essages?';
$pattern3='>([0-9]+)</span> .ouvelles? .hotos?';
// Quelques soucis avec la version asynchrone (sockopen)
// Quelques soucis avec la version asynchrone
//$contenu=monFileGetContents($url);
$contenu=file_get_contents($url);
usleep(3000000);
$r=($contenu?true:false);
ereg($pattern, $contenu, $no);
ereg($pattern2, $contenu, $no);
$nombre_message=$no[1];
 
ereg($pattern1, $contenu, $no);
$nombre_membre=$no[1];
 
ereg($pattern3, $contenu, $no);
$nombre_photo=$no[1];
 
} else {
// Parse le flux RSS généré par wikini
// Parse le flux RSS g�n�r� par wikini
$rss =& new XML_RSS(URL_WIKINI.$ligne->p_wikini.'/wakka.php?wiki=DerniersChangementsRSS/xml');
$rss->parse();
// On va compter le nombre de modification depuis les x derniers jours (voirs constantes)
foreach ($rss->getItems() as $item) {
// Le script doit être compatiable avec plusieurs formats de date
// Le script doit �tre compatiable avec plusieurs formats de date
if ($item['pubDate']) {
if (strtotime($item['pubDate'])>time()-NB_SEC_INSERT) $nombre_contrib++;
128,7 → 176,7
'left join projet_statut_utilisateurs on p_id=psu_id_projet ' .
'left join projet_lien_liste_externe on plle_id_projet=p_id ' .
'left join agora on plle_id_liste=AGO_A_ID ' .
'group by p_id order by p_titre' ;
'group by p_id order by p_titre limit 0,15' ;
 
$resultat = $this->_db->query($requete) ;
if (DB::isError($resultat)) {
156,7 → 204,7
$nombre_contrib = 0;
$nombre_message = 0;
 
// On verifie la date de derniere mise à jour
// On verifie la date de derniere mise � jour
$requete_verif='SELECT * FROM projet_statistiques WHERE ps_ce_projet="'.$ligne->p_id.'" ORDER BY ps_date DESC LIMIT 1';
$resultat_verif = $this->_db->query($requete_verif);
if (DB::isError($resultat_verif)) {
164,12 → 212,12
}
$ligne_verif = $resultat_verif->fetchRow(DB_FETCHMODE_OBJECT);
// Si elle remonte a plus de deux heure, on sauvegarde, et a plus de 7 jours, on archive et créé une nouvelle entrée
// Si elle remonte a plus de deux heure, on sauvegarde, et a plus de 7 jours, on archive et cr�� une nouvelle entr�e
if($ligne_verif->ps_date > date("Y-m-d H:i:s", time()-NB_SEC_INSERT)) {
if($ligne_verif->ps_maj < date("Y-m-d H:i:s", time()-NB_SEC_UPDATE)) {
// Recupere nombre_contrib et nombre_message
$calculs=analyser($ligne, $nombre_contrib, $nombre_message);
$calculs=analyser($ligne, $res, $nombre_contrib, $nombre_message, $nombre_membre, $nombre_photo);
$requete_maj = 'UPDATE projet_statistiques SET ps_msg_derniere_semaine="'.$nombre_message.'", ps_doc_derniere_semaine="'.$ligne->nb_doc.'", ps_nombre_inscrit="'.$ligne->nb_utilisateur.'", ps_nombre_inscrit_liste="'.$ligne->nb_utilisateur_liste.'", ps_modifwiki_derniere_semaine="'.$nombre_contrib.'", ps_maj=NOW() WHERE ps_ce_projet="'.$ligne->p_id.'" AND ps_date="'.$ligne->ps_date.'"';
$resultat_maj = $this->_db->query($requete_maj);
231,13 → 279,7
return $res;
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log: projet_statistiques.php,v $
* Revision 1.2 2008-03-28 08:19:07 j_grillot
* retrait de la fonction monFileGetContents inutilisée & commentaires
*
* Revision 1.1 2008-03-27 09:15:36 j_grillot
* Correction du bug sur le parsing xml
*
* $Log:$
* +--Fin du code ----------------------------------------------------------------------------------------+
*/
?>