Name : BETA-TESTERS
Project name : ZW3B-API-BETA-TESTERS
Authorized. - 200 - Client API Name and Origin Wildcard OK
Show AWStats Statistics in PHP : Gets main AWStats variables to display web statistics in a PHP script / page - Afficher les statistiques AWStats en PHP : Récupère des variables principales AWStats pour les afficher les statistiques Web dans un script/page PHP.
J'ai écris un script PHP qui récupère quelques variables sur la page AWStats d'un site Web (les statistiques Web).
Le script est le suivant :
awstats_resume
Script avec 130 lignes
001function awstats_resume($website, $year, $month = null) { 002 003 $month = isset($month) ? $month : 'all'; 004 005 $directoryTmp = '/var/pro/web_sites/lab3w_fr/admin/tmp/'; 006 $file_year = $website.'-'.$year; 007 $file = 'awstats_'.$file_year.'.php'; 008 $secondes = '1800'; // 30min 009 /* 010 echo '<br/>COURANT : '.mktime(); 011 echo '<br/>MODIFIE : '.filemtime($directoryTmp.$file).''; 012 echo '<br/>LE CALCUL : '.((filemtime($directoryTmp.$file) + $secondes) - mktime()).''; 013 echo '<br/>A MODIF : '.(filemtime($directoryTmp.$file) + $secondes).''; 014 015 echo '<br/>'.$directoryTmp.$file; 016 */ 017 018 if( (filemtime($directoryTmp.$file) + $secondes) <= mktime()) { 019 //echo '<br/>'.'On reecrit le fichier'; 020 021 //exit; 022 023 $url ='http://www.zw3b.fr/pub/AWStats/awstats.pl?framename=mainright&month='.$month.'&year='.$year.'&output=main&config='.$website.''; 024 $contents = file_get_contents($url); 025 026 if(isset($contents) && !empty($contents)): 027 if(preg_match_all("/.{1,$s}(?=W+)/", $contents, $lines) !== false) { 028 029 $result['config']['caption'] = 'Awstats'; 030 $result['config']['value'] = $website; 031 032 $find_log = false; 033 034 $find_report = false; 035 $line_report = null; 036 037 $find_stats = false; 038 $line_stats = null; 039 040 for ($i=0; $i < count($lines[0]); $i++) { 041 042 043 if($find_report == false && preg_match("/Reported period/", $lines[0][$i], $matches)) { 044 //echo '<br/>LINE Reported period '.$i; 045 046 $find_log = true; 047 048 //$find_report = true; 049 $line_report = $i; 050 051 preg_match_all("/(.*)</td>/Ui", $lines[0][$i], $period); 052 053 $result['period']['caption'] = trim(str_replace(array('<tr bgcolor="#ECECEC">', '<td class="aws">'), ' ', $period[1][0])); 054 055 } 056 057 if($line_report !== null) { 058 059 preg_match_all("/(.*)</td>/Ui", $lines[0][($line_report+1)], $title); 060 061 $result['period']['value'] = trim($title[1][0]); 062 063 $line_report = null; 064 } 065 066 if($find_stats == false && preg_match("/Unique visitors/", $lines[0][$i], $matches)) { 067 //echo '<br/>LINE STATS '.$i; 068 069 $find_stats = true; 070 $line_stats = $i; 071 072 preg_match_all("/<td(.*)>(.*)</td>/Ui", $lines[0][$i], $caption); 073 074 $result['UV']['caption'] = trim($caption[2][1]); 075 $result['NV']['caption'] = trim($caption[2][2]); 076 $result['P']['caption'] = trim($caption[2][3]); 077 $result['H']['caption'] = trim($caption[2][4]); 078 $result['B']['caption'] = trim($caption[2][5]); 079 080 } 081 082 if($line_stats !== null) { 083 084 preg_match_all("/<td(.*)>(.*)</td>/Ui", $lines[0][($line_stats+1)], $value); 085 086 $pattern = array('<br />', '<b>', '</b>', ''', '<td>', '</td>', '<= ', 'Exact value not available in 'Year' view'); 087 $replace = array(' ', '', '', ''', '', '', '', ''); 088 089 $value[0][1] = trim(str_replace($pattern, $replace, $value[0][1])); 090 $result['UV']['value'] = explode(' ', $value[0][1]); 091 092 $value[0][2] = trim(str_replace($pattern, $replace, $value[0][2])); 093 $result['NV']['value'] = explode(' ', $value[0][2]); 094 095 $value[0][3] = trim(str_replace($pattern, $replace, $value[0][3])); 096 $result['P']['value'] = explode(' ', $value[0][3]); 097 098 $value[0][4] = trim(str_replace($pattern, $replace, $value[0][4])); 099 $result['H']['value'] = explode(' ', $value[0][4]); 100 101 $value[0][5] = trim(str_replace($pattern, $replace, $value[0][5])); 102 $result['B']['value'] = explode(' ', $value[0][5]); 103 104 $line_stats = null; 105 } 106 107 108 //echo "[$i] {$lines[0][$i]}n"; 109 } 110 111 112 113 if($find_log == true && isset($result) && is_array($result) && $year == date('Y') ) 114 awstats_resume_write($result, $year); 115 116 } 117 118 endif; 119 120 return isset($result) ? $result : null; 121 122 123 } 124 125 126} 127 128# Exemple pour voir le résultat 129//$awstats = awstats_resume('www.zw3b.fr', '2021', $month = null); 130
Cette function awstats_resume
récupère des variables sur la page concernant tout les mois de l'année 2021 du site Webwww.zw3b.frwww. .
L'URL est : AWSTtats/awstats.pl?framename=mainright&month=all&year=2021&output=main&config=www.zw3b.fr
Je récupère les variables : Unique visitors, Number of visits, Pages Views, Hits et Bandwidth.
En ligne , grâce à la fonction
awstats_resume_write
je stock les variables dans un fichier pour pouvoir les récupérer facilement (et surtout ne pas le faire si l'année est passée (n'est pas l'année courante).
awstats_resume_write
Script avec 69 lignes
001function awstats_resume_write($result, $year = null) { 002 003 $year = isset($year) && !empty($year) ?$year : date('Y'); 004 005 $directoryTmp = '/var/pro/web_sites/lab3w_fr/admin/tmp/'; 006 007 $website = $result['config']['value']; 008 009 $file_year = $result['config']['value'].'-'.$year; 010 011 //echo '<br/>Le fichier <code class="code">'.$directoryTmp.'awstats_'.$file_year.'.php</code>'; 012 //if(!file_exists($directoryTmp.'awstats_'.$file_year.'.php')) 013 { 014 015 $write = '<?php'."n"; 016 017 $write.= '/********************************************************************'."n"; 018 $write.= ' *'."n"; 019 $write.= ' * WebSite : '.$website.''."n"; 020 $write.= ' * Description : Resume des Statistiques Annuelle (AWStats)'."n"; 021 $write.= ' * File : awstats_'.$file_year.'.php'."n"; 022 $write.= ' * Date : '.date('Y/m/d H:i:s')."n"; 023 $write.= ' *'."n"; 024 $write.= ' ************************************/'."nn"; 025 026 $write.= '// STATS -----------------------------------------------------------'."n"; 027 $write.= '$result[''.$website.''][''.$year.'']['config']['caption'] = ''.$result['config']['caption'].'';'."n"; 028 $write.= '$result[''.$website.''][''.$year.'']['config']['value'] = ''.$result['config']['value'].'';'."n"; 029 030 $write.= '$result[''.$website.''][''.$year.'']['period']['caption'] = ''.$result['period']['caption'].'';'."n"; 031 $write.= '$result[''.$website.''][''.$year.'']['period']['value'] = ''.$result['period']['value'].'';'."n"; 032 033 $write.= '$result[''.$website.''][''.$year.'']['UV']['caption'] = ''.$result['UV']['caption'].'';'."n"; 034 $write.= '$result[''.$website.''][''.$year.'']['UV']['value'] = '.var_export($result['UV']['value'],1).';'."n"; 035 $write.= '$result[''.$website.''][''.$year.'']['NV']['caption'] = ''.$result['NV']['caption'].'';'."n"; 036 $write.= '$result[''.$website.''][''.$year.'']['NV']['value'] = '.var_export($result['NV']['value'],1).';'."n"; 037 $write.= '$result[''.$website.''][''.$year.'']['P']['caption'] = ''.$result['P']['caption'].'';'."n"; 038 $write.= '$result[''.$website.''][''.$year.'']['P']['value'] = '.var_export($result['P']['value'],1).';'."n"; 039 $write.= '$result[''.$website.''][''.$year.'']['H']['caption'] = ''.$result['H']['caption'].'';'."n"; 040 $write.= '$result[''.$website.''][''.$year.'']['H']['value'] = '.var_export($result['H']['value'],1).';'."n"; 041 $write.= '$result[''.$website.''][''.$year.'']['B']['caption'] = ''.$result['B']['caption'].'';'."n"; 042 $write.= '$result[''.$website.''][''.$year.'']['B']['value'] = '.var_export($result['B']['value'],1).';'."n"; 043 044 $write.= '//------------------------------------------------------------------'."nn"; 045 046 $write.= "n".'?>'; 047 048 if( file_exists($directoryTmp.'awstats_'.$file_year.'.php') ) { 049 //echo ' existe '; 050 $fp = @fopen($directoryTmp.'awstats_'.$file_year.'.php', "w+"); 051 } else { 052 //echo ' n'existe pas '; 053 //echo ' ---> on le cree (true)'; 054 $fp = @fopen($directoryTmp.'awstats_'.$file_year.'.php', "x+"); 055 } 056 057 //echo ' ---> on ecrit'; 058 //echo fputs($fp, $write) ? ' (true)<br/>' : ' (false)<br/>'; 059 060 @fputs($fp, $write); 061 062 @fclose($fp); 063 064 @chmod($directoryTmp.'awstats_'.$file_year.'.php', octdec("664")); //exit; 065 @chgrp($directoryTmp.'awstats_'.$file_year.'.php', "1000"); //exit; 066 067 } 068 069}
La fonction awstats_resume_write
écrit tout simplement un fichier dans un répertoire définit, ici /var/pro/web_sites/lab3w_fr/admin/tmp/
.
Script avec 34 lignes
001function awstats_resume_read_file($website) { 002 003 $directoryTmp = '/var/pro/web_sites/lab3w_fr/admin/tmp/'; 004 $dirhandle = opendir($directoryTmp); 005 006 while(($file = @readdir($dirhandle)) !== false) 007 { 008 if (($file != '.') && ($file != '..') && (substr("$file", 0, 1) != '.')) 009 { 010 $currentfile = $directoryTmp.''.$file; 011 $currentfilefake = '/'.$file; 012 013 014 if (filetype($currentfile) != 'dir' && preg_match("/awstats_".$website."/Ui", $currentfile, $match)) 015 { 016 include ''.$currentfile; 017 018 //echo $currentfile.'<br/>'; 019 } 020 021 } 022 023 } 024 025 asort($result[$website], SORT_REGULAR); 026 krsort($result[$website]); 027 028 return isset($result) ? $result : null; 029 030} 031 032# Affichage des stats pour toutes les années d'un site, d'une configuration 033//$awstats = awstats_resume_read_file('www.zw3b.fr'); 034//echo '<code class="code">'.print_r($awstats,1).'</code>';
La fonction awstats_resume_read_file
, retourne un tableau PHP (array) avec les variables classées par années.
J'ai fais une page AWStats ici , qui peut vous donnez un exemple de ce que cela peut représenter au final :)
Note de Moi-même du 20220214 : Je vous envoie mon script PHP Source - c'est plus simple - et tout fait :) (script à l'arache)..
$website
et $directoryTmp
à changer me s'emble t'il :)
Le plus important est de fermer vos pages AWStats.pl ou plutôt de limiter à votre IP personnelle.
Il ne faut surtout pas afficher les statistiques au public dont l'adresse IP des internautes - pour les lois du RGPD Règlement général sur la protection des données Européenne.
Sur WebRankInfo un sujet flipant : En prison pour avoir utilisé Google Analytics !!!
Pour essayer d'apporter des solutions aux internautes qui fréquentent WebRankInfo , Olivier Duffez a publié ce matin une liste d'outils de web analytics compatibles RGPD, sans cookies ou sans consentement nécessaire . Autres que Google Analytics, vous l'aurez compris, Olivier Duffez nous signale ;)
Note de Moi-même du 20220212 - TODO :
Il faudrait faire un script qui récupère les variables directement dans les fichiers type /var/lib/awstats/awstats022022.www.domain.tld.txt
Cordialement,
Romain
Liens Web :