Делаем рейтинг блогов чиновников или Свой рейтинг записей блогов на коленке
Многие имеют свои подписки на новости и сообщения по RSS. У меня, к примеру, имеется подборка RSS блогов чиновников разных мастей — от президента, до региональных министров и депутатов госдумы. С открытием API рейтинга блогов появилась возможность сделать свой аналог рейтинга яндекса. Предлагаю вашему вниманию готовый шаблон — как сделать свой рейтинг для блогов, которые интересуют только тебя. Т.е. в него не будут входить записи из блогов, которые ты не хочешь читать или которые ты просто не знаешь. Имеются недостатки в следствии некоторых технических сложностей (об этом ниже).
Статья для тех, кто
— просто хочет ранжировать записи любимых блогов по простым алгоритмам. Потребуется только подготовить файл с подписками и расшарить его в интернете.
— кто хочет разработать для своих любимых блогов более сложный алгоритм
Если кратко технология рыботы нашего рейтинга такая — берём OPML-файл с подписками (рецепт приготовления ниже. Можно самому создать, а можно импортировать из rss-читалок), рисуем пайп (по сути, визуальная схема для работы с xml/rss/html) в Yahoo Pipes, где в цикле для каждой подписки делаем запрос к API Яндекса с последними записями из подписанных блогов, потом их объединяем, сортируем по количеству комментариев, визитам или как угодно и вставляем в свою страницу в виде небольшого виджета или берём результат как RSS.
Для того, чтобы получить быстрый результат с неким подобием рейтинга, можно просто зайти на страницу пайпа и ввести URL своего opml (свой я разместил на бесплатном хостинге и он подставляется по умолчанию).

