Что я имею ввиду под пузомеркой?
Собственно, пузомерка — баннер, картинка на Вашем сайте, на которой находится информация о Google PR, Яндекс тИЦ и т.д.
Далее, что я имею ввиду «собственная«?
Все, кто знает, что такое пузомерки, и для чего они нужны устанавливают их себе используя различные SEO — сервисы. Это нормально, конечно, ничего в этом плохого нет, но, фактически — это раскрутка того самого сервиса посредством вашего сайта. Пузомерка, как правило, устанавливается на все страницы и получается, что с вашего сайта выходят лишние не нужные внешние ссылки.
Да, может кому-то это и по-фингалу, но меня жаба давит
Как получить возможность не ссылаться на сервис?
Идея несложная:
- Рисуем себе дизайн пузомерки.
- Получаем информацию о Вашем сайте через некий сервис (О том как это сделать написано ниже).
- Программно пририсовываем к дизайну Ваши показатели.
Таким образом весь процесс отрисовки и получения информации происходит на вашем сервере и при вставке пузомерки в страницу Вам не нужно никуда ссылаться. Максимум на самого себя.
Как реализовать?
Для реализации требуется сервер с поддержкой PHP с библиотекой GD и cURL.
Итак, пункт первый.
Для себя я нарисовал в Фотошопе такую картинку: ![]()
Ничего сложного и вроде бы всё понятно. CY — напротив будет показан тИЦ. PR — page rank. Еще я решил добавить дату и время последнего обновления моих показателей. (Это так… по желанию).
Картинка готова. Я назвал её puzo.png. Далее буду всё описывать так как я делал у себя.
Пункт второй.
Создаём PHP файл с названием puzo.php. Далее опишу каждый нюанс в коде дабы разобрался каждый. Повторюсь, что сложного ничего нету.
Первым, что нужно сделать — это определить переменную, в которой будет храниться адрес Вашего сайта. Я пишу свой, а Вы напишете свой.
$site_url = 'http://fun-creative.org.ua'; |
Теперь нужно порассуждать: Пускай у Вашего сайта посещаемость 1000 хостов в сутки и они за эти сутки клацают по ссылкам сайта 5000 раз. Получается, что Вашему серверу придётся 5000 раз запросить показатели сайта у стороннего сервиса. Это не есть хорошо, то есть очень плохо!
Поэтому я решил сделать так, чтобы показатели обновлялись на картинке только тогда, когда я захочу или этого захочет посетитель, а не при каждом обновлении страницы. Текущие данные будут размещены на картинке с именем puzo_ready.png, которая будет храниться рядом, и будет показываться пока не будет запрошено обновление данных на картинке.
Так вот… Теперь нам требуется описать какое-то действие, которое будет выполнено при запросе на обновление данных на картинке. Этим действием я решил сделать простое удаление картинки puzo_ready.png
if ( isset( $_GET['a'] ) && $_GET['a'] == 'update' && file_exists( './puzo_ready.png' ) ) { unlink( './puzo_ready.png' ); } |
Удалив нашу статическую картинку мы тем самым лишили возможности нашу пузомерку показывать саму себя. Воспользуемся этим для того, чтобы отследить нужно ли нам создавать новую с новыми данными.
Проверяем есть ли картинка puzo_ready.png и если есть, то просто её показываем.
if ( file_exists( './puzo_ready.png' ) ) { header('Content-type: image/png'); $im = imagecreatefrompng( './puzo_ready.png' ); imagepng($im); imagedestroy($im); } |
Если обнаруживаем, что её нету (т.е. скрипт только что установлен или, что скорее всего, было запрошено обновление данных), то создаём новую на основе дизайна из файла puzo.png
else { $im = imagecreatefrompng('./puzo.png'); |
Теперь, когда объект с будущей картинкой у нас есть, нужно получить новую информацию о PR и тИЦ Вашего сайта. Для этих целей я использовал сервисы:
- http://www.e-pagerank.us — для определения PR
- http://bar-navig.yandex.ru — для получения тИЦ
Для того, чтобы воспользоваться этими сервисами с помощью PHP, потребуется обратиться к ним посредством cURL. Кому непонятно что это такое и с чем его едят могут перейти по ссылке и почитать.
Итак, получаем данные.
$request_url_pr = 'http://www.e-pagerank.us/getResults.php?url='.$site_url; $PR = curl_init(); curl_setopt($PR, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($PR, CURLOPT_RETURNTRANSFER, 1); curl_setopt($PR, CURLOPT_URL, $request_url_pr); $PR_ANSWER = curl_exec($PR); curl_close($PR); $request_url_cy = 'http://bar-navig.yandex.ru/u?ver=2&show=32&url='.$site_url; $CY = curl_init(); curl_setopt($CY, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($CY, CURLOPT_RETURNTRANSFER, 1); curl_setopt($CY, CURLOPT_URL, $request_url_cy); $CY_ANSWER = curl_exec($CY); curl_close($CY); |
Теперь у нас есть две переменные, в которых содержатся свежие данные в виже XML. $PR_ANSWER и $CY_ANSWER
Переменные то есть, но из них ещё нужно вытянуть те значения, которые нам нужны, потому что кроме них там есть ещё некоторые данные, которые точно так же можно использовать, но я ограничился основными.
Прибегнем к Регулярным Выражениям. Я посчитал этот способ самым простым. На момент написания статьи приведённые ниже регулярки работали. Если вдруг изменится что-то на сервисах, то придётся их изменять. Они простейшие, так что проблем не будет.
Вытягиваем нужные значения.
$rule = '~([0-9]+)~is'; if(preg_match($rule, $PR_ANSWER, $pr)) { $pr_value = $pr[1]; } else { $pr_value = 0; } $is_find = preg_match('/value="(.+?)"/', $CY_ANSWER, $tic); if ($is_find < 1) { $cy_value = 0; } else { $cy_value=$tic[1]; } |
Мы получили две окончательные переменные с актуальными значениями CY и PR. $cy_value и $pr_value
Теперь я решил определить время последнего обновления данных. Разница во времени у региона сайта и сервера для моего случая равна 1 час или 3600 секунд, значит строка с текущим временем у меня получалась с помощью такой строки кода.
Теперь когда у нас есть все необходимое нужно лишь разместить данные на подготовленном шаблончике. Придётся методом тыка определить координаты расположения цифр и сохранить результат как картинку с именем puzo_ready.png
И это будут завершающие строки кода.
$white = imagecolorallocate($im, 255, 255, 255); $black = imagecolorallocate($im, 0, 0, 0); imagestring($im, 2, 76, 3, $pr_value, $black); imagestring($im, 2, 75, 2, $pr_value, $white); imagestring($im, 2, 24, 3, $cy_value, $black); imagestring($im, 2, 23, 2, $cy_value, $white); imagestring($im, 1, 3, 20, $time, $black); imagestring($im, 1, 2, 19, $time, $white); imagepng($im, 'puzo_ready.png'); header('Location: '.$site_url); } |
Вот наш основной скрипт готов. Осталось залить его не сервер. Создаём папку в корне сайта с названием puzo, даём ей права на запись (Я дал сразу 777) и кидаем в неё файл puzo.php и puzo.png
Вот и всё. Для отображения пузомерки на сайте достаточно добавить такой код в HTML.
<a href="http://fun-creative.org.ua/puzo/puzo.php?a=update"> <img src="http://fun-creative.org.ua/puzo/puzo.php" alt="" /> </a> |
Теперь при клике на пузомерку информация на ней обновится.
Помните, что всегда можете задать вопрос прямо здесь. Я обязательно отвечу. Спасибо!