|
|
|
| Как можно узнать по каким ключевым словам и с каких поисковых систем пришли на тот или иной сайт? Например как на http://www.directrix.ru/ | |
|
|
|
|
|
|
|
для: Евгений Петров
(26.07.2005 в 16:30)
| | Можно установить PowerCounter
http://www.softtime.ru/info/powercounter20.php
и посмотреть соотвествующий отчет. А если интересует именно реализация, то посмотреть в файле searchquery.php | |
|
|
|
|
|
|
|
для: Loki
(26.07.2005 в 16:38)
| | Спасибо попробую! | |
|
|
|
|
|
|
|
для: Евгений Петров
(26.07.2005 в 16:40)
| | По каким словам это ты конечно загнул. Кроме поисковика никто такой информацией и не может располагать. А откуда еловек пришёл, это написано в $HTTP_REFERER | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(26.07.2005 в 21:46)
| | Просто рефферер разбирается с помощью регулярных выражений, которые запросто можно позаимствовать из системы статистики приведенной выше. | |
|
|
|
|
|
|
|
для: Евгений Петров
(26.07.2005 в 16:30)
| | А лучше ставь хотлог... он тебе все расскажет... hotlog.ru -отличный счетчик... | |
|
|
|
|
|
|
|
для: V!rus
(26.07.2005 в 21:50)
| | Мне не счетчик нужен, а сама система.
По поводу ключевых слов, не уверен, но помоему это возможно. Зайдите на сайт по ссылке в посте выше и сами убедитесь. | |
|
|
|
|
|
|
|
для: Евгений Петров
(26.07.2005 в 23:39)
| | Если интересно - посмотри : http://www.zvput.ru/toptour/statistic/stat.php - понравится - напишу как делал! | |
|
|
|
|
|
|
|
для: $OMEGA
(27.07.2005 в 00:35)
| | $OMEGA , мне интересно .. это полезная штука, причём очень. | |
|
|
|
|
|
|
|
для: $OMEGA
(27.07.2005 в 00:35)
| | Если не секрет, то буду по век жизни обязан :) | |
|
|
|
|
|
|
|
для: Евгений Петров
(27.07.2005 в 12:31)
| |
<?
$reff = urldecode($_SERVER["HTTP_REFERER"]);
$search = 'none';
// Выясняем принадлежность к поисковым системам
if(strpos($reff,"yandex")) $search = 'yandex';
if(strpos($reff,"rambler")) $search = 'rambler';
if(strpos($reff,"google")) $search = 'google';
if(strpos($reff,"aport")) $search = 'aport';
if(strpos($reff,"mail") && strpos($reff,"search")) $search = 'mail';
if(strpos($reff,"msn") && strpos($reff,"results")) $search = 'msn';
if(strpos($reff,$_SERVER["SERVER_NAME"])) $search = 'own_site';
if(!empty($reff) && $search!="none" && $search != "own_site")
{
switch($search)
{
case 'yandex':
{
eregi("text=([^&]*)", $reff."&", $query);
if(strpos($reff,"yandpage")!=null)
$quer=convert_cyr_string(urldecode($query[1]),"k","w");
else
$quer=$query[1];
break;
}
case 'rambler':
{
eregi("words=([^&]*)", $reff."&", $query);
$quer=$query[1];
break;
}
case 'mail':
{
eregi("q=([^&]*)", $reff."&", $query);
$quer=$query[1];
break;
}
case 'google':
{
eregi("q=([^&]*)", $reff."&", $query);
$tmpstr = utf8_win($query[1]);
$quer=$tmpstr;
break;
}
case 'msn':
{
eregi("q=([^&]*)", $reff."&", $query);
$tmpstr = utf8_win($query[1]);
$tmpstr;
break;
}
case 'aport':
{
eregi("r=([^&]*)", $reff."&", $query);
$quer=$query[1];
break;
}
}//конец для switch
$symbols = array("\"", "'", "(", ")", "+", ",", "-");
$quer = str_replace($symbols, " ", $quer);
$quer = trim($quer);
$quer = preg_replace('|[\s]+|',' ',$quer);
$sql="INSERT INTO searchquerys VALUES (0, '$quer', now(), INET_ATON('$ip'), $id_page, '$search')";
@mysql_query($sql);
}
?>
|
Это фрагмент из новой версии PowerCounter, который как раз этим и занимается. | |
|
|
|
|
|
|
|
для: Loki
(27.07.2005 в 12:36)
| | а что за переменная $reff? она нигде выше не описывается. | |
|
|
|
|
|
|
|
для: Евгений Петров
(27.07.2005 в 12:39)
| | А вообще каков сам принцип. Насколько я понял разбирается url с которого был заход на сайт (а т.к. запрос поисковикам передается методом GET, то все ключевые слова хранятся в url). Я правильно понял? | |
|
|
|
|
|
|
|
для: Евгений Петров
(27.07.2005 в 12:42)
| | $reff описывается в первой строчке кода:)
Да. все правильно. | |
|
|
|
|
|
|
|
для: Loki
(27.07.2005 в 12:53)
| | А теперь вижу. Мне почему то сначала ервые 11 строк не отобразились. | |
|
|
|
|
|
|
|
для: Евгений Петров
(27.07.2005 в 12:39)
| | Самая первая строчка - в ней хранится реферер
<?php
$reff = urldecode($_SERVER["HTTP_REFERER"]);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 12:55)
| | Ну все хорошо, но скрипт выведет сами строки запроса, а из этих строк как можно выделить повторяющиеся слова? | |
|
|
|
|
|
|
|
для: Евгений Петров
(27.07.2005 в 12:58)
| | Конечно, после того как ключевые слова помещаются в базу данных - повторяющиеся слова можно сгруппировать и вывести не только уникальные слова, но и число повторений для каждого из ключевого слова.
PS Loki, привёл фрагмент из PowerCounter 3, который сейчас находится в процессе разработки. | |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 13:11)
| | Спасибо! | |
|
|
|
|
|
|
|
для: Евгений Петров
(27.07.2005 в 13:15)
| | Нашел небольшой глюк. В коде название поисковика определяется при помощи функции strpos(). Но ведь yandex.com, yandexsite.ru и т.д. тоже подходят под это условие.
Как можно при помощи регулярных выражений выделить из, например:
http://www.rambler.ru/srch?words=Hello+World&btnG=%CD%E0%E9%F2%E8%21&where=1
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(27.07.2005 в 14:27)
| | 1) Хм... а что на yandexsite.ru находится и какова вероятность перехода от туда на сайт?
2) А что подразумевается под "выделить"? Если просто ответить на вопрос входит ли в URL фрагмент rambler.ru, то можно воспользоваться следующим кодом
<?php
$url = "http://www.rambler.ru/srch?words=Hello+World&btnG=%CD%E0%E9%F2%E8%21&where=1";
if(preg_match("|rambler.ru|i", $url)) echo "Это рамблер";
else echo "Это не рамблер";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 16:52)
| | Нет надо не проверить, а именно узнать название хоста | |
|
|
|
|
|
|
|
для: Евгений Петров
(27.07.2005 в 18:22)
| | Тогда можно воспользоваться скриптом
<?php
$url = "http://www.rambler.ru/srch?words=Hello+World&btnG=%CD%E0%E9%F2%E8%21&where=1";
preg_match("#^http://([^/]+)(/|$)#i", $url, $out);
echo $out[1];
?>
|
Он будет содержать www, но проверить его наличие и удалить, если не нужно, легче уже в результате. | |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 13:11)
| | >>Конечно, после того как ключевые слова помещаются в базу данных - повторяющиеся слова можно сгруппировать и вывести не только уникальные слова, но и число повторений для каждого из ключевого слова.
А как это можно сделать? | |
|
|
|
|
|
|
|
для: Евгений Петров
(27.07.2005 в 18:26)
| | В разделе downloads этот код пока недоступен, но Loki его выкладывал в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=5548. Кроме того, Loki создаёт параллельную версию PowerCounter - вы можете её у него попросить - он всегда щедро делится кодом. | |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 20:44)
| | Ув. Loki, если вам не трудно, то не могли бы вы выложить код или прислать на мыло. Буду очень благодарен. Т. к. я на данный момент пишу нечто похожее на то что пишете вы, то буду рад поделиться своими разработками. (правда пока их нет, но скоро они будут :) ).
e-mail: zhenya_petrov@mail.ru | |
|
|
|
|
|
|
|
для: cheops
(27.07.2005 в 20:44)
| | >В разделе downloads этот код пока недоступен, но Loki его выкладывал в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=5548. Кроме того, Loki создаёт параллельную версию PowerCounter - вы можете её у него попросить - он всегда щедро делится кодом.
Ув. Cheops или Loki в теме по сылке к своему несчастью я не обнаружил того чего искал. Може быть я плохо искал? Если не трудно то выложите пожалуйста этот код или напишите как можно организовать поиск повторяющихся слов.
Заранее благодарен | |
|
|
|
|
|
|
|
для: Евгений Петров
(11.08.2005 в 01:27)
| | >Ув. Cheops или Loki в теме по сылке к своему несчастью я не
>обнаружил того чего искал. Може быть я плохо искал?
По ссылке что привел cheops всего один пост с кодом:
http://www.softtime.ru/forum/files/5548-20050719223221.rar
Вас должны оттуда интересовать файлы count.php и quer.php | |
|
|
|
|
|
|
|
для: Loki
(11.08.2005 в 09:29)
| | А что значит INET_ATON('$ip')? | |
|
|
|
|
|
|
|
для: Евгений Петров
(11.08.2005 в 13:57)
| | Насколько я понял в файле count.php в БД заносятся поисковые фразы, а в файле quers.php они выводятся а как вывести отдельные слова из этих фраз? | |
|
|
|
|
|
|
|
для: Евгений Петров
(11.08.2005 в 14:05)
| | Хм... никак: поисковая фраза уникальна. Если переставить слова местами, то получим совсем другой поисковый запрос имеющий другую релевантность в поисковиках. Какой толк от этой информации?:) | |
|
|
|
|
|
|
|
для: Loki
(11.08.2005 в 14:10)
| | Например в поисковых запросах очень часто встречаются слова "раскрутка" и можно сделать список ключевых слов. Так называемые - "cлова-ядро"/ | |
|
|
|
|
|
|
|
для: Евгений Петров
(11.08.2005 в 14:14)
| | Изначально была такая мысль, но потом отказались: если заносить поисковый запрос, то его потом надо разбирать на слова и запихивать их в массивы (или в бд) для анализа. Если записывать поисковые слова, то будет вообще статистика непонятно чего, так как слова из одного щапроса никак не сгруппировать вместе... В общем, несколько раз поднимали это обсуждение и, в итоге, остановились на текущем варианте. | |
|
|
|
|
|
|
|
для: Евгений Петров
(11.08.2005 в 13:57)
| | Превращение строки ip адреса в число. | |
|
|
|
|
|
|
|
для: Loki
(27.07.2005 в 12:36)
| | К сожалению код не универсален.
Для поисковиков он хорошь, потому что на них и ориентирован.
PS: вот я прогнал то ... такое спросил ... тупая моя башка ... парсинг сделать можно ж без проблем.
кстати могу посоветовать preg_match для парсинга ... главное достоинство это то, что экономя время и усилие сразу пишем в массив все найденые совпадения. А значит вполне можно записать в массив пары, а потом их обрабатывать.
Я так нехилый движок для bbCode написал. | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(27.07.2005 в 12:51)
| | >> кстати могу посоветовать preg_match для парсинга ...
Давайте | |
|
|
|
|
|
|
|
для: Евгений Петров
(27.07.2005 в 13:01)
| | дак сказав это я вам и посоветовал :))) Дальше читаем мануал.
Пример: вот эта хренотень парсит псевдотег [color=blablabla]text[/color]
if (count($parsing) > 0){
$index = key($parsing);
$value = current($parsing);
while (list($index,$value) = each($parsing)){
$parsing[$index] = str_replace($search,$replace,$value);
$value = $parsing[$index];
preg_match_all("/\[.+=?.+\].+[^\]]\[\/.+\]/i",$value,$matches);
if (count($matches) != 0){
for ($i=0; $i<count($matches); $i++){
for ($j=0; $j<count($matches[$i]); $j++){
// parse Font COLOR tag
if (eregi("\[color=(.+)\](.+)\[/color\]",$matches[$i][$j],$regs)){
$matches[$i][$j] = ereg_replace("\[color=".$regs[1]."\]".$regs[2]."\[/color\]","<font color=".$regs[1].">".$regs[2]."</font>",$regs[0]);
$parsing[$index] = str_replace ($regs[0],$matches[$i][$j],$parsing[$index]);
}
}
}
}
}
}
|
впиши в функцию регулярку для отслеживания пар, пользуйся.
Кстати $parsing у меня это массив сканируемых переменных на наличие псевдотега.
ещё могу посоветовать предварительно разбить url эксплодом, как раз в массив, например как у меня в $parsing, по знаку &. | |
|
|
|
|
|
|
|
для: $OMEGA
(27.07.2005 в 00:35)
| | Напиши код, плз... или пришли мне на мэйл... $OMEG'е | |
|
|
|
|
|
|
|
для: V!rus
(27.07.2005 в 20:03)
| | Sorry за задержку, только пришел с работы, вот кусок хедера - он пишет статистику, в файл stat.dat
@ $url = $_SERVER['HTTP_REFERER'];
if (isset($url))
{
$test = $url;
$test = parse_url($test);
@ $sersh = $test['query'];
if (@ $sersh =='' )
$tt='';
else
{
@$ip = $REMOTE_ADDR ;
$fp_ip = fopen('statistic/ip.dat', 'r');
$last_ip = fread($fp_ip, 1024);
fclose($fp_ip);
if ($ip != $last_ip)
{
$fp_ip = fopen('statistic/ip.dat', 'w');
fwrite($fp_ip, $ip);
fclose($fp_ip);
$link = '<a href="'.$url.'" target=_blank >'.$test['host'].'</a>';
$tt=rawurldecode($test['query']);
$visit=date('H:i / d. m. Y');
$text_stat = $visit."\t".$link."\t<b>". $tt."</b><br>\n ";
$fp1 = fopen('statistic/stat.dat','a+');
flock($fp1, 2);
fwrite($fp1, $text_stat);
flock($fp1, 3);
fclose($fp1);
}
}
|
читает его файл stat.php - его вы и смотрели, вот он:
<body>
<?php
$text = file('stat.dat');
$num = count($text)-1;
@list($time, $host, $qery)=explode("\t",$text[0]);
$time=explode("/", $time);
@list($data, $host, $qery)=explode("\t",$text[$num-1]);
$data = explode("/", $data);
$x = 0;
for ($i=$num; ($i+1)>0; $i--)
{
@ list($data1, $host, $qery)=explode("\t",$text[$i]);
$data1= explode("/", $data1);
if ($data[1] == @$data1[1])$x++;
}
echo "<big>Количество заходов : $num</big> ( с $time[1] )<br>";
echo "Заходов за последний период<small>($data[1])</small> - <b>$x человек</b><hr>";
?>
<table border="1" width="100%" id="table1">
<tr>
<td width="173"><font size="4">Время / Дата</font></td>
<td width="196"><font size="4">Поисковая машина:</font></td>
<td><font size="4">Поисковый запрос:</font></td>
</tr>
<?
for ($i=$num; ($i+1)>0; $i--)
{
@ list($time, $host, $qery)=explode("\t",$text[$i]);
$vowels = array("=", "&",";", ":", "_","<",">","/",".","-");
$qery=str_replace($vowels,"",$qery);
$robot = explode(".", $host);
if(@$robot[1]=="google")
@$qery=iconv("UTF-8", "WINDOWS-1251",$qery);
$qery1 = $qery;
$qery=ereg_replace("[a-zA-Z0-9]", "", $qery);
$qery=str_replace("+", " ", $qery);
if (strcspn ($qery,"%%")<1)
{
$qery=urldecode(urldecode($qery1));
$qery=convert_cyr_string($qery,'k','w');
$qery=ereg_replace("[a-zA-Z0-9]", "", $qery);
$qery=str_replace("+", " ", $qery);
}
$text[$i]=$time."\t".$host."\t<b>".$qery."</b><br>";
//echo $text[$i];
echo '<tr><td width="173">',$time,'</td><td width="196">'.$host.'</td><td><b>'.$qery.'</b></td></tr>';
};
?>
</table>
</body>
|
правда к гуглу надо добавить и мсн, а то он тоже в ютиэф запрос кодирует и выдает крякозябры, можно конечно было все сливать в базу, но мне проще так - это кусок модуля раскрутки - оптимизации под поисковики сайта и через 700 посетителей, статистика обнуляется и высылается на два мыла - мне и им, учтите это!!! после 1000 - все начинает глючить!!! | |
|
|
|
|
|
|
|
для: $OMEGA
(28.07.2005 в 01:14)
| | А как можно определить глубину просмотра (если можно НЕ код, а принцип)? | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 14:00)
| | Я поступил так: условно считаем, что с одного IP заходит на сайт только один человек в день.
Тогда делаем цикл по количеству дней и в цикле делаем выборку количества заходов для уникальных ip. Полученные значения заносим во временную таблицу, из которой потом получаем значения и количество их повторений. | |
|
|
|
|
|
|
|
для: Loki
(29.07.2005 в 14:13)
| | Че то я не понял :), можно немного попроще? :) | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 14:17)
| | На примере одного дня:
запросом выясняем к базе данных выясняем сколько страниц было просмотрено с каждого из ip. Результат запроса помещаем во временную таблицу (у нас получается просто колонка цифр). Это количество страниц просмотренных каждым из пользователей. Теперь запросом к временной таблице, выясняем сколько раз встечается каждое из чисел. в результате получаем данные сколько именно человек просмотрели одинаковое количество страниц. | |
|
|
|
|
|
|
|
для: Loki
(29.07.2005 в 15:34)
| | Но ведь тогда это будет не совсем тот результат. Ваш скрипт покажет, сколько раз данный пользователь заходил на сайт (точнее сколько страниц он просмотрел) ЗА ОДИН ДЕНЬ, а нужно ЗА ОДИН СЕАНС. | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 16:15)
| | ну это условное допущение что в день пользователь заходит один раз. Более того, если пользователь был на сайте в районе полуночи, то он посчитается как два пользователя:) Чтобы все было по честному, то надо вводить сессии и отслеживать пользователя по ее идентификатору. Правда, в этом случае, ваша база данных разрастется до совершенно неприличных размеров:) | |
|
|
|
|
|
|
|
для: Loki
(29.07.2005 в 16:27)
| | Отож :). Я почему и спросил как это делается. Но может все таки есть каой то другой способ? В "крутых" счетчиках это ж как то реализовано. | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 17:55)
| | Там тоже оценки, а не точные параметры... ну за исключением тех, кто cookie пишет пользователям - но тут тоже оценочные данные, так как не все позволяют их писать (правда процент таких пользователей мал и постоянно уменьшается). | |
|
|
|
|
|
|
|
для: cheops
(29.07.2005 в 17:59)
| | А как кстати проверить включены cookie или нет? | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 18:05)
| | Можно поставить cookie пользователю и посмотреть появилась она в массиве $_COOKIE или нет, или вообще сделать всё, и установку и проверку при помощи JavaScript, чтобы лишний раз не перегружать страницу. Правда JavaScript тоже может быть отключен (но таких мазохистов уж вообще мало). | |
|
|
|
|
|
|
|
для: cheops
(29.07.2005 в 18:08)
| | В моем случае если JavaScript будет выключен, то счетчик вообще не запустится. :) | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 18:10)
| | Внешний, который использует JavaScript да, а внутренние счётчики, вроде PowerCounter будут работать... | |
|
|
|
|
|
|
|
для: cheops
(29.07.2005 в 18:15)
| | Ну да, ведь PowerCounter встраивается как PHP код, а если сервер PHP не поддерживает? | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 18:18)
| | Тогда только внешними счётчиками... ничего не поделаешь... | |
|
|
|
|
|
|
|
для: cheops
(29.07.2005 в 18:25)
| | Собственно этим я сейчас и занимаюсь. | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 18:27)
| | А можно ли как то запретить кеширование картинки (картинка формируется средствами PHP)? | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 18:30)
| | Давайте новую тему заведём, а то эта слишком длинная? | |
|
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 17:55)
| | Либо сессия, либо - как у меня:)
Ну может cheops еще что придумает. Но вроде уже фантазировали на эту тему... | |
|
|
|
|
|
|
|
для: Loki
(29.07.2005 в 17:59)
| | Можно впринципе, еще проверять, чтобы примерно в одно и то же время были разные заходы. Например в пределах 10-20 минут. | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.07.2005 в 18:04)
| | Я в инете обычно с работы. Сижу в свободное время, так что сайт могу смотреть в течение дня... так что тут даже сессии умирают, а вы говорите 15-20 минут:) И таких как я много... если не большинство:) | |
|
|
|