Как использовать опцию подписки?

Я начал сейчас с Pubsubhubbub (и все о вещах в реальном времени), но у меня проблемы с опцией подписчика.

Я пытаюсь разработать веб-приложение на PHP, чтобы:

  1. Подпишитесь на RSS (ранее опубликованный) на хаб (http://pubsubhubbub.appspot.com/);
  2. Читать уведомления (обновления) из Хаба по подписке; безуспешно !!! :(

Я подтверждаю, что существует библиотека в php для подписчика (в Git) , но использование этой библиотеки не может заставить работу подписки (получить ошибку 409!).

Как я могу это сделать?


person ddluis    schedule 15.01.2010    source источник
comment
Ошибка 409 - это конфликт и - в pubsubhubbub - возникает, когда проверка подписки не проходит.   -  person Adam Hopkinson    schedule 15.01.2010
comment
Хорошо, я открыл награду, но я не могу редактировать вопрос @ddluis, поэтому я собираюсь спросить здесь. А как именно это реализовать - класс github.com/lxbarth/PuSHSubscriber? Не понимаю эта часть: Интеграция с хост-приложениями   -  person    schedule 06.10.2010


Ответы (3)


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

Приложение подписчика должно делать 2 вещи:

  • Подтвердите подписку: хаб проверит намерение подписчика. Это запрос GET
  • Обработка входящих пингов. Это запрос POST.

Итак, начнем :

  1. Разместите скрипт где-нибудь в сети (он должен быть доступен из-за брандмауэра), который должен быть настроен для обработки запросов GET от концентратора. Убедитесь, что он только отражает параметр hub.challenge, который он получает в теле ответа, и возвращает 200.
  2. Отправьте из командной строки следующее: curl -X POST http://pubsubhubbub.appspot.com/ -d'hub.mode=subscribe' -d'hub.verify=sync' -d'hub.topic=http://the.feed.url' -d'hub.callback=http://the.script.url' -D-
  3. Вы должны увидеть входящий запрос проверки в скрипте. В идеале (если вы выполнили шаг 1, он должен повторить вызов hub.challenge и вернуть 200.

Если все в порядке, отправленный вами запрос curl должен сообщить вам, что концентратор вернул 204. Если вы получите что-нибудь еще, проверьте текст ответа, он укажет вам, что пошло не так.

Позже...

  1. Ваш скрипт получит запрос POST. Это уведомление о новом содержании!
  2. Разберите необработанное тело (XML) этого запроса POST, оно содержит фид, только с новыми записями.
  3. Делайте все, что нужно, с проанализированным контентом (сохраняйте в базе данных и т. Д.).

Надеюсь, это поможет. Вы можете также использовать этот инструмент для отладки подписки, если вам нужна помощь.

person Julien Genestoux    schedule 17.10.2010
comment
Я не получаю часть 1., которая должна быть связана с обработкой запросов GET от хаба. Есть ли здесь что-нибудь, что мне нужно сделать с PHP? И как проанализировать необработанное тело (XML) этого запроса POST, он содержит канал, только с новыми записями. - с simpleXML? - person ; 20.10.2010
comment
Что ж, концентратор выполнит HTTP-запрос GET для вашего сценария, поэтому этот сценарий должен быть доступен из Интернета. - person Julien Genestoux; 20.10.2010
comment
И да, вы можете использовать simpleXML для анализа тела запроса POST. - person Julien Genestoux; 20.10.2010

Это старый вопрос, и связанная с ним библиотека PHP ddluis имеет много недостатков.

Рекомендуемый подписчик PHP в вики Google Code - это подписчик PuSHS:

http://github.com/lxbarth/PuSHSubscriber/

ОБНОВЛЕНИЕ:

Я форкнул PuSHSubscriber: http://github.com/bobdia/PuSHSubscriber

Я внес несколько несовместимых изменений с оригиналом. Простую реализацию можно найти в каталоге / example. Это не предназначено для реального использования, только для демонстрационных целей. Надеюсь, вы сочтете это полезным.

person bobdiaes    schedule 05.10.2010
comment
И почему бы не pubsubhubbub.googlecode.com/svn/trunk/subscriber_clients/phpp /? Так проще! - person ; 06.10.2010
comment
А как именно реализовать вышеупомянутый класс? Я не понимаю этой части: Интеграция с хост-приложениями - person ; 06.10.2010
comment
Класс php, с которым связан OP, кажется более простым, потому что на самом деле он мало что делает. PuSHSubscriber довольно прост и делает все, что вам нужно, кроме хранения получаемых уведомлений. Я решил сделать с ним пример реализации, поэтому зайдите через день или два, и я опубликую ссылку на то, что всем будет легко понять. - person bobdiaes; 06.10.2010
comment
Итак, что именно должны реализовать SubscriptionInterface и EnvironmentInterface? - person ; 09.10.2010
comment
Что случилось @bobdiaes? Каковы ваши успехи? - person ; 10.10.2010
comment
Я нашел интерфейсы - они в конце скрипта! - person ; 11.10.2010
comment
Я обновил свой ответ ссылками на пример реализации. Наслаждаться! - person bobdiaes; 19.10.2010
comment
Большое спасибо, @bobdiaes! Я попробую сегодня вечером! - person ; 20.10.2010
comment
Хм, в notifications.log ничего не записывается. Я использую плагин PubSubHubbub для wordpress, и я использую свой собственный блог, чтобы попробовать это, но это не работает. В system.log: Положительный ответ на запрос подписки - person ; 22.10.2010

Некоторый код, который может быть полезен, с хорошей документацией:

Пример агрегатора кормов:

person takeshin    schedule 17.10.2010