Евгений Степанищев

Я — эксперт в области разработки веб-приложений и безопасности в интернете. Каждый месяц мой блог посещают около 90 тысяч человек. Работаю техническим директором в «Системах документооборота», занимаюсь электронным правительством.

Weblog ping или блоги говорят

На мой взгляд, это очень здравая идея нового веба — что сайты должны обмениваться данными между собой по определённым протоколам. Самый известный — это RSS (экспорт статей сайта), чуть менее известные pingback и trackback (позволяют указать, что на статью сослались), набирающий популярность OpenID (позволяет авторизоваться на сайте пользователю другого сайта), незаслуженно забытый BLIMP (позволяет сайтам оповещать друг друга о битых ссылках).

Протокол «ping», точнее, это часть протокола XML-RPC WebLogs, позволяет сказать другому сайту «у меня по этому URL что-то изменилось». Это очень простая и хорошая идея. Например, поисковые машины (поиск по блогам от Яндекса, например, это умеет, Google — тоже) могут быстрее переиндексировать документы, а сайты — узнать об изменении RSS.

Благодаря ping я имею возможность использовать на сайте поиск Яндекса — ведь у меня есть возможность сообщить, где и что на сайте изменилось.

Как же делается ping? Надо всего лишь открыть соединение к выбранному серверу и передать по определённому URL сообщение. Имя сервера и URL можно найти в поиске или в любом списке «серверов ping для WordPress» (популярный движок блогов WordPress предоставляет пользователю возможность «пинговать» заданные сервера).

Сообщение отсылается по протоколу HTTP, методом POST, записывается в формате XML и имеет следующий (по версии Google) вид:
<?xml version="1.0"?>
<methodCall>
  <methodName>weblogUpdates.extendedPing</methodName>
  <params>
    <param>
      <value>Название вашего блога</value>
    </param>
    <param>
      <value>URL блога</value>
    </param>
    <param>
      <value>URL страницы, которая изменилась</value>
    </param>
    <param>
      <value>URL RSS, RDF или Atom, к которому относится страница</value>
    </param>
    <param>
      <value>Необязательный параметр — категория или «тег» сайта,
       можно указать несколько, разделённые символом «|»</value>
    </param>
  </params>
</methodCall>
На PHP самый простой способ всё это проделать — через Curl, хотя я формирую запрос и отсылаю его через fsockopen. Ответ часто можно и не читать, там содержится информация о том, выполнен ли запрос, но на практике это редко бывает интересно. Если не выполнен, то максимум, что вы можете сделать — это его повторить.
15 ноября 2007 12:38

Ramon (rembish.ru)
15 ноября 2007, 13:06

"...незаслуженно забытый BLIMP..." - хорошая фраза автора о своем детище

dkrnl.livejournal.com (dkrnl.livejournal.com)
15 ноября 2007, 13:44

самый простой (и почемуто забытый) способ послать post - через stream:
  $postdata = http_build_query($postData);
  $options = array("http" => array("method" => "POST", "header" => "Content-type: application/x-www-form-urlencoded", "content" => $postdata));
  $context = stream_context_create($options);
  return file_get_contents($fileUrl, false, $context);
 

Ramon (rembish.ru)
15 ноября 2007, 14:14

dkrnl'у +1
Забытый, скорее потому, что потоки основательно появились только в 5.0.0. А метод сам по себе шикарный. Да.

dkrnl.livejournal.com (dkrnl.livejournal.com)
15 ноября 2007, 14:27

"Streams were introduced with PHP 4.3.0 ..."
в том и дело !!оч!! забытый метод.

bolk (bolknote.ru)
15 ноября 2007, 14:31

Метод хороший, я им пользуюсь, но у себя и Blok'e я расчитываю на PHP4, мало ли куда придётся его утащить.

bolk (bolknote.ru)
15 ноября 2007, 14:32

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

indeyets.livejournal.com (indeyets.livejournal.com)
15 ноября 2007, 15:09

вот-вот… взял бы да опубликовал его на английском языке и покидал ссылок на разные дискуссионные места

bolk (bolknote.ru)
15 ноября 2007, 15:36

Много что надо — библиотеку в PEAR и CPAN и т.д. :) У меня сейчас горячее время, до этого тоже проблемы были :)

nudnik.ru (nudnik.ru)
15 ноября 2007, 20:56

Забыл написать, что все вполне понимают только второй параметр - "URL блога". Следующие три параметра можно пропустить.

Исходя из логики, может показаться, что адрес RSS имеет такое-то значение, но это не так.

bolk (bolknote.ru)
15 ноября 2007, 22:55

Ты не прав. Для Google важны и URL страницы, которая изменилась, и URL RSS.

nudnik.ru (nudnik.ru)
15 ноября 2007, 23:45

"Гугль поиск по блогам"?

bolk (bolknote.ru)
16 ноября 2007, 11:17

http://blog.google.com/blogsearch?hl=ru

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)

Подсказка по написанию комментария

В комментариях можно применять следующую специальную разметку:

  • слово, обрамлённое в «звёздочки» выделяется *жирным*
  • ссылка становится ссылкой: http://bolknote.ru
  • ссылка в скобках также становится ссылкой, закрывающая скобка не захватывается: (http://bolknote.ru)
  • каждую строку цитаты следует начинать со знака «больше»:
    > это цитата
    > из двух строк
  • можно вставить картинку, залитую на один из сервисов: «Яндекс.Фотки», «Фликр» или «Пикплз». Для этого нужно вставить на страницу полный адрес вашей картинки на сервисе, он превратится в картинку:

    http://fotki.yandex.ru/users/bolknote/view/274311?page=3