Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]odwiedzin robotów google..
Forum PHP.pl > Forum > Przedszkole
glass
chodzi o skrypt do zliczania odwiedzin robotów google, msn, yahoo itp.
jakoś mi nie działa, czy ktoś może powiedzieć dlaczego.. polecenia które są uwzględnione niestety do mnie nie docierają, oto kod z góry dziękuję i pozdrawiam :

  1. <?php
  2.  
  3. $flExists = FALSE;
  4.  
  5. $RobotDB = "robot.db";
  6. $RobotArray = array("googlebot", "msnbot", "yahoo");
  7.  
  8. $CurrentPage = md5($_SERVER['REQUEST_URI']);
  9. $CurrentBot  = strtolower($_SERVER['HTTP_USER_AGENT']);
  10.  
  11. if (preg_match(sprintf("/%s/", join("|", $RobotArray)), $CurrentBot))
  12. {
  13.     foreach ($RobotArray as $key => $value)
  14.     { if (preg_match(sprintf("/%s/", $value), $CurrentBot)) { break; } }
  15.    
  16.     if (file_exists($RobotDB) && (is_readable($RobotDB) && is_writable($RobotDB)))
  17.     {
  18.         $DBHandle = fopen($RobotDB, "r+");
  19.         if (is_resource($DBHandle) && flock($DBHandle, LOCK_EX))
  20.         {
  21.             $Line = fgets($DBHandle, 61);
  22.             while (!feof($DBHandle))
  23.             {
  24.                 $PageInfo = unpack("A32Page/Vgooglebot/Vmsnbot/Vyahoo", base64_decode($Line));
  25.                 if (preg_match(sprintf("/%s/", $CurrentPage), $PageInfo['Page']))
  26.                 {
  27.                     $flExists = TRUE;
  28.                     $CurrentPos = ftell($DBHandle);
  29.                     fseek($DBHandle, 0, SEEK_END);
  30.                 }
  31.                 $Line = fgets($DBHandle, 61);
  32.             }
  33.                      
  34.             if (!$flExists)
  35.             {
  36.                 fseek($DBHandle, 0, SEEK_END);
  37.                 $PageInfo = array_merge($CurrentPage, array('googlebot' => 0, 'msnbot' => 0, 'yahoo' => 0));
  38.             }
  39.             else { fseek($DBHandle, ($CurrentPos - 60), SEEK_SET); }
  40.            
  41.             $PageInfo[ $RobotArray[$key] ] = $PageInfo[ $RobotArray[$key] ] + 1;
  42.             // print_r($PageInfo);
  43.            
  44.            fwrite($DBHandle, base64_encode(pack("A*VVV", $CurrentPage, $PageInfo['googlebot'], $PageInfo['msnbot'], $PageInfo['yahoo'])));
  45.             flock($DBHandle, LOCK_UN);
  46.         }
  47.         fclose($DBHandle);
  48.     }
  49. }
  50. else
  51. {
  52.     if (file_exists($RobotDB) && is_readable($RobotDB))
  53.     {
  54.         $DBHandle = fopen($RobotDB, "r");
  55.         if (is_resource($DBHandle))
  56.         {
  57.             $Line = fgets($DBHandle, 61);
  58.             while (!feof($DBHandle))
  59.             {
  60.                 $PageInfo = unpack("A32Page/Vgooglebot/Vmsnbot/Vyahoo", base64_decode($Line));
  61.                 if (preg_match(sprintf("/%s/", $CurrentPage), $PageInfo['Page']))
  62.                 {
  63.                     $flExists = TRUE;
  64.                     $CurrentPos = ftell($DBHandle);
  65.                     fseek($DBHandle, 0, SEEK_END);
  66.                 }
  67.                 $Line = fgets($DBHandle, 61);
  68.             }
  69.         }
  70.         fclose($DBHandle);
  71.     }
  72.     if (!$flExists) { $PageInfo = array('googlebot' => 0, 'msnbot' => 0, 'yahoo' => 0); }
  73. }
  74. ?>


powyżej źródło pliku robots_counter.php, niżej wywołanie:

  1. <?php
  2. include("robots_counter.php");
  3. ?>
  4.  
  5. <?php echo $PageInfo['netsprint']; ?>
  6. <?php echo $PageInfo['onet']; ?>
  7. <?php echo $PageInfo['szukacz']; ?>
