Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Автоматическое получение Яндекс тИЦ для сайтов

13.12.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Тематический индекс цитирования (тИЦ) используется в поисковой системе Яндекс и определяет "авторитетность" интернет-ресурсов. Этот индекс используется в различных СЕО-инструментах, однако сам Яндекс не предоставляет никаких средств для его легального получения. Но нам на помощь может прийти разработка самого Яндекса - Яндекс.Бар, в котором при серфинге отображается тИЦ открытого сайта. Очевидно, что эти данные Яндекс.Троян получает от самого сервера, осталось отследить любым сниффером, куда идет обращение и в каком формате. В отличие от Google PR, с Яндексом проблем нет. Никаких дополнительных контрольных сумм для ссылки считать не надо, да и тИЦ единый для всего домена. В итоге все ограничивается одним простым запросом типа:

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

В качестве значения последнего параметра url передается имя проверяемого домена. В ответ вернется XML-файл, подобный приведенному ниже:
  1. <?xml version="1.0" encoding="windows-1251" ?>
  2. <urlinfo>
  3.     <url domain="www.manhunter.ru"><![CDATA[/]]></url>
  4.     <yaca url="www.manhunter.ru"/>
  5.     <tcy rang="3" value="70"/>
  6.     <topics></topics>
  7.     <textinfo></textinfo>
  8. </urlinfo>
Искомое значение Яндекс тИЦ содержится в теге tcy, вытащить его оттуда можно простейшим парсером. Но злоупотреблять подобными запросами все-таки не надо, можно получить бан по IP. Значение тИЦ пересчитывается примерно раз в неделю, поэтому информацию достаточно загружать раз в час или вообще раз в сутки, а полученные данные кэшировать на своей стороне.

Просмотров: 6475 | Комментариев: 8

Релевантный поиск по базе MySQL

04.11.2011 | Категория: Web-мастеру и не только | Автор: ManHunter

Релевантный поиск по базе MySQL

Я уже писал о возможностях поиска с учетом морфологии, а теперь обещанная статья о релевантном поиске по базе MySQL. Как разъясняют словари, релевантность - в поисковых системах - мера соответствия результатов поиска задаче поставленной в запросе. То есть чем ближе найденный результат соответствует искомому, тем выше в результатах поиска он должен находиться. Применительно к выборке из базы, в строках результата релевантность должна быть представлена неким числовым значением, по которому эта выборка должна быть отсортирована.

Начнем с теории. Если мы ищем строку из нескольких слов среди нескольких текстов, то наибольшей релевантностью обладает текст, в котором встречается вся эта строка целиком и точно в том виде, как ее задали к поиску. Затем идут тексты, где есть все слова из искомой фразы, но расположенные не по порядку. После них идут тексты, где встречаются только отдельные слова, и, чем меньше слов из фразы, тем ниже релевантность. К тому же слова из заголовка текста должны иметь поисковый вес больше, чем такие же слова из текста.

Читать статью целиком »
Просмотров: 19416 | Комментариев: 13

Поиск с учетом морфологии русского языка

20.07.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Семантический поиск текста с учетом морфологии - серьезная задача, с которой даже крупные поисковики справились с разной степенью успеха. Но частично реализовать поиск с учетом разных форм слов русского языка вы можете самостоятельно. Для этого лучше всего воспользоваться PHP-классом phpMorphy. Это очень удобное средство для организации поиска с учетом морфологии русского, английского, украинского, эстонского или немецкого языков. Словари для каждого языка суммарно занимают около 10 Мб, а сам подключаемый скрипт - чуть меньше 30 Кб. При этом не требуется устанавливать на сервер дополнительное программное обеспечение, все будет работать на самом обычном хостинге. Обновленные версии phpMorphy с поддержкой современных версий PHP7 и PHP8 можно скачать с репозитория.

Начнем с подключения phpMorphy. Это делается очень просто. Сперва скачайте дистрибутив, словари, распакуйте все это в отдельную папку, соблюдая структуру вложенных каталогов. Словари разместите в папке dict. Теперь откроем файл примера из папки examples и посмотрим настройки:
  1. // подключение движка phpMorphy
  2. require_once('src/common.php');
  3.  
  4. // настройки движка
  5. $opts = array(
  6.     ...
  7. );
  8.  
  9. // подключение словарей русского языка
  10. $dir 'dicts';
  11. $dict_bundle = new phpMorphy_FilesBundle($dir'rus');
  12.  
  13. // создание класса
  14. $morphy = new phpMorphy($dict_bundle$opts);
В настройках используется важный параметр storage, он может принимать одно из трех значений: PHPMORPHY_STORAGE_FILE (не загружать файлы словарей в память целиком, это самый медленный вариант, но самый экономный в плане работы с ресурсами сервера), PHPMORPHY_STORAGE_SHM (загружать файл словаря целиком в shared-память, требуется расширение PHP shmop) или PHPMORPHY_STORAGE_MEM (также загружать файл в память целиком если не используется shmop, по скорости работы ничем не отличается от предыдущего). На виртуальном хостинге, скорее всего, придется использовать первый вариант, а на выделенном сервере для большей скорости лучше применять варианты с использованием памяти. Выберите вариант под свои задачи. Остальные настройки и их значения подробно расписаны в официальной документации.