Берём OPML файл с вашими подписками. Его поддерживают многие RSS-ридеры, в том числе Google Reader, который я использую и из которого я экспортировал файл со своими подписками.
Пример файла:
Поскольку пайп (не привычное слово, но аналога не знаю), который я нарисовал, не поддерживает вложенные outline-тэги, то придётся убрать вложенность outline, т.е. убрать категории подписок (Пытливые могут попробовать нарисовать пайп с учётом вложенности outline; я пока не дорос :). Должно получиться что-то типа
Сохраняем этот файл где-нибудь в сети и получаем его URL.
Мы подготовили файл, чтобы пайп смог по нему пройти и получить блоги, из сообщений которых мы будем составлять наш рейтинг.
Далее идём на Yahoo Pipes и рисуем пайп* (разумно за основу взять один из моих, путём копирования в свой профиль на Yahoo и последующего изменения под свои требования) или используем мой пайп, который
— закачивает себе opml-файл
— проходит по каждой подписке (по тэгам outline)
— для каждой подписки делает запрос к API Яндекса, который возвращает RSS с заголовками записей подписки и с некоторыми дополнительными параметрами, которые можно использовать в ранжировании — количество комментариев, визитов, комментаторов и т.д.
— считаем коэффициенты для ранжирования, если требуется (Возможности вычислений весьма ограничены)
— сортируем по желаемому параметру.
— сохраняем пайп
* работать с Yahoo Pipes нужно будет научиться, но это не сложно.
При подстановке ссылки на opml-файл на выходе мы получаем rss ранжированный по каким-то параметрам.
http://pipes.yahoo.com/myblograting/gosblogi5 — пайп, ранжирующий записи за последние 5 дней по следующей формуле: КолСсылок*4 + КолКомментариев/3.
Одно из неудобств пайпов — отсутствие нумерации записей (как в настоящем рейтинге :)), поэтому можно просто воспользоваться пайпом, который нумерует заголовки записей (пайп не мой, я его себе скопировал и немного изменил). На вход подаётся RSS, который выходит из пайпа указанного выше. http://pipes.yahoo.com/myblograting/numbering
— технология не шустрая, случаются сбои. Данные получаются и считаются динамически.
— Яндекс не всегда по запросам выдаёт актуальную информацию (параметры, по которым проводиться ранжирование)
— Всё зависит от Яндекса :)
Подробнее про API Яндекса поиска по блогам. Для определения своего рейтинга Яндекс предлагает использовать запросы, которые либо просто получают все сообщения с параметрами (например, http://blogs.yandex.ru/entriesapi?p=2), либо получить сообщения с параметрами по определённому текстовому запросу (например, http://blogs.yandex.ru/search.rss?text=счастье&filterlinks=2). Т.е. нельзя просто взять и запросить записи определённого пользователя с проставленными ранжирующими параметрами. Можно получить все записи вообще, а потом из них выделить записи определённого пользователя, но это не совсем мне подходит. Поэтому я в своих пайпах использовал несколько сомнительный запрос вида http://blogs.yandex.ru/search.rss?journal=http://blogs.mail.ru/mail/zhirinovskyvv/&ft=blog,personal,community
т.е. получить записи из определённого блога.
Почему этот запрос я считаю (но использую) сомнительным? Потому что в API рейтинга блогов используется другая конструкция
http://blogs.yandex.ru/search.rss?text=счастье&filterlinks=2 и в описании выдачи на мой запрос в справочнике Яндекса не сказано, что возвращаются параметры количества комментариев, количества визитов и.д. Однако, можно заметить, что для некоторых записей они возвращаются. Т.е. показатели ранжирования считаются не для всех записей. Думаю, зависит от популярности блога или сообщения, которую Яндекс как-то определяет. Заметил так-же, что сообщения из livejournal лучше помечаются показателями, нежели другие основные платформы (например, блоги mail.ru). Например, сообщения за последнюю неделю из блога Жириновского вообще не имеет показателей по моему запросу (и он в мой рейтинг не попадает :). Ещё имеются трудности с определением комментариев для блогов с премодерацией комментариев, что среди топ-руководителей не редкость (например, блог Медведева). Так что в моём рейтинге таким сообщениям приходится «выезжать» на других показателях, в частности на количестве ссылок.
Другая проблема — даты. Яндекс даёт возможность в API указывать интервал дат, между которыми нужно получить сообщения, но при совмещении параметров journal (указывает журнал из которого брать сообщения), ft (указывает область поиска сообщений) и параметров интервала дат, сообщения выдаются только для ~10 последних дней от текущей даты. Если задавать другой интервал дат при таких-же параметрах, то выдаётся пустой список.
Примеры
Обычный текстовый запрос с интервалом по дате: http://blogs.yandex.ru/search.rss?text=%D1%81%D1%87%D0%B0%D1%81%D1%82%D1%8C%D0%B5&from_day=06&from_month=1& from_year=2009&to_day=12&to_month=4&to_year=2009&ft=blog,personal (возвращает записи по любым датам)
Запрос по определённому блогу с интервалом по дате месячной давности: http://blogs.yandex.ru/search.rss?journal=drugoi.livejournal.com& from_day=06&from_month=10&from_year=2009&to_day=12&to_month=11&to_year=2009&ft=blog,personal (нет записей)
Запрос по определённому блогу с интервалом по дате «свежей» давности: http://blogs.yandex.ru/search.rss?journal=drugoi.livejournal.com& from_day=06&from_month=10&from_year=2009&to_day=12&to_month=12&to_year=2009&ft=blog,personal&numdoc=100 (сообщения заканчиваются на 26 ноября).
Отсюда следует ещё одна небольшая особенность — наш рейтинг можно составить только для относительно недавних сообщений. Рейтинг популярных сообщений за месяц по нашему алгоритму не сделать.
Будем надеяться, Яндекс и дальше будет развивать своё API для определения показателей ранжирования.
— не нужен свой хостинг, расчёты далает сервис Yahoo Pipes. Нагрузка только на хостинг opml-файла, API Яндекса и Yahoo Pipes.
— вывод в RSS, на который вы можете подписаться. Если записей в ридере очень много, то, бывает, разумнее воспользоваться саморисованным пайпом для определения записей достойных чтения, чтобы не просматривать все.
— возможно реализовать рейтинг записей тематических блогов. Для этого нужно собрать большую коллекцию блогов и иногда её актуализировать.
Ну и для примера, можете посмотреть простую реализацию на основе API Яндекса и Yahoo Pipes — рейтинг сообщений из блогов чиновников РФ — gosblogi.ru
P.S. Выскажу свои идеи какой должен быть сервис рейтинга блогов
— выборка блогов в свои закладки в рамках сервиса из общего рейтинга записей
— импорт блогов из закладок в opml-файл
— рейтинг записей из блогов в закладках
— расшаривание своих рейтингов другим пользователям (большое поле для тематических рейтингов).
Пока, на сколько я знаю, ни один сервис подобного функционала не предоставляет.
_________
Текст подготовлен в ХабраРедакторе
Статья для тех, кто
— просто хочет ранжировать записи любимых блогов по простым алгоритмам. Потребуется только подготовить файл с подписками и расшарить его в интернете.
— кто хочет разработать для своих любимых блогов более сложный алгоритм
Если кратко технология рыботы нашего рейтинга такая — берём OPML-файл с подписками (рецепт приготовления ниже. Можно самому создать, а можно импортировать из rss-читалок), рисуем пайп (по сути, визуальная схема для работы с xml/rss/html) в Yahoo Pipes, где в цикле для каждой подписки делаем запрос к API Яндекса с последними записями из подписанных блогов, потом их объединяем, сортируем по количеству комментариев, визитам или как угодно и вставляем в свою страницу в виде небольшого виджета или берём результат как RSS.
Для того, чтобы получить быстрый результат с неким подобием рейтинга, можно просто зайти на страницу пайпа и ввести URL своего opml (свой я разместил на бесплатном хостинге и он подставляется по умолчанию).

Готовим OPML файл
Берём OPML файл с вашими подписками. Его поддерживают многие RSS-ридеры, в том числе Google Reader, который я использую и из которого я экспортировал файл со своими подписками.
Пример файла:
<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
<head>
<title>Мои подписки</title>
</head>
<body>
<outline text="david_gor" title="david_gor" type="rss"
xmlUrl="http://david-gor.livejournal.com/data/rss" htmlUrl="http://david-gor.livejournal.com/"/>
<outline text="gov-gov.ru" title="gov-gov.ru" type="rss"
xmlUrl="http://gov-gov.ru/?feed=rss2" htmlUrl="http://gov-gov.ru"/>
<outline text="Самые интересные подписки" title="Самые интересные подписки">
<outline text="Интересная подписка 1"
title="Интересная подписка 1" type="rss"
xmlUrl="http://md-prokhorov.livejournal.com/data/rss" htmlUrl="http://md-prokhorov.livejournal.com/"/>
<outline text="Интересная подписка 2" title="Интересная подписка 2"
type="rss"
xmlUrl="http://blogs.mail.ru/mail/ygrekkk/?rss=1" htmlUrl="http://blogs.mail.ru/mail/ygrekkk/"/>
</outline>
</body>
</opml>Поскольку пайп (не привычное слово, но аналога не знаю), который я нарисовал, не поддерживает вложенные outline-тэги, то придётся убрать вложенность outline, т.е. убрать категории подписок (Пытливые могут попробовать нарисовать пайп с учётом вложенности outline; я пока не дорос :). Должно получиться что-то типа
<opml version="1.0">
<head>
<title>Мои подписки</title>
</head>
<body>
<outline text="david_gor" title="david_gor" type="rss"
xmlUrl="http://david-gor.livejournal.com/data/rss" htmlUrl="http://david-gor.livejournal.com/"/>
<outline text="gov-gov.ru" title="gov-gov.ru" type="rss"
xmlUrl="http://gov-gov.ru/?feed=rss2" htmlUrl="http://gov-gov.ru"/>
<outline text="Интересная подписка 1"
title="Интересная подписка 1" type="rss"
xmlUrl="http://md-prokhorov.livejournal.com/data/rss" htmlUrl="http://md-prokhorov.livejournal.com/"/>
<outline text="Интересная подписка 2" title="Интересная подписка 2"
type="rss"
xmlUrl="http://blogs.mail.ru/mail/ygrekkk/?rss=1" htmlUrl="http://blogs.mail.ru/mail/ygrekkk/"/>
</body>
</opml>Сохраняем этот файл где-нибудь в сети и получаем его URL.
Yahoo Pipes
Мы подготовили файл, чтобы пайп смог по нему пройти и получить блоги, из сообщений которых мы будем составлять наш рейтинг.
Далее идём на Yahoo Pipes и рисуем пайп* (разумно за основу взять один из моих, путём копирования в свой профиль на Yahoo и последующего изменения под свои требования) или используем мой пайп, который
— закачивает себе opml-файл
— проходит по каждой подписке (по тэгам outline)
— для каждой подписки делает запрос к API Яндекса, который возвращает RSS с заголовками записей подписки и с некоторыми дополнительными параметрами, которые можно использовать в ранжировании — количество комментариев, визитов, комментаторов и т.д.
— считаем коэффициенты для ранжирования, если требуется (Возможности вычислений весьма ограничены)
— сортируем по желаемому параметру.
— сохраняем пайп
* работать с Yahoo Pipes нужно будет научиться, но это не сложно.
При подстановке ссылки на opml-файл на выходе мы получаем rss ранжированный по каким-то параметрам.
http://pipes.yahoo.com/myblograting/gosblogi5 — пайп, ранжирующий записи за последние 5 дней по следующей формуле: КолСсылок*4 + КолКомментариев/3.
Одно из неудобств пайпов — отсутствие нумерации записей (как в настоящем рейтинге :)), поэтому можно просто воспользоваться пайпом, который нумерует заголовки записей (пайп не мой, я его себе скопировал и немного изменил). На вход подаётся RSS, который выходит из пайпа указанного выше. http://pipes.yahoo.com/myblograting/numbering
Недостатки
— технология не шустрая, случаются сбои. Данные получаются и считаются динамически.
— Яндекс не всегда по запросам выдаёт актуальную информацию (параметры, по которым проводиться ранжирование)
— Всё зависит от Яндекса :)
Подробнее про API Яндекса поиска по блогам. Для определения своего рейтинга Яндекс предлагает использовать запросы, которые либо просто получают все сообщения с параметрами (например, http://blogs.yandex.ru/entriesapi?p=2), либо получить сообщения с параметрами по определённому текстовому запросу (например, http://blogs.yandex.ru/search.rss?text=счастье&filterlinks=2). Т.е. нельзя просто взять и запросить записи определённого пользователя с проставленными ранжирующими параметрами. Можно получить все записи вообще, а потом из них выделить записи определённого пользователя, но это не совсем мне подходит. Поэтому я в своих пайпах использовал несколько сомнительный запрос вида http://blogs.yandex.ru/search.rss?journal=http://blogs.mail.ru/mail/zhirinovskyvv/&ft=blog,personal,community
т.е. получить записи из определённого блога.
Почему этот запрос я считаю (но использую) сомнительным? Потому что в API рейтинга блогов используется другая конструкция
http://blogs.yandex.ru/search.rss?text=счастье&filterlinks=2 и в описании выдачи на мой запрос в справочнике Яндекса не сказано, что возвращаются параметры количества комментариев, количества визитов и.д. Однако, можно заметить, что для некоторых записей они возвращаются. Т.е. показатели ранжирования считаются не для всех записей. Думаю, зависит от популярности блога или сообщения, которую Яндекс как-то определяет. Заметил так-же, что сообщения из livejournal лучше помечаются показателями, нежели другие основные платформы (например, блоги mail.ru). Например, сообщения за последнюю неделю из блога Жириновского вообще не имеет показателей по моему запросу (и он в мой рейтинг не попадает :). Ещё имеются трудности с определением комментариев для блогов с премодерацией комментариев, что среди топ-руководителей не редкость (например, блог Медведева). Так что в моём рейтинге таким сообщениям приходится «выезжать» на других показателях, в частности на количестве ссылок.
Другая проблема — даты. Яндекс даёт возможность в API указывать интервал дат, между которыми нужно получить сообщения, но при совмещении параметров journal (указывает журнал из которого брать сообщения), ft (указывает область поиска сообщений) и параметров интервала дат, сообщения выдаются только для ~10 последних дней от текущей даты. Если задавать другой интервал дат при таких-же параметрах, то выдаётся пустой список.
Примеры
Обычный текстовый запрос с интервалом по дате: http://blogs.yandex.ru/search.rss?text=%D1%81%D1%87%D0%B0%D1%81%D1%82%D1%8C%D0%B5&from_day=06&from_month=1& from_year=2009&to_day=12&to_month=4&to_year=2009&ft=blog,personal (возвращает записи по любым датам)
Запрос по определённому блогу с интервалом по дате месячной давности: http://blogs.yandex.ru/search.rss?journal=drugoi.livejournal.com& from_day=06&from_month=10&from_year=2009&to_day=12&to_month=11&to_year=2009&ft=blog,personal (нет записей)
Запрос по определённому блогу с интервалом по дате «свежей» давности: http://blogs.yandex.ru/search.rss?journal=drugoi.livejournal.com& from_day=06&from_month=10&from_year=2009&to_day=12&to_month=12&to_year=2009&ft=blog,personal&numdoc=100 (сообщения заканчиваются на 26 ноября).
Отсюда следует ещё одна небольшая особенность — наш рейтинг можно составить только для относительно недавних сообщений. Рейтинг популярных сообщений за месяц по нашему алгоритму не сделать.
Будем надеяться, Яндекс и дальше будет развивать своё API для определения показателей ранжирования.
Преимущества
— не нужен свой хостинг, расчёты далает сервис Yahoo Pipes. Нагрузка только на хостинг opml-файла, API Яндекса и Yahoo Pipes.
— вывод в RSS, на который вы можете подписаться. Если записей в ридере очень много, то, бывает, разумнее воспользоваться саморисованным пайпом для определения записей достойных чтения, чтобы не просматривать все.
— возможно реализовать рейтинг записей тематических блогов. Для этого нужно собрать большую коллекцию блогов и иногда её актуализировать.
Ну и для примера, можете посмотреть простую реализацию на основе API Яндекса и Yahoo Pipes — рейтинг сообщений из блогов чиновников РФ — gosblogi.ru
P.S. Выскажу свои идеи какой должен быть сервис рейтинга блогов
— выборка блогов в свои закладки в рамках сервиса из общего рейтинга записей
— импорт блогов из закладок в opml-файл
— рейтинг записей из блогов в закладках
— расшаривание своих рейтингов другим пользователям (большое поле для тематических рейтингов).
Пока, на сколько я знаю, ни один сервис подобного функционала не предоставляет.
_________
Текст подготовлен в ХабраРедакторе



комментарии (3)