Архив за Июнь 2009

Автоматическое добавление noindex ко внешним ссылкам на PHP

Четверг, 25 Июнь 2009

Сегодня на работе столкнулся со следующей задачей: на разработанном нами сайте потребовалось закрыть все внешние ссылки тэгом <noindex>, обычно это делают для того, чтобы вес страниц не уходил на сторонние ресурсы.
При разработке сайта таких задач не ставилось и все тексты добавлялись без этих требований.
Сайт разрабатывался давно и содержит довольно мноо текстовых документов со внешними ссылками.
Оценив объём стало ясно, что вручную проставить <noindex> — очень большая работа в процессе которой могут быть допущены ошибки.
Решил написать скрипт, который бы обрабатывал HTML-текст и автоматически проставлял вокруг внешних ссылок.
Хотя я и не монстр в регулярных веыражениях и пишу их по справочнику, функцию выполняющую мою задачу написал быстро, ниже привожу её код.

&lt;?php
function processLinksCallback($matches){
$link=$matches[0];
if(strpos($link, &quot;http://&quot;)&gt;0 &amp;&amp; strpos($link, $_SERVER[&quot;HTTP_HOST&quot;])===false){
$link=&quot;&lt;noindex&gt;&quot;.$link.&quot;&lt;/noindex&gt;&quot;;
}
return $link;
}
function processLinks($txt){
return preg_replace_callback('/\&lt;a(.*?)\&lt;\/a\&gt;/i', &quot;processLinksCallback&quot;, $txt);
}
?&gt;

Для того, чтобы её использовать, необходимо содержимое всей страницы собрать в PHP-переменную $txt.
Сделать это можно добавив в самом начале скрипта код ob_start();, а в самом конце $txt=ob_get_clean();
Затем нужно прогнать эту переменную через функцию processLinks и вывести результат.
Получается следующий код страницы:

&lt;?php
function processLinksCallback($matches){
$link=$matches[0];
if(strpos($link, &quot;http://&quot;)&gt;0 &amp;&amp; strpos($link, $_SERVER[&quot;HTTP_HOST&quot;])===false){
$link=&quot;&lt;noindex&gt;&quot;.$link.&quot;&lt;/noindex&gt;&quot;;
}
return $link;
}
function processLinks($txt){
return preg_replace_callback('/\&lt;a(.*?)\&lt;\/a\&gt;/i', &quot;processLinksCallback&quot;, $txt);
}
ob_start();

//код вашей страницы
//...

$txt=ob_get_clean();
$txt=processLinks($txt);
echo($txt);
?&gt;

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

Надеюсь, данная функция будет кому-нибудь полезна.
Сам искал в интернете готовое решение — не нашлось.

Доработанные функции, добавляющие rel=nofollow:

function processLinksCallback($matches){
 $link=$matches[0];
 if(strpos($link, &quot;&lt;a href=&quot;http://&amp;quot;)&gt;0&quot;&gt;http://&quot;)&gt;0&lt;/a&gt; &amp;&amp; strpos($link, $_SERVER[&quot;HTTP_HOST&quot;])===false){
  $link_with_nofollow=str_replace(&quot;href=&quot;,&quot; rel='nofollow' href=&quot;, $link);
  $link=&quot;&lt;noindex&gt;&quot;.$link_with_nofollow.&quot;&lt;/noindex&gt;&quot;;
 }
 return $link;
}
function processLinks($txt){
 return preg_replace_callback('/\&lt;a(.*?)\&lt;\/a\&gt;/i', &quot;processLinksCallback&quot;, $txt);
}

Собаки против велосипедистов

Четверг, 18 Июнь 2009

Я люблю животных, иногда даже кормлю бездомных собак.
Но когда я за рулём своего велосипеда я ненавижу этих четвероногих «друзей».

Экстремальность велоспорта в Росси заключается в том, что по паркам бродят бойцовые собаки, без намордников и даже без поводка.
Хозяева уверены в безобидности своих питомцев, ведь их то они не кусают, на них они не бросаются из кустов.

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

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

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

Будьте аккуратны, дорогие велосипедисты!

Размножитель текстов, синонимайзер

Понедельник, 15 Июнь 2009

Моя работа связана с разработкой сайтов, их поддержкой и раскруткой.

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

Я был удивлён, не знал, что тексты размножают.

Суть в следующем: заменяя слова и словосочетания на синонимы, меняя слова и предложения местами можно создать сколько угодно нормальных человекочитаемых статей имея одну базовую.

Изучил тему в интернете, оказывается есть такая услуга — размножение текста. Рбята автоматически подставляют синонимы, генерируют миллион вариантов, из них выбирают тысячу и передают заакзчику. Что касается человекочитаемости, то они утверждают, что вносят правки вручную, после подстановки синонимов.

И тут я подумал: «неужели они вносят правки в 1000 статей? Нереально!».

Стоимость размножения моего текста в 7000 символв получалась около 150 долларов.

Недешево, мы же программисты, сами сделаем!

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

Громоздкий XML-ник я заплевал через 10 минут работы — слишком неудобно оборачивать тэгами такие примитивные вещи!

Решил перечислять синонимы в квадратных скобках, подставляя их сразу в правильной форме, а перечисления, где требуется вывести фразы в произвольном порядке — в фигурных. На правку текста в 7000 символов у меня ушло около 40 минут. Программист решил задачу менее чем за день, причём с возможностью делать влроженные перечисления синонимов.

Получился вот такой размножитель текстов.

На странице этого скрипта есть пример того, как делать разметку исходника.

При генерации очередной версии синонимы подставляются в случайном порядке, таким образом, при большом объёме синонимов (желательно синонимизировать целые фразы или предложения) получается вполне уникальный текст.

Вброд через Яузу

Понедельник, 15 Июнь 2009

Сегодня возвращаясь домой вдоль Яузы увидел интересную картину. Один велосипедист пересекал Яузу ВБРОД сидя на велосипеде. Включил пониженную передачу, колёса наполовину в воде и прёт, а его приятель снимает на камеру. Доехал до конца, не упал, жалею, что не взял у них контактов, нечасто такое увидишь.

Манок для уток — крякалка. Детский спецсигнал.

Понедельник, 8 Июнь 2009

Сколько удовольствия может принести манок для уток!
И для этого вовсе необязательно быть охотником на уток, достаточно быть охотником на детский смех!

Дорога до работы. Из Мытищ до Владыкино вдоль Яузы на велосипеде.

Воскресенье, 7 Июнь 2009
Летом я очень люблю ездить на работу на велосипеде. Из Мытищ до Владыкино дорога занимает 50 минут, что гораздо быстрее, чем если ехать на электричке и метро. В маршрутке до Медведково можно и вовсе встрять на час. Съезд на Осташковское шоссе постоянно стоит, особенно летом, когда активировались дачники.

Раньше я ездил на равне с машинами, по дорогам, но после нескольких стрёмных ситуаций начал побаиваться дорожных отморозков. Для того, чтобы избегать контактов с автомобилями я решил подобрать новый тихий машррут. Открыл гугл-карту и начал всматриваться.

В первую очередь в голову пришёл вариант с Лосиным островом. Он тянется от МКАДа до парка Сокольники. Через переход на платформе Яуза или на Маленковской можно попасть на ВДНХ, а там через Ботанический сад до Владыкино. Кстати, не многие знают, что главный вход в Ботанический сад находится у метро Владыкино, а станция «Ботанический сад» находится так далеко от Ботанического сада, что на мой взгляд не имеет к нему никакого отношения. Инетресно, чем руководствовались основатели этой станции. Может тогда Ботанический сад был больше и доходил до этой станции? Вырубили?

Вариант с Лосиным островом неплох, но меня смущало то, что для того, чтобы в него въехать приходится пеерсекать Ярославское шоссе и МКАД. А для того, чтобы попасть на ВДНХ нужно немало проехать рядом с машинами в утренних пробках. Я решил ещё раз присмотреться в карту, может парк, или лес, или анбережная?

Да, есть набережная! Мимо моего дома протекает река Яуза и течет она в центр Москвы, через тот самый Ботанический сад.
Присматриваюсь к карте, может можно удидеть тротуары?

Яуза пересекает МКАД

Тротуары есть!

Тротуары вдоль Яузы

Но некоторые места вызывают подозрение

Густой лес вдоль Яузы

Практически везде тротуары. Есть несколько непонятных мест, но их можно объехать. Пора ехать на разведку!

В первый день я ехал почти 2 часа.
В Яузу втекает несколько ручьев, которые перепрыгнуть нереально, приходится возвращаться до ближайшего моста и пытаться объехать по другому берегу.
Практически под всеми мостами имеется проход, но в некоторых случаях приходится пересекать мост сверху.

Мост под Яузой

Мост под Яузой

Приходилось так же практически увязать в болоте, где не я ехал на велосипеде, а он ехал на мне. С завистью смотрел на другой берег, вдоль которого лежит деревянный тротуар и гуляли мамаши с колясками. Но перебраться туда — объезд минут на 15.

Тротуар вдоль Яузы

В конечном итоге я добрался до входа в Ботанический сад, это была калитка, перед которой мне потребовалось пересечь Яуза по трубе.

Труба через Яузу у Ботанического сада

Калитка в Ботанический сад

Короче доехал. Один час, сорок минут — неплохой результа для начала, ведь я практически все время ехал вдали от машин.

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

В конечном счете оптимальный маршрут был найден. Три пересечения дорог с машинами, остальные под мостами и почти весь маршрут на велосипеде.
Время сократилось до одного часа, а в дальнейшем до 56 минут. Я очень доволен своим открытием и теперь езжу только этим маршрутом.

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