Skip to main content

RSS web feeds swiss army knife

Project description

Swiss RSS

PyPI PyPI - Python Version PyPI - License

RSS web feeds swiss army knife

Features

  • RSS/Atom feed parsing and discovery
  • Website favicon download and conversion
  • OPML feed list parsing
  • Timestamp parsing for multiple formats

Installation

pip install swiss-rss

Usage

Web Feeds

import asyncio
from swiss_rss.web_feeds import parse_feed_from_url, discover_feed

async def main():
    try:
        # Find and parse a feed
        feed_url = await discover_feed("https://2ality.com")
        if not feed_url:
            print("No feed found")
            return

        print(f"Found feed: {feed_url}")
        feed = await parse_feed_from_url(feed_url)

        # Access feed data
        print(f"Title: {feed.title}")
        if feed.items:
            print(f"Latest post: {feed.items[0].title}")
    except Exception as e:
        print(f"Error: {e}")

asyncio.run(main())

Favicons

from swiss_rss.favicons.favicon_parser import download_favicon

try:
    # Download and convert favicon to 32x32 PNG
    favicon_data = download_favicon("https://example.com")
    if favicon_data:
        with open("favicon.png", "wb") as f:
            f.write(favicon_data)
except Exception as e:
    print(f"Error downloading favicon: {e}")

OPML

from swiss_rss.opml.opml_parser import parse_opml

try:
    with open("feeds.opml") as f:
        feeds = parse_opml(f.read())

    for feed in feeds:
        print(f"Feed: {feed.title} ({feed.xml_url})")
except Exception as e:
    print(f"Error parsing OPML: {e}")

Timestamps

from swiss_rss.timestamps.timestamp_parser import parse_date

# Supports RFC 822, ISO 8601 and other common formats
date = parse_date("Sat, 03 Jun 2023 10:00:00 GMT")
print(f"Parsed date: {date}")

Additional Web Feed Features

from swiss_rss.web_feeds import parse_feed, FeedInfo, FeedItem

# Parse feed content directly
feed_content = '''<?xml version="1.0"?>
<rss version="2.0">
    <!-- RSS content here -->
</rss>'''

feed = parse_feed(feed_content)
# Access additional fields
for item in feed.items:
    print(f"Author: {item.author}")
    print(f"ID: {item.id}")

Additional Favicon Features

from swiss_rss.favicons.favicon_parser import (
    convert_to_png,
    resize_favicon,
    decode_base64_image
)

# Convert image to PNG
png_data = convert_to_png(image_data)

# Resize favicon with custom size
resized_data = resize_favicon(favicon_data, size=64)

# Handle base64 encoded images
image_data = decode_base64_image("data:image/png;base64,...")

Development

  1. Clone the repository and install dependencies:
git clone https://github.com/aluxian/swiss-rss.git
cd swiss-rss
uv venv
source .venv/bin/activate
uv sync
  1. Run linting checks:
uv run ruff check .
  1. Run tests:
uv run pytest
  1. Start Aider:
uvx --python 3.12 --from 'aider-chat[playwright]' --with 'aider-chat[help]' aider

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swiss_rss-0.1.0.tar.gz (44.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

swiss_rss-0.1.0-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file swiss_rss-0.1.0.tar.gz.

File metadata

  • Download URL: swiss_rss-0.1.0.tar.gz
  • Upload date:
  • Size: 44.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for swiss_rss-0.1.0.tar.gz
Algorithm Hash digest
SHA256 af1c8b1ced4c79383f1cc06b3d3ddfde6e68a98a159046be6e5acb853c8ad2e0
MD5 3fb80855a5da2fb0bdf020225de4f0eb
BLAKE2b-256 41068ef731ed594e1ba96f3f8056066e460fdfc36c0e63825cd825bfc850dd0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for swiss_rss-0.1.0.tar.gz:

Publisher: python-publish.yml on aluxian/swiss-rss

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file swiss_rss-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: swiss_rss-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for swiss_rss-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f4b66c2cd67e9ddb7c1f61de1b941104d8fd934fa4b424aa86435d4f6856db55
MD5 19fa342bb7c4d010db03422bd8a60954
BLAKE2b-256 4ad2ce1cb1fcbaf11c4c2525d1465dd9cd8099c352bec21fb04945addac1a13d

See more details on using hashes here.

Provenance

The following attestation bundles were made for swiss_rss-0.1.0-py3-none-any.whl:

Publisher: python-publish.yml on aluxian/swiss-rss

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page