Введение в JavaScript и CGI - П.Б. Храмцов Электронный конструктор (ЭКОН-02, Знаток)
Sep 10

Лет 5 назад сделал на Perl систему статистики, очень простенькую, просто данные о посещении укладывались в одну таблицу.

CREATE TABLE IF NOT EXISTS `statistics` (
`id` int(10) unsigned NOT NULL auto_increment,
`yy` int(4) unsigned zerofill default NULL,
`mm` int(2) unsigned zerofill default NULL,
`dd` int(2) unsigned zerofill default NULL,
`in_time` varchar(8) default NULL,
`ip` varchar(15) default NULL,
`page_curr` varchar(25) default NULL,
`page_from` varchar(255) default NULL,
`browser` varchar(255) default NULL,
PRIMARY KEY  (`id`)
)

За 5 лет иногда смотрел эту статистику, т.к. достаточно быстро записей становилось много - конечно чистил таблицу.

И вот сейчас созрела необходимость вытащить все поисковые запросы из поля page_from, если пользователь пришел из гугла, то в этом поле будет ссылка по типу: http://www.google.com/search?q=%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BA%D0%B0%D0%BF%D1%82%D1%87%D0%B8&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox

Провозился пару часов и родилась функция:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function detect_search_engine($url)
{
	$search_engines=Array(
	   Array("name"=>"Mail", "pattern"=>"go.mail.ru/search_images", "param"=>"q", "charset"=>"w"),
	   Array("name"=>"Mail", "pattern"=>"go.mail.ru", "param"=>"q", "charset"=>"w"),
	   Array("name"=>"Google Images", "pattern"=>"images.google.", "param"=>"q", "charset"=>"u"),
	   Array("name"=>"Google", "pattern"=>"google.", "param"=>"q", "charset"=>"u"),
	   Array("name"=>"Google", "pattern"=>"google.", "param"=>"as_q", "charset"=>"u"),
	   Array("name"=>"Live Search", "pattern"=>"search.live.com", "param"=>"q", "charset"=>"u"),
	   Array("name"=>"Bing", "pattern"=>"bing.", "param"=>"q", "charset"=>"u"),
	   Array("name"=>"RapidShare Search Engine", "pattern"=>"rapidshare-search-engine", "param"=>"s", "charset"=>"u"),
	   Array("name"=>"Rambler", "pattern"=>"rambler.ru", "param"=>"query", "charset"=>"u"),
	   Array("name"=>"Rambler", "pattern"=>"rambler.ru", "param"=>"words", "charset"=>"u"),
	   Array("name"=>"Yahoo!", "pattern"=>"search.yahoo.com", "param"=>"p", "charset"=>"u"),
	   Array("name"=>"Nigma", "pattern"=>"nigma.ru/index.php", "param"=>"s", "charset"=>"u"),
	   Array("name"=>"Nigma", "pattern"=>"nigma.ru/index.php", "param"=>"q", "charset"=>"u"),
	   Array("name"=>"MSN", "pattern"=>"search.msn.com/results", "param"=>"q", "charset"=>"u"),
	   Array("name"=>"Ask", "pattern"=>"ask.com/web", "param"=>"q", "charset"=>"u"),
	   Array("name"=>"QIP", "pattern"=>"search.qip.ru/search", "param"=>"query", "charset"=>"u"),
	   Array("name"=>"RapidAll", "pattern"=>"rapidall.com/search.php", "param"=>"query", "charset"=>"u"),
	   Array("name"=>"Yandex", "pattern"=>"images.yandex.ru/", "param"=>"text", "charset"=>"u"),
	   Array("name"=>"Yandex", "pattern"=>"m.yandex.ru/search", "param"=>"query", "charset"=>"u"),
	   Array("name"=>"Yandex", "pattern"=>"hghltd.yandex.net", "param"=>"text", "charset"=>"u"),
	   Array("name"=>"Yandex", "pattern"=>"yandex.ru", "param"=>"text", "charset"=>"u")
	);
 
	$tmp = parse_url($url);
	$host = $tmp['host'];
	$query = $tmp['query'];
	parse_str($query, $query_arr);
 
	$res['engine'] = '-';
	$res['request'] = '-';
 
	foreach ($search_engines as $engine)
	{
		if (strpos($host,$engine['pattern']) !== false and isset($query_arr[$engine['param']]))
		{
			$res['engine'] = $engine['name'];
			$res['request'] = $query_arr[$engine['param']];
			break;
		}
	}
	return $res;
}

Функция принимает урл станички с которой перешли на ваш сайт, возвращает массив содержащий название поисковика и запрос по которому нашли ваш сайт.

Собственно самое полезное в этой функции массив $search_engines.

Теги:

3 Responses to “Получение запросов поисковых систем”

  1. Ney Says:

    В Google Analytics это всё есть и отображается в красивом виде ;)

  2. Алексей Says:

    Многих поисковых систем нет, даже к примеру search.yahoo.ru, и такого подомного много. Так что думаю правильней будет, через регулировку проверять поисковую систему

  3. Alex Says:

    А я cnstats использую, ну и что? Тут о другом речь идет ;)

Leave a Reply

CAPTCHA image