Скриншоты в анализе сайта

27.11.2010

Продолжаю дорабатывать pr-cy. Теперь и в анализе сайта отображаются скриншоты собственного производства. Сегодня первый день работы, поэтому скриншоты будут изготавливаться с задержкой, но через некоторое время все стабилизируется.
Скриншоты на pr-cy
Ну правда стало гораздо аккуратней? :)

Поддержка .РФ в панели вебмастера

25.11.2010

Ну вот как я и обещал появилась поддержка русскоязычных доменов в панели вебмастера. Правда пока не определяется число страниц в индексе яндекса (у него почему то не работает оператор site: с РФ зоной), но в остальном вроде работает. Честно говоря панель давно пора основательно переделать, чем возможно вскоре и займусь.

Система скриншотов на бирже сайтов

24.11.2010

Возможно кто то заметил что в последнее время у нас на бирже сайтов наблюдались, некоторые кхмм проблемы. Дело в том что старая система создания скриншотов (с помощью Firefox и какой то матери) перестала выдерживать нагрузку, да спроектирована была изначально с просчетами. Теперь все по другому – все сайты строятся в очередь и специально обученный демон рисует для них картинки. И у него это неплохо получается!

Класс Cacher (специально для Тормоза)

22.11.2010

В очередной раз Тормоз устроил дичайший холивар в своем блоге.

Я туда боюсь заходить – зашибут ещё ненароком. Между тем, задача как мне кажется легко решается. Вот накидал за 10 минут:

  1. <?php
  2.  
  3. class Cacher {
  4.     // Время жизни кэша в секундах
  5.     public $timeout = 10;
  6.  
  7.     // Массив с кэшем (хранится в памяти т. к. это всего лишь пример)
  8.     private $cache = array();
  9.  
  10.     public function __call($name, $args) {
  11.         return $this->realCall($name, $args);
  12.     }
  13.  
  14.     public function call($callback) {
  15.         $args = array();
  16.         if (func_num_args() > 1) {
  17.             $args = array_slice(func_get_args(), 1);
  18.         }
  19.         return $this->realCall($callback, $args);
  20.     }
  21.  
  22.     private function realCall($callback, $args = array()) {
  23.         $cacheKey = $this->getKey($callback, $args);
  24.  
  25.         // Выводим из памяти если существует кэш и он не просрочен
  26.         if ($this->hasCache($cacheKey)) {
  27.             echo "From cache with love.<br/>\r\n";
  28.             return $this->getCache($cacheKey);
  29.         }
  30.  
  31.         $data = call_user_func_array($callback, $args);
  32.         $this->setCache($cacheKey, $data);
  33.  
  34.         return $data;
  35.     }
  36.  
  37.     // Генерирует хэш ключ для кэша :)
  38.     private function getKey() {
  39.         $serialized = serialize(func_get_args());
  40.         $key = md5($serialized);
  41.         return $key;
  42.     }
  43.  
  44.     private function hasCache($key) {
  45.         if (isset($this->cache[$key])) {
  46.             if ($this->cache[$key]->expire > time()) {
  47.                 return true;
  48.             } else {
  49.                 // Удаляем просроченный кэш
  50.                 unset($this->cache[$key]);
  51.             }
  52.         }
  53.         return false;
  54.     }
  55.  
  56.     private function getCache($key) {
  57.         return $this->cache[$key]->data;
  58.     }
  59.  
  60.     private function setCache($key, $data) {
  61.         $this->cache[$key] = (object) array(
  62.             'expire' => time() + $this->timeout,
  63.             'data' => $data,
  64.         );
  65.     }
  66. }
  67.  
  68.  
  69. ?>

И пример использования:

  1. <?php
  2.  
  3. require './Cacher.php';
  4.  
  5. $cacher = new Cacher;
  6.  
  7. // Через __call
  8. $cacher->file_get_contents('http://jeck.ru');
  9. $cacher->file_get_contents('http://jeck.ru');
  10.  
  11. class TestClass {
  12.     private $param = 'paramValue';
  13.  
  14.     public function testMethod($url) {
  15.         return file_get_contents($url);
  16.     }
  17. }
  18.  
  19. $testClass = new TestClass;
  20. // Через call что бы передать имя и метод класса
  21. $cacher->call(array($testClass, 'testMethod'), 'http://jeck.ru');
  22.  
  23. ?>

