---
title: "RSS Full Text"
date: 2025-07-01
tags: ["service"]
icon: "rss.svg"
short_desc: "Creates RSS full text feeds."
---
[fivefilters full-text-rss](https://www.fivefilters.org/full-text-rss/)
is Full-Text RSS service. Free open source RSS feeds usually provide
the summary or limited lines of URL contents. There is a way to see
the entire web page with text-based web browser such as lynx, w3m, and so on.
However, I want to do everything in [newsboat](https://github.com/newsboat/newsboat).
With this, you can retrieve the full-text of individual articles or
complete full-text RSS feeds. It enriches third-party RSS feeds with
full text articles.
## Installation
### Setting Up and Configuring
Check PHP version (e.g., php7.4-fpm). Adjust in later steps accordingly.
```sh
sudo apt update
sudo apt install php5.6 php5.6-fpm php5.6-tidy nginx git unzip certbot python3-certbot-nginx
```
Download Full-Text RSS
```sh
cd /var/www
sudo git clone https://bitbucket.org/fivefilters/full-text-rss.git ftr
cd ftr
sudo git reset --hard 384d52fd83361ffd6e7f28bd39b322970a015a28
```
Download Full-Text-RSS site config
```sh
sudo git clone https://github.com/fivefilters/ftr-site-config
cp -f ftr-site-config/* site_config/standard
```
Set permissions:
```sh
mkdir -p /var/www/ftr/cache/rss
sudo chown -R www-data:www-data /var/www/ftr
sudo chmod -R 777 /var/www/ftr/cache /var/www/ftr/site_config
```
Create php.ini:
```sh
mkdir -p /etc/php/5.6/fpm
sed -Ei "s/^(memory_limit).*/\1 = 256M/" /etc/php/5.6/fpm/php.ini
```
### Configuring nginx & cerbot
Create Nginx Config with Clean /feed + Rate Limiting
Create a new site config:
```sh
sudo vim /etc/nginx/sites-available/ftr
```
Paste this (adjust php7.4-fpm.sock if needed):
```nginx
# Rate limiting zone: 10 req/min per IP
limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=10r/m;
server {
listen 80;
listen [::]:80;
root /var/www/ftr;
server_name ftr.thesiah.xyz; # Change to your domain
index index.html index.htm index.nginx-debian.html index.php;
location / {
try_files $uri $uri/ =404;
}
# Rewrite clean URL /feed?url=... to makefulltextfeed.php
location /feed {
rewrite ^/feed$ /makefulltextfeed.php last;
limit_req zone=ratelimit burst=5;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
```
Enable nginx on the site:
```sh
sudo ln -s /etc/nginx/sites-available/ftr /etc/nginx/sites-enabled/
```
Secure with HTTPS (Certbot)
```sh
sudo certbot --nginx -d ftr.thesiah.xyz
```
Restart nginx
```sh
sudo systemctl reload nginx
```
### Custom Config
Add custom_config.php:
Save to: /var/www/ftr/custom_config.php
```php
enabled = true;
$options->debug = true;
$options->default_entries = 200;
$options->max_entries = 1000;
$options->content = 'user';
$options->summary = 'user';
$options->rewrite_relative_urls = true;
$options->exclude_items_on_fail = 'user';
$options->singlepage = true;
$options->multipage = true;
$options->caching = true;
$options->cache_time = 120;
$options->cache_dir = dirname(__FILE__).'/cache';
$options->message_to_prepend = '';
$options->message_to_append = '';
$options->error_message = '[unable to retrieve full-text content]';
$options->keep_enclosures = true;
$options->detect_language = 'user';
$options->user_submitted_config = false;
$options->remove_native_ads = false;
$options->admin_credentials = array('username'=>'admin', 'password'=>getenv('FTR_ADMIN_PASSWORD'));
$options->allowed_urls = array();
$options->blocked_urls = array();
$options->key_required = false;
$options->api_keys = array();
$options->default_entries_with_key = 5;
$options->max_entries_with_key = 10;
$options->xss_filter = 'user';
$options->favour_feed_titles = 'user';
$options->allowed_parsers = array('libxml', 'html5php');
$options->allow_parser_override = true;
$options->cors = false;
$options->proxy_servers = array();
$options->proxy = true;
$options->allow_proxy_override = true;
$options->apc = true;
$options->smart_cache = true;
$options->fingerprints = array(
' array('hostname'=>'fingerprint.posterous.com', 'head'=>true),
' array('hostname'=>'fingerprint.blogspot.com', 'head'=>true),
' array('hostname'=>'fingerprint.blogspot.com', 'head'=>true),
''admin', 'password'=>'');
}
} elseif ($_env === 'true' || $_env === 'false') {
$_val = ($_env === 'true');
} elseif (is_numeric($_env)) {
$_val = (int)$_env;
$_val = $_env;
}
}
}
unset($_key, $_val, $_env);
}
```
Replace deprecated code manually from:
```php
while (list($name, $value) = each($directives)) {
```
to:
```php
foreach ($directives as $name => $value) {
```
Or run this command:
```sh
sed -i 's/while *(list(\$name, *\$value) *= *each(\$directives)) *{/foreach (\$directives as \$name => \$value) {/' /var/www/ftr/libraries/Zend/Cache/Backend.php
```
Restart php5.6-fpm:
```sh
sudo systemctl restart php5.6-fpm
```
### Local host
Visit http://localhost:80 for the integrated web UI
{{
}}
Article extraction: http://localhost/extract.php?url=[url]
Feed conversion: http://localhost/makefulltextfeed.php?url=[url]