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

Читать далее »

Теги:

Jun 05

Автор twitter-tools функционалом своего плагина тискал свои ссылки в каждый мой кроспост из блога. Я конечно понимаю что он потратил время на написание плагина, но он на своей странице держит кнопочку поддержите проект денюжкой и еще такие непотребства со ссылками.

Читать далее »

Теги: , , ,

Feb 05

Предыдущий пост был про Google PR, настало время разобраться с функцией для получения Яндекс тИЦ. Тут все очень просто, панель от яндекса показывает тиц страницы. Где то же она берет циферку. Отлавливаем запрос, который шлет панель яндекса.

http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://www.e64f.ru

В ответ прилетает xml

<urlinfo>
<url domain=”www.e64f.ru”>/</url>
<tcy rang=”2″ value=”10″/>
<topics>
</topics>
<textinfo>
</textinfo>
</urlinfo>

Функции достаточно посылать запрос подставляя в него нужный урл, ответный xml код разбирать и возвращать значение value тега tcy. Когда программировал, хотел разобрать xml какой нибудь библиотекой, но у меня в денвере таких не оказалось. Так что, извините что сделал вытаскивание тИЦа строковыми функциями, зато работать это будет везде.

Файл yandex_cy.php

<?php
function get_yandex_cy($url)
{
	$xml = file_get_contents('http://bar-navig.yandex.ru/u?ver=2&show=32&url='.$url);
 
	$pos = strpos($xml, 'value="');
 
	$value = substr($xml, $pos+strlen('value="'), 10); 
	$value = substr($value, 0, strpos($value, '"'));
 
	return $value;	
}?>

Файл test.php

1
2
3
4
<?php
include_once("yandex_cy.php");
echo get_yandex_cy("http://www.e64f.ru");
?>

Теги:

Feb 05

В сети интернет достаточно много ресурсов? которые предоставляют возможность получить значение PR. Есть даже дополнения к браузеру FireFox? которые позволяют видеть PR, например для открытого сайта или для найденных ссылок на странице поиска гугль. Все это хорошо, но иногда нужно получать пэйдж ранк программно в своих скриптах.

Официального сервиса по получению PR как бы нет. Но умельцы сами пишут библиотеки для получения PR используя запрос аналогичный тому, который посылает панель Гугла для браузера. У меня давно была такая библиотека, и … сейчас она не работает. ))

Сейчас гугл немного защитили процесс получения ПР, добавили checksum $url = “http://www.google.com/search?client=navclient-auto&ch=6$checksum&features=Rank&q=$url”;
вот такой запрос вернет ПР.

Немного погуглив нашел много не работающих библиотек по получению google pr, также нашел одну работающую.

Файл google_pr.php

<?php
function get_pagerank($url) {
    $data = new pagerank($url);
    return($data->getPageRank());
}
 
    class pagerank {
 
        var $url;
 
        function pagerank ($url) {
            set_time_limit(0);
            $this->url = parse_url('http://' . ereg_replace('^http://', '', $url));
            $this->url['full'] = 'http://' . ereg_replace('^http://', '', $url);
        }
 
        function getPage ($url) {
            if (function_exists('curl_init')) {
                $ch = curl_init($url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
                curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/search?hl=en&q=google&btnG=Google+Search');
                return curl_exec($ch);
            } else {
                return file_get_contents($url);
            }
        }
 
        function getPagerank () {
            $url = 'info:' . $this->url['host'];
            $checksum = $this->checksum($this->strord($url));
            $url = "http://www.google.com/search?client=navclient-auto&ch=6$checksum&features=Rank&q=$url";
            $data = $this->getPage($url);
            preg_match('#Rank_[0-9]:[0-9]:([0-9]+){1,}#si', $data, $p);
            $value = ($p[1]) ? $p[1] : 0;
            return $value;
        }
 
        function toInt ($string) {
            return preg_replace('#[^0-9]#si', '', $string);
        }
 
        function to_int_32 (&$x) {
            $z = hexdec(80000000);
            $y = (int) $x;
            if($y ==- $z && $x <- $z){
                $y = (int) ((-1) * $x);
                $y = (-1) * $y;
            }
            $x = $y;
        }
 
        function zero_fill ($a, $b) {
            $z = hexdec(80000000);
            if ($z & $a) {
                $a = ($a >> 1);
                $a &= (~$z);
                $a |= 0x40000000;
                $a = ($a >> ($b - 1));
            } else {
                $a = ($a >> $b);
            }
            return $a;
        }
 
        function mix ($a, $b, $c) {
            $a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c, 13)));
            $b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a << 8));
            $c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b, 13)));
            $a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c, 12)));
            $b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a << 16));
            $c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b, 5)));
            $a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c, 3)));
            $b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a << 10));
            $c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b, 15)));
            return array($a,$b,$c);
        }
 
        function checksum ($url, $length = null, $init = 0xE6359A60) {
            if (is_null($length)) {
                $length = sizeof($url);
            }
            $a = $b = 0x9E3779B9;
            $c = $init;
            $k = 0;
            $len = $length;
            while($len >= 12) {
                $a += ($url[$k + 0] + ($url[$k + 1] << 8) + ($url[$k + 2] << 16) + ($url[$k +3] << 24));
                $b += ($url[$k + 4] + ($url[$k + 5] << 8) + ($url[$k + 6] << 16) + ($url[$k +7] << 24));
                $c += ($url[$k + 8] + ($url[$k + 9] << 8) + ($url[$k + 10] << 16) + ($url[$k +11] << 24));
                $mix = $this->mix($a, $b, $c);
                $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
                $k += 12;
                $len -= 12;
            }
            $c += $length;
            switch($len) {
                case 11: $c += ($url[$k + 10] << 24);
                case 10: $c += ($url[$k + 9] << 16);
                case 9 : $c += ($url[$k + 8] << 8);
                case 8 : $b += ($url[$k + 7] << 24);
                case 7 : $b += ($url[$k + 6] << 16);
                case 6 : $b += ($url[$k + 5] << 8);
                case 5 : $b += ($url[$k + 4]);
                case 4 : $a += ($url[$k + 3] << 24);
                case 3 : $a += ($url[$k + 2] << 16);
                case 2 : $a += ($url[$k + 1] << 8);
                case 1 : $a += ($url[$k + 0]);
            }
            $mix = $this->mix($a, $b, $c);
            return $mix[2];
        }
 
        function strord ($string) {
            for($i = 0; $i < strlen($string); $i++) {
                $result[$i] = ord($string{$i});
            }
            return $result;
        }
 
    }

Файл test.php

<?php
include("google_pr.php");
echo get_pagerank("e64f.ru");
?>