Ушлые спамеры

19.11.2010

Вот такое письмо сейчас прибыло на почту:

Здравствуйте!

Высылаю анкету на организацию рекламной кампании для Вашего сайта – jeck.ru

Пожалуйста, заполните необходимые поля и вышлите ее на Email: valimaster@yandex.ru

После чего, Вам будет предоставлен доступ к личному кабинету и счет для оплаты.

С уважением, Владислав.

По любым возникшим вопросам обращайтесь:
Телефон: +7 (495) 585-62-89
ICQ: 569775857

Надеюсь теперь их email и icq попадут в спам базы.

PR-CY теперь поддерживает .РФ

17.11.2010

Вот например – http://pr-cy.ru/analysis/президент.рф.
Анализ президент.рф
Кроме того весь анализ был полностью переписан, он стал гораздо шустрее особенно с учетом того что кешируется только контент самого сайта, а тИЦ и PR проверяются каждый раз заново.

Работа с AntiCaptcha

16.11.2010

Снова решил поделится удобной библиотечкой, на этот раз для наглого спама удобного прохождения CAPTCHA. Код лежит на assembla.
Пример работы с библиотекой:

  1. <?php
  2.  
  3. require './anticaptcha.php';
  4.  
  5. try {
  6.     // 5a2e55b49179066bc702342412cf5cbc - ключ AntiCaptcha
  7.     $ac = new AntiCaptcha('5a2e55b49179066bc702342412cf5cbc');
  8.  
  9.     // Задаем ограничивающие параметры
  10.     $ac->numeric = true;
  11.     $ac->min_len = 6;
  12.     $ac->max_len = 6;
  13.  
  14.     // Получаем каптчу
  15.     $captcha = file_get_contents('http://jeck.ru/labs/captcha');
  16.  
  17.     // Расшифровываем налету
  18.     echo "Start auto recognizing\r\n";
  19.     $code = $ac->recognize($captcha, true);
  20.     echo "Recognized code - ".$code."\r\n";
  21.     // Сохраняем каптчу в файл
  22.     file_put_contents('./captcha.png', $captcha);
  23.  
  24.     // Расшифровываем из файла
  25.     echo "Start file recognizing\r\n";
  26.     $code = $ac->recognize('./captcha.png');
  27.     echo "Recognized code - ".$code."\r\n";
  28. } catch (Exception $e) {
  29.     // Обработка исключений
  30.     echo $e->getMessage();
  31. }
  32.  
  33. ?>

Основное преимущество – нет необходимости сохранять изображение в файл. Кстати если интересно тут можно посмотреть процесс рефакторинга.

И не стесняйтесь – подписывайтесь.

Закладочник 2.1+

13.11.2010

Может кто то уже заметил – закладочник обновился до версии 2.1 . Удалены неработающие сервисы, добавлены новые. Как всегда обновления для клиентов абсолютно бесплатны. Скачать или купить можно здесь. Если по каким то причинам вы забыли и не можете восстановить ключ – просто напишите мне с адреса который указали при покупке.

Интерфейс Закладочника 2.1

+ Акция
Каждый кто приобретет закладочник до конца ноября имеет право на добавление одного модуля. Напишите мне какой сервис хотели бы видеть в закладочнике и я добавлю его в течении пары дней.

php класс для работы с http через curl

11.11.2010

Начну писать снова помаленьку. А то совсем обленился. Вот решил поделится одной библиотечкой с которой работаю уже несколько лет. За это время она регулярно обновлялась, исправлялись старые баги добавлялись новые… По идеи это класс (между прочим первый класс который я написал на php) надстройка над curl, исключительно для облегчения работы и сохранения нервов.

И так, ссылка на репозиторий – httpclass там всегда можно будет найти свежую версию.
Дальше примеры.
Остальное