Update README.md
This commit is contained in:
246
README.md
246
README.md
@ -1,2 +1,246 @@
|
||||
# RSS-To-Telegram-Bot
|
||||
# RSS to Telegram Bot
|
||||
|
||||
A simple PHP script that monitors RSS feeds and automatically sends new articles to Telegram channels. Perfect for news aggregation, blog updates, or any RSS-based content distribution.
|
||||
|
||||
## What it does
|
||||
|
||||
- 📡 Monitors multiple RSS feeds simultaneously
|
||||
- 🚫 Prevents duplicates automatically
|
||||
- ⚡ Supports Telegram Instant View
|
||||
- 🎨 HTML formatting with rich text
|
||||
- 📝 Comprehensive logging system
|
||||
- 💾 Persists state between runs
|
||||
- ⏰ Cron job compatible
|
||||
- 🛠️ Error handling and automatic recovery
|
||||
|
||||
## How it works
|
||||
|
||||
### Tracking system
|
||||
|
||||
The script uses a simple but effective system to avoid duplicate messages:
|
||||
|
||||
1. **State file (`rss_state.json`)**: Stores info about processed articles for each feed and date
|
||||
2. **Daily reset**: Automatically cleans old data, keeping only current day's records
|
||||
3. **URL-based detection**: Uses article links to identify duplicates
|
||||
4. **Per-feed tracking**: Each RSS feed maintains its own state
|
||||
|
||||
### Workflow
|
||||
|
||||
```
|
||||
RSS Feed → Parse XML → Filter by date → Check duplicates → Format message → Send to Telegram
|
||||
```
|
||||
|
||||
1. **RSS parsing**: Uses SimpleXML to read feeds
|
||||
2. **Date filtering**: Only processes today's articles (configurable)
|
||||
3. **Anti-duplicates**: Checks against already sent URLs
|
||||
4. **Formatting**: Creates HTML messages with source attribution
|
||||
5. **Delivery**: Sends formatted messages to the channel
|
||||
|
||||
## Installation
|
||||
|
||||
1. **Clone the repository**
|
||||
```bash
|
||||
git clone https://github.com/yourusername/rss-to-telegram-bot.git
|
||||
cd rss-to-telegram-bot
|
||||
```
|
||||
|
||||
2. **Create a Telegram bot**
|
||||
- Message [@BotFather](https://t.me/BotFather) on Telegram
|
||||
- Use `/newbot` to create a new bot
|
||||
- Copy the API token
|
||||
|
||||
3. **Get channel ID**
|
||||
- Add [@userinfobot](https://t.me/userinfobot) to your channel
|
||||
- Forward a message from the channel to @userinfobot
|
||||
- Copy the channel ID (starts with `-100`)
|
||||
|
||||
4. **Configure the script**
|
||||
Edit the configuration section:
|
||||
```php
|
||||
$apiToken = "YOUR_BOT_TOKEN_HERE";
|
||||
$channelId = "YOUR_CHANNEL_ID";
|
||||
$rssFeeds = [
|
||||
["https://example.com/feed/", ""],
|
||||
["https://another-feed.com/rss/", "INSTANT_VIEW_HASH"]
|
||||
];
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Basic settings
|
||||
|
||||
- `$apiToken`: Your bot token from BotFather
|
||||
- `$channelId`: Target Telegram channel ID (must start with `-100`)
|
||||
- `$rssFeeds`: Array of RSS feeds to monitor
|
||||
|
||||
### RSS feed format
|
||||
|
||||
```php
|
||||
$rssFeeds = [
|
||||
["RSS_URL", "INSTANT_VIEW_HASH"],
|
||||
["https://example.com/feed/", ""], // Without instant view
|
||||
["https://news.site.com/rss/", "abc123def456"] // With instant view
|
||||
];
|
||||
```
|
||||
|
||||
### Instant View (optional)
|
||||
|
||||
Telegram's Instant View provides a clean, fast-loading version of articles:
|
||||
|
||||
1. Create an Instant View template at [instantview.telegram.org](https://instantview.telegram.org)
|
||||
2. Get the template hash from the URL
|
||||
3. Add it as the second parameter in the RSS feed array
|
||||
|
||||
## Automation
|
||||
|
||||
### Cron job (recommended)
|
||||
|
||||
Add to your crontab to run every 15 minutes:
|
||||
|
||||
```bash
|
||||
crontab -e
|
||||
```
|
||||
|
||||
Add this line:
|
||||
```
|
||||
*/15 * * * * /usr/bin/php /path/to/rss-to-telegram-bot.php >/dev/null 2>&1
|
||||
```
|
||||
|
||||
### Other scheduling examples
|
||||
|
||||
```bash
|
||||
# Every 5 minutes
|
||||
*/5 * * * * /usr/bin/php /path/to/script.php
|
||||
|
||||
# Every hour
|
||||
0 * * * * /usr/bin/php /path/to/script.php
|
||||
|
||||
# Twice daily (9 AM and 6 PM)
|
||||
0 9,18 * * * /usr/bin/php /path/to/script.php
|
||||
```
|
||||
|
||||
## File structure
|
||||
|
||||
```
|
||||
rss-to-telegram-bot/
|
||||
├── rss-to-telegram-bot.php # Main script
|
||||
├── rss_state.json # Generated: tracks processed articles
|
||||
├── rss_log.txt # Generated: execution logs
|
||||
├── LICENSE # GPL v3 license
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
## Generated files
|
||||
|
||||
### State file (`rss_state.json`)
|
||||
Tracks processed articles to prevent duplicates:
|
||||
```json
|
||||
{
|
||||
"https://example.com/feed/": {
|
||||
"2024-01-15": [
|
||||
"https://example.com/article1",
|
||||
"https://example.com/article2"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Log file (`rss_log.txt`)
|
||||
Contains execution logs with timestamps:
|
||||
```
|
||||
[2024-01-15 10:30:01] Script started for date: 2024-01-15
|
||||
[2024-01-15 10:30:02] Feed: https://example.com/feed/, New items: 3
|
||||
[2024-01-15 10:30:05] Message sent successfully: Breaking News Article
|
||||
[2024-01-15 10:30:06] Script completed
|
||||
```
|
||||
|
||||
## Message format
|
||||
|
||||
The bot sends formatted messages with:
|
||||
|
||||
- **Source attribution** with publication date
|
||||
- **Article title** in bold
|
||||
- **Description/excerpt** with preserved HTML formatting
|
||||
- **Direct link** to original article
|
||||
- **Invisible Instant View link** (if configured)
|
||||
|
||||
Example output:
|
||||
```
|
||||
Source: Example News - 15/01/2024
|
||||
|
||||
Breaking: Important News Update
|
||||
This is the article description with basic HTML formatting preserved.
|
||||
|
||||
https://example.com/article-url
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common issues
|
||||
|
||||
1. **No messages sent**
|
||||
- Check bot token and channel ID
|
||||
- Verify bot is admin in the channel
|
||||
- Check if RSS feed URLs are accessible
|
||||
|
||||
2. **Duplicate messages**
|
||||
- Ensure `rss_state.json` has write permissions
|
||||
- Check if script is running multiple times simultaneously
|
||||
|
||||
3. **HTML formatting issues**
|
||||
- Verify Telegram bot API limits (4096 characters max)
|
||||
- Check for unsupported HTML tags
|
||||
|
||||
### Debug mode
|
||||
|
||||
For testing, modify the date to process yesterday's articles:
|
||||
```php
|
||||
// $todayDate = date('Y-m-d');
|
||||
$todayDate = date('Y-m-d', strtotime('-1 day'));
|
||||
```
|
||||
|
||||
### Permissions
|
||||
|
||||
Ensure proper file permissions:
|
||||
```bash
|
||||
chmod 755 rss-to-telegram-bot.php
|
||||
chmod 666 rss_state.json rss_log.txt
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch (`git checkout -b feature/improvement`)
|
||||
3. Commit your changes (`git commit -am 'Add new feature'`)
|
||||
4. Push to the branch (`git push origin feature/improvement`)
|
||||
5. Create a Pull Request
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE) file for details.
|
||||
|
||||
### What this means:
|
||||
- ✅ You can use this software for any purpose
|
||||
- ✅ You can modify and distribute it
|
||||
- ✅ You can use it commercially
|
||||
- ⚠️ If you distribute modified versions, they must also be GPL v3
|
||||
- ⚠️ You must include the original license and copyright notices
|
||||
|
||||
## Support
|
||||
|
||||
If you encounter issues or have questions:
|
||||
|
||||
1. Check the [troubleshooting section](#troubleshooting)
|
||||
2. Review the log file for error messages
|
||||
3. Open an issue on GitHub with detailed information
|
||||
|
||||
## Changelog
|
||||
|
||||
### v1.0.0
|
||||
- Initial release
|
||||
- Basic RSS to Telegram functionality
|
||||
- State tracking system
|
||||
- Instant View support
|
||||
- Comprehensive logging
|
||||
|
||||
---
|
||||
|
Reference in New Issue
Block a user