В связи с обновлениями twitter API с версии 1.0 до версии 1.1 перестали работать запросы не получение RSS ленты в старом стиле, вроде:
Это связано с окончанием поддержки twitter-ом XML, RSS и Atom стандартов вывода. Разработчики прокомментировали их мотивы при принятии подобного решения тезисом о том, что доля подобных запросов мала и может быть безболезненно для пользователей отключена.
Но я склонен предполагать, что найдутся пользователи, которые бы хотели, все же, видеть таковой функционал. Для этой группы и будет вестись повествование ниже.
Существует масса решений этой проблемы. Наверное, наиболее адекватное — это создание виджета в своем аккаунте твиттера с последующей пересылкой данных в google apps script для последующего формирования самой RSS ленты. Это решение описано здесь.
Но ведь не у всех есть свой твиттер-аккаунт, а среди тех, у кого его нет, вполне могут найтись и те, кто хочет просто читать чужие твиты.
Строго говоря, то решение, которое я предложу ниже, есть не совсем чтение чьего-то твиттера, это просто поиск всех упоминаний имени пользователя.
Для реализации такового «чтения» без авторизации существует готовый скрипт, написанный на perl, код которого доступен по этой ссылке. Он успешно взаимодействует с twitter API 1.1 и выдает результаты поиска в удобной RSS форме. Для того, чтобы им воспользоваться можно скопировать его на какой-либо сервер, принадлежащий вам и поддерживающий perl в качестве языка исполнения сценариев страниц, либо воспользоваться уже существующей инкарнацией, расположенной по этому адресу.
Но он наделен одним существенным недостатком:
Здесь поля «title» и «description» кодируются в спецсимволы, соответствующие unicode таблице. С англоязычными твитами проблем возникать не будет, а вот с русскоязычными могут. Если Ваш RSS клиент не поддерживает расшифровку таких спецсимволов, твиты будут нечитаемы.
Если Вы выбрали установку этого скрипта на свой сервер, Вам будет достаточно просто поправить одну строку, в противном же случае путей решения этой проблемы существует два: на удаленной стороне и на стороне локального ПО.
Я для чтения RSS использую Feed Notifier. У него обработка спецсимволов отсутствует. Поддержка их обработки может быть добавлена самостоятельно, т.к. это ПО, большей частью, написано на python и исходные коды для нее доступны по этомуадресу.
Но в моем случае было принято решение следовать по пути полной обработки на стороне серверов.
Не мудрствуя лукаво, был написан скрипт для google apps script, который и выполняет задачу преобразования кодированных спецсимволов. Приведу его код:
В этом скрипте стоит только заменить username на имя пользователя, обновления которого Вы хотели бы отслеживать.
Вопрос создания и публикации скрипта не сложен, но есть свои особенности. Во-первых после копирования кода скрипта в заново созданный документ, его надо сохранить. Во-вторых обязательно надо его прогнать, чтобы скрипт запросил разрешения на свое исполнение, которые мы в последствии ему и дадим (кнопка «Run»). В-третьих его надо опубликовать для запуска из любого источника, в т.ч. анонимного.
Как результат, мы будем иметь ссылку вида:
Отлично, теперь мы имеет RSS ленту, где все спецсимволы заменены их соответствующими юникодовыми аналогами.
Для тех, чей RSS клиент поддерживает HTTPS на этом статья заканчивается. Feed Notifier не поддерживает HTTPS. В принципе, проблема отсутствия поддержки HTTPS может быть решена внесением соответствующих изменений в исходный код. Но и здесь я пошел по пути server-side.
Поскольку по этому каналу не передается никакой чувствительной информации, HTTPS траффик может вполне быть перенаправлен в обычный HTTP канал. Для этого я использовал банальный веб-прокси. Вот этому веб-прокси можно передать адрес для перехода в качестве GET параметра, так что выбрал я именно его.
Таким образом, в результате всех этих манипуляций вполне достаточно скормить RSS клиенту ссылку вида:
чтобы получить вполне работоспособную версию RSS ленты обновлений twitter.
Если хочется читать более чем одного человека, вполне достаточно в тот же документ добавить еще один скрипт того же содержания, но с другим username.
Может быть метод кажется излишне громоздким, зато он не требует никаких изменений на стороне клиента и позволяет в произвольном порядке группировать ленты. Плюс он не требует наличия twitter аккаунта.
Спасибо за внимание!
Это связано с окончанием поддержки twitter-ом XML, RSS и Atom стандартов вывода. Разработчики прокомментировали их мотивы при принятии подобного решения тезисом о том, что доля подобных запросов мала и может быть безболезненно для пользователей отключена.
Но я склонен предполагать, что найдутся пользователи, которые бы хотели, все же, видеть таковой функционал. Для этой группы и будет вестись повествование ниже.
Это уже было в «Симпсонах»
Существует масса решений этой проблемы. Наверное, наиболее адекватное — это создание виджета в своем аккаунте твиттера с последующей пересылкой данных в google apps script для последующего формирования самой RSS ленты. Это решение описано здесь.
Но ведь не у всех есть свой твиттер-аккаунт, а среди тех, у кого его нет, вполне могут найтись и те, кто хочет просто читать чужие твиты.
Строго говоря, то решение, которое я предложу ниже, есть не совсем чтение чьего-то твиттера, это просто поиск всех упоминаний имени пользователя.
Начнем
Для реализации такового «чтения» без авторизации существует готовый скрипт, написанный на perl, код которого доступен по этой ссылке. Он успешно взаимодействует с twitter API 1.1 и выдает результаты поиска в удобной RSS форме. Для того, чтобы им воспользоваться можно скопировать его на какой-либо сервер, принадлежащий вам и поддерживающий perl в качестве языка исполнения сценариев страниц, либо воспользоваться уже существующей инкарнацией, расположенной по этому адресу.
Но он наделен одним существенным недостатком:
$body = "<![CDATA[" . HTML::Entities::encode_numeric($body) . "]]>";
Здесь поля «title» и «description» кодируются в спецсимволы, соответствующие unicode таблице. С англоязычными твитами проблем возникать не будет, а вот с русскоязычными могут. Если Ваш RSS клиент не поддерживает расшифровку таких спецсимволов, твиты будут нечитаемы.
Если Вы выбрали установку этого скрипта на свой сервер, Вам будет достаточно просто поправить одну строку, в противном же случае путей решения этой проблемы существует два: на удаленной стороне и на стороне локального ПО.
Я для чтения RSS использую Feed Notifier. У него обработка спецсимволов отсутствует. Поддержка их обработки может быть добавлена самостоятельно, т.к. это ПО, большей частью, написано на python и исходные коды для нее доступны по этомуадресу.
Но в моем случае было принято решение следовать по пути полной обработки на стороне серверов.
Не мудрствуя лукаво, был написан скрипт для google apps script, который и выполняет задачу преобразования кодированных спецсимволов. Приведу его код:
function doGet() {
var response = UrlFetchApp.fetch("http://twitrss.me/twitter_user_to_rss/?user=username&fetch=Fetch+RSS").getContentText("Windows-1251");
var decode = XmlService.parse(response);
var rootElement = decode.getRootElement();
var channel = rootElement.getChildren("channel");
var items = channel[0].getChildren("item");
for (var i = 0; i < items.length; i++) {
var title = items[i].getChildren("title");
var description = items[i].getChildren("description");
var decode_title = new XML('<d>' + title[0].getText() + '</d>');
var decode_description = new XML('<d>' + description[0].getText() + '</d>');
title[0].setText(decode_title.toString());
description[0].setText(decode_description.toString());
}
var output = XmlService.getPrettyFormat().format(decode);
return ContentService.createTextOutput(output);
}
В этом скрипте стоит только заменить username на имя пользователя, обновления которого Вы хотели бы отслеживать.
Вопрос создания и публикации скрипта не сложен, но есть свои особенности. Во-первых после копирования кода скрипта в заново созданный документ, его надо сохранить. Во-вторых обязательно надо его прогнать, чтобы скрипт запросил разрешения на свое исполнение, которые мы в последствии ему и дадим (кнопка «Run»). В-третьих его надо опубликовать для запуска из любого источника, в т.ч. анонимного.
Как результат, мы будем иметь ссылку вида:
script.google.com/macros/s/многобуквенный_идентификатор_скрипта/execОтлично, теперь мы имеет RSS ленту, где все спецсимволы заменены их соответствующими юникодовыми аналогами.
Для тех, чей RSS клиент поддерживает HTTPS на этом статья заканчивается. Feed Notifier не поддерживает HTTPS. В принципе, проблема отсутствия поддержки HTTPS может быть решена внесением соответствующих изменений в исходный код. Но и здесь я пошел по пути server-side.
Поскольку по этому каналу не передается никакой чувствительной информации, HTTPS траффик может вполне быть перенаправлен в обычный HTTP канал. Для этого я использовал банальный веб-прокси. Вот этому веб-прокси можно передать адрес для перехода в качестве GET параметра, так что выбрал я именно его.
Таким образом, в результате всех этих манипуляций вполне достаточно скормить RSS клиенту ссылку вида:
www.webproxy.net/view?q=https://script.google.com/macros/s/многобуквенный_идентификатор_скрипта/execчтобы получить вполне работоспособную версию RSS ленты обновлений twitter.
Если хочется читать более чем одного человека, вполне достаточно в тот же документ добавить еще один скрипт того же содержания, но с другим username.
Может быть метод кажется излишне громоздким, зато он не требует никаких изменений на стороне клиента и позволяет в произвольном порядке группировать ленты. Плюс он не требует наличия twitter аккаунта.
Спасибо за внимание!