Читать статью целиком »
Просмотров: 21318 | Комментариев: 18

Как сделать свой сервис коротких ссылок

02.06.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
С ростом популярности социальных сетей типа Twitter, где длина сообщения ограничена, возникла необходимость в специальных сервисах для сокращения длинных ссылок. В результате появилось много сайтов, где вы можете ввести длинную ссылку и вместо нее получить короткую. При переходе по такой ссылке вы сперва попадаете на сайт-редиректор, а уже с него выполняется автоматический переход на нужную ссылку. Я даже встречал такие сокращенные ссылки в печатных изданиях, а не только в интернете. Ничего сложного в реализации такого сервиса нет, и сейчас мы сделаем что-нибудь подобное.

Начинается все с покупки короткого доменного имени. Все красивые имена уже разобраны или захвачены киберсквоттерами, но кое-что еще можно найти. В конце концов, рядовому пользователю нет особой разницы, по красивой ссылке идти или по некрасивой, главное чтобы она помещалась в его сообщение. Хорошо, домен у нас есть, едем дальше.

А дальше нам надо продумать структуру базы данных, в которой будут храниться короткие ссылки и их соответствия. Поскольку мы делаем сейчас самый простейший сервис, то пусть структура базы будет такой:

CREATE TABLE IF NOT EXISTS `redirector_links` (
`link_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'ID ссылки в базе',
`link_hash` VARCHAR(32) COMMENT 'Хэш ссылки',
`link_url` TEXT COMMENT 'Адрес ссылки',
PRIMARY KEY (`link_id`),
KEY `link_hash` (`link_hash`)
) ENGINE=MyISAM

Хэш ссылки нужен для того, чтобы не создавать в базе дубли для повторяющихся ссылок. В принципе, сюда же можно добавить счетчик для сбора статистики переходов, добавить принадлежность к какому-нибудь владельцу и т.п. Все зависит от поставленных задач.

Читать статью целиком »
Просмотров: 31287 | Комментариев: 24

Создание древовидного списка из массива

01.05.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Еще одна из часто встречающихся задач при разработке сайтов - создание многоуровневых древовидных списков. Отдельные элементы списков хранятся в массиве и объединяются между собой через связку полей "ID элемента" - "Родительский элемент". Это могут быть выпадающие меню с несколькими уровнями субменю, каталоги товаров по категориям, карты сайта и т.п. Попробуем описать трехуровневое вложенное меню. Для этого зададим массив вручную, а в реальной ситуации он может быть, например, получен из базы. Количество уровней вложенности может быть произвольным, три уровня выбраны исключительно для примера.
  1. // Построение из массива древовидного списка без использования рекурсии
  2. $menu=array(
  3.      1=>array('name'=>'Овощи''parent'=>0),
  4.          6=>array('name'=>'Капуста''parent'=>1),
  5.          7=>array('name'=>'Помидоры''parent'=>1),
  6.          9=>array('name'=>'Салат''parent'=>1),
  7.              18=>array('name'=>'Китайский салат''parent'=>9),
  8.          12=>array('name'=>'Тыква''parent'=>1),
  9.          16=>array('name'=>'Редиска''parent'=>1),
  10.      2=>array('name'=>'Фрукты''parent'=>0),
  11.          13=>array('name'=>'Бананы''parent'=>2),
  12.          14=>array('name'=>'Ягоды''parent'=>2),
  13.              19=>array('name'=>'Арбуз''parent'=>14),
  14.              20=>array('name'=>'Клубника''parent'=>14),
  15.      3=>array('name'=>'Животные''parent'=>0),
  16.      4=>array('name'=>'Растения''parent'=>0),
  17.          8=>array('name'=>'Конопля''parent'=>4),
  18.          11=>array('name'=>'Мак''parent'=>4),
  19.          17=>array('name'=>'Сахарный тростник''parent'=>4),
  20.      5=>array('name'=>'Насекомые''parent'=>0),
  21.          10=>array('name'=>'Тараканы''parent'=>5),
  22. );
В parent прописан ID родительского элемента для каждого субменю, главное меню (первый уровень) имеет parent=0. Теперь нам надо из этого линейного массива сделать древовидный согласно связям родительских и дочерних элементов. Обычно для этого используется решения с применением рекурсии или же требуется, чтобы исходный массив был специальным образом отсортирован. Но вполне можно обойтись таким вот элегантным решением с использованием ссылок:
  1. // Построение дерева за один проход
  2. foreach($menu as $menu_id=>$data) {
  3.     // Прописать в родительском узле ссылку на пункт меню
  4.     $menu[$data['parent']]['child'][$menu_id]=&$menu[$menu_id];
  5. }
  6.  
  7. // Готовый массив находится в $menu[0]['child']
  8. $sorted_menu=(array)$menu[0]['child'];
Единственное условие, чтобы исходный массив не содержал кольцевых замыканий, это когда родительский элемент ссылается в качестве своего родителя на свой дочерний элемент. Других ограничений нет, массив может быть как угодно отсортирован и иметь "дыры" в нумерации ID.

Читать статью целиком »
Просмотров: 11711 | Комментариев: 11

01 ... 16 17 18 19 20 21 22 ... 26
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2025
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 3 (0.0056 сек.) / Память: 4.5 Mb
Наверх