Отличная штука Tiny Tiny RSS.

Собирает из сети обновления сайтов, которые поддерживают RSS или Atom.

Нюанс: TTRSS надо ставить на какой-нибудь сервер, в моём случае он крутится на мощностях хостинга, там же где и сайт.

Или ставьте на свой собственный сервак. Некоторые умельцы даже ставят на роутер.

А уже из браузера подключаемся к нему и читаем ленты. Имеется и клиент для андроида.

1. Клонируем репозиторий себе в домашнюю папку на локальную машину

git clone https://tt-rss.org/git/tt-rss.git tt-rss

2. Копируем её на хостинг в корень сайта

3. Создаём базу данных SQL через админку хостера, например

4. Запускаем инсталлятор TT-RSS из браузера

http://your.site.com/tt-rss/install/

там всё понятно.

5. Заходим в установленный TT-RSS username: admin, password: password

http://your.site.com/tt-rss/

и сразу меняем пароль админа и заводим нового пользователя без админских прав, перелогиниваемся.

6. Надо, чтобы список TTRSS обновлялся когда открыт в браузере. Иногда это единственный путь. Но андроид-клиенты (или любые другие, подключающиеся через API) не смогут обновлять ленты :( 

Открываем файл config.php и значение SIMPLE_UPDATE_MODE устанавливаем в true.

!!! Периодическое обновление лент автоматом: настраиваем в админке хостера запуск скрипта обновления через Cron с дополнительными параметрами, например каждые 15 минут

*/15 * * * * /usr/bin/php /path/to/tt-rss/update.php --feeds --quiet

7. Дефолтную тему можно заменить на более лёгкую.

Разворачиваем архив в папку /tt-rss/themes и в настройках TT-RSS через GUI выбираем её, сохраняем. Правда, у меня она не хотела подхватываться. Тогда я переименовал night.css в night.css.bak, а feedly.css в night.css (чтоб дефолтную не трогать).

Радуемся, пьём коньяк.

------------------------------------------------------------------------

Нижеследующий текст для меня уже не актуален. Но пусть лежит на память :)

Теперь надо через Cron настроить автообновление лент через определённый промежуток времени. Спасибо источнику на Хабре.

Создаём скрипт update_with_params.php

#!/usr/bin/env php
<?php
ob_implicit_flush(true);
echo "PHP version: " . phpversion() . PHP_EOL;
echo "Max execution time: ".ini_get("max_execution_time")." seconds" . PHP_EOL;

define( 'UPDATE_IMPLICIT_PARAMS', 'feeds' );
require_once "update.php";
?>

и кладём его в папку tt-rss.
Затем добавляем в файл update.php после строки

$options = getopt("", $longopts);

вот этот код

if (defined('UPDATE_IMPLICIT_PARAMS')) {
$impl_params = array_map("trim", explode(",", UPDATE_IMPLICIT_PARAMS));

if( !is_array($options) )
$options=array();

$options = array_merge( $options, array_fill_keys($impl_params, ''));
}

У меня случились грабли с версиями PHP, вот так лечится:
создаём ещё один скрипт update_external.php с текстом (заменить mysite.ru/tt-rss на своё) и кладём в ту же папку tt-rss

#!/usr/bin/env php
<?php
echo "PHP version: " . phpversion() . PHP_EOL;
echo "Max execution time: ".ini_get("max_execution_time")." seconds" . PHP_EOL;

$url = "http://mysite.ru/tt-rss/update_with_params.php";
$ch = curl_init($url);

try
{
if ( $ch === FALSE )
throw new Exception('failed to initialize');
$startTime = microtime(true);
$result = curl_exec($ch);
echo 'Execution time '. (microtime(true) - $startTime) . ' sec' . PHP_EOL;

if (FALSE === $result )
throw new Exception('Curl error ' . curl_errno($ch) . ' , ' . curl_error($ch) );

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE );

if ( $code != 200 )
throw new Exception( "Page returned error code $code" );

}
catch(Exception $e)
{
trigger_error( sprintf('ERROR #%d: %s\n', $e->getCode(), $e->getMessage()), E_USER_ERROR );
}

curl_close($ch);
?>

Далее через админку хостера настраиваем cron указав ему на скрипт update_external.php