Видимо в Сети в настоящее время практически не осталось standalone-блогов, которые не использовали бы сервис FeedBurner для ведения статистики по подписчикам блога.
Действительно, этот сервис наилучшим образом походит для оценки и анализа RSS-ленты блога, просмотра статистики и т.д. Кроме того большинство RSS-лент и каталогов блогов сегодня просят при регистрации предоставлять адрес RSS-канала именно в FeedBurner’е.
Вы, наверное, уже замечали и не раз, что некоторые сервисы, например тот же Блогун, каким-то образом умудряются «выдернуть» из адреса Вашей RSS-ленты количество подписчиков? Сегодня мы с Вами и разберемся каким образом это происходит.
Чем хорош Google — так это тем, что практически на каждый из своих сервисов он предоставляет в распоряжение разработчиков API. Не исключение и FeedBurner. Ознакомиться с документацией по Awarness API можно здесь. Ну, а если есть API, то решение вопроса становиться до безобразия простым: достаточно подобрать запрос из API, отправить его Googl’у, получить ответ и проанализировать его.
На мой взгляд, для определения количества подписчиков в FeedBurner наиболее подходящим является запрос вида:
https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=feeduri
где feeduri — это идентификатор Вашего фида. Для нашего блога, например, uri=myDelphi.
В ответном документе содержится следующая информация:
- date — дата формирования данных
- circulation — количество подписчиков
- hits — количество запросов фида за последние 24 часа
- reach — охват
Теперь остается добраться до узла entry и вытащить из него значения атрибутов. Продемонстрируем это всё на примере нашего блога.
Открываем Delphi, создаем новый проект и размещаем на главной форме элементы как показано на рисунке:
Всю работу с документом будем осуществлять через компонент XMLDocument. В принципе, можно было воспользоваться и RegExp, но это ни к чему раз есть готовый компонент.
Итак, в качестве входных данных у нас будет адрес RSS-ленты, т.к. именно в этом адресе содержится uri. Процесс определения uri по адресу ленты может быть таким:
- определяем последнее вхождение подстроки «/» в строку адреса
- копирование uri
Процедура определения последнего вхождения подстроки в строку может быть вот такой:
function PosR2L(const FindS, SrcS: string): Integer; function InvertS(const S: string): string; var i, Len: Integer; begin Len := Length(S); SetLength(Result, Len); for i := 1 to Len do Result[i] := S[Len - i + 1]; end; var ps: Integer; begin ps := Pos(InvertS(FindS), InvertS(SrcS)); if ps <> 0 then Result := Length(SrcS) - Length(FindS) - ps + 2 else Result := 0; end;
Далее, копируем uri, отправляем запрос и анализируем ответ:
procedure TForm2.Button1Click(Sender: TObject); var i:integer; uri: string; date: TDate; count:integer; rich: integer; hits: integer; Node:IDOMNodeList; begin i:=PosR2L('/', Edit1.Text); uri:=copy(Edit1.Text,i+1,length(Edit1.Text)-i); XMLDocument1.LoadFromFile('https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri='+uri); Node:=XMLDocument1.DOMDocument.getElementsByTagName('entry')as IDOMNodeList; date:=VarToDateTime(Node.item[0].attributes.item[0].nodeValue); count:=StrToInt(Node.item[0].attributes.item[1].nodeValue); rich:=StrToInt(Node.item[0].attributes.item[3].nodeValue); hits:=StrToInt(Node.item[0].attributes.item[2].nodeValue); //выводим данные на форму label10.Caption:=DateToStr(date); label6.Caption:=IntToStr(Count); label7.Caption:=IntToStr(hits); label8.Caption:=IntToStr(rich); end;
Вообще, можно было ограничится одной переменной — Node:IDOMNodeList, но для наглядности я показал как можно получать все данные из запроса для последующего их анализа.
Теперь можете скомпилировать Ваше приложение и проверить его работу. Неправда ли все просто?) Можете поизучать API и научиться, например, строить графики изменения подписчиков за определенные период времени или вообще — создать свое собственное приложение по анализу подписчиков — всё в Ваших руках. За основу можно принять представленный Выше пример работы с XML документом. А мы пока ставим ещё одну «галочку» в списке «Delphi в Web«

Спасибо. Нечаянно наткнулся, но заинтересовало!
[…] в одном из постов я рассматривал вопрос о том, как получить количество […]