Rafal Filipek
jakieś błędy albo dodatkowe info co się dzieje ?
pinochet
Ponieważ gdzieniegdzie używam i mam gotowe to:
  1. <?php
  2.  
  3. require('db_connect.php');
  4. // skrypt badania aktywności botów
  5. /**
  6. CREATE TABLE aktywnosc_botow(
  7.     id integer NOT NULL PRIMARY KEY AUTO_INCREMENT,
  8.     czas timestamp NOT NULL DEFAULT now(),
  9.     strona varchar(250) NOT NULL,
  10.     podstrona_id integer,
  11.     podstrona varchar(250) NOT NULL,
  12.     nazwa_bota varchar(100) NOT NULL,
  13.     pelny_UA text NOT NULL
  14. );
  15.  
  16. */
  17.  
  18. $sprawdzane_boty = array(
  19.    'Google-Sitemaps',
  20.    'Mediapartners-Google',
  21.    'Googlebot-Image',
  22.    'Googlebot-Mobile',
  23.    'Googlebot',
  24.    'msnbot',
  25.    'Gigabot',
  26.    'panscient.com',
  27.    'Yandex',
  28.    'msnbot-media',
  29.    'msnbot',
  30.    'DoCoMo',
  31.    'Szukacz',
  32.    'NetSprint',
  33.    'Yahoo-MMCrawler',
  34.    'NextGenSearchBot',
  35.    'findlinks',
  36.    'NutchCVS',
  37.    'ichiro',
  38.    'psbot',
  39.    'TurnitinBot',
  40.    'SurveyBot',
  41.    'bot',
  42.    'crawler');
  43.    $sql = '';
  44.    //$er = error_reporting(E_ALL);
  45. foreach($sprawdzane_boty as $bot){
  46.    $pos = stripos($_SERVER['HTTP_USER_AGENT'], $bot);
  47.    if($pos !== FALSE){
  48.    
  49.        if( isset($_GET['r']) && preg_match('/([0-9]+)_.*/', $_GET['r'], $w) ){
  50.            $id = $w[1];
  51.        }else{
  52.            $id = NULL;
  53.        }
  54.        $sql = 'SELECT `id` FROM `aktywnosc_botow_ua` WHERE `nazwa` = ''.mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']).''';
  55.        $res = mysql_query($sql);
  56.        if(mysql_num_rows($res) == 0){
  57.            $sql = 'INSERT INTO `aktywnosc_botow_ua` (`nazwa`)
  58.                VALUES ( ''.mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']).'')';
  59.            
  60.            mysql_query($sql);
  61.            $idua = mysql_insert_id();
  62.        }else{
  63.            $row = mysql_fetch_row($res);
  64.            $idua = $row[0];
  65.        }
  66.        
  67.        $sql = 'INSERT INTO `aktywnosc_botow`
  68.                VALUES (    NULL,
  69.                            CURRENT_TIMESTAMP,
  70.                            ''.mysql_real_escape_string($cfg['uri']).'',
  71.                            ''.$id.'',
  72.                            ''.mysql_real_escape_string($_GET['r']).'',
  73.                            ''.mysql_real_escape_string($bot).'',
  74.                            ''.$idua.'');';
  75.        mysql_query($sql);
  76.        break;
  77.    }
  78. }
  79. //error_reporting($er);
  80.  
  81. ?>

Do domu: Zrobić tabelke z UA i ID :]
glass
ok dopowiem, poprostu nie wyświetla nawet grama, a powinno być tak jak na zdjęciu, pomijając obrazki powinny pojawiać się statystyki..



jednak skoro kolega pinochet podaje podobny działający kod, to można by skorzystać, jednak nadal sobie nie radzę, jaka to tabelka UA i ID ;] i co z plikiem require oraz czy ten skrypt zwraca wynik podobny jak na zdjęciu?
pinochet
Oczywiście że mój skrypt nie tworzy obrazka - pytałeś o zliczanie odwiedzin.
co do skryptu podanego przez ciebie w katalogu musi być plik robo.db z uprawnieniami 666
Cytat
  1. <?php
  2. $RobotArray = array("googlebot", "msnbot", "yahoo");
  3. // ... ?>
  4. <?php echo $PageInfo['netsprint']; ?>
  5. <?php echo $PageInfo['onet']; ?>
  6. <?php echo $PageInfo['szukacz']; ?>

BTW skrypt działa bardzo dobrze :]
Pilsener
Cytat
BTW skrypt działa bardzo dobrze :]
- tak, zwłaszcza, że każdy szanujący się spamer przedstawia się jako googlebot albo yahoobot etc. Jak chcesz wiarygodne statystyki, to musisz brać pod uwagę IP.
pinochet
Nie rozumiem co to wspólnego z działaniem skryptu questionmark.gif
glass
pomijając teraz działanie skryptu, niektórzy się nie skarżą, na tą chwilę mam poważniejszy problem z samym wyświetleniem wyników..

Czy to może sprawka mojego hostingu, być może dane nie chcą się pobierać z jakichś powodów, mam host na cba.pl

Jeśli chodzi o plik to ma być robot.db, chyba się nie mylę, jednak nie mogę być pewnym bo powinno chodzić a nie chodzi.
dodam, że mam tak jak napisał pinochet, z tym że plik robots_counter.php includuje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.