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.2.tar.gz (47.7 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.2-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: swiss_rss-0.1.2.tar.gz
  • Upload date:
  • Size: 47.7 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.2.tar.gz
Algorithm Hash digest
SHA256 400a99b811337cd2e8e3268f8d92f6d2a05433406c68c1399f2ecb4597bad6d8
MD5 29f83a6f3591f262bb281cb3f2cbf2d3
BLAKE2b-256 d04cea95fb00d1619861b45de38a5323cb1d0badea8145a9a0c2865c96a1f08a

See more details on using hashes here.

Provenance

The following attestation bundles were made for swiss_rss-0.1.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: swiss_rss-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 14.5 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6e0f7f425a337af881b1c882094f49762321638783b72519c191829e984a8817
MD5 1800956aea617bad5342ccfe8e48dce5
BLAKE2b-256 9dc65685e1a1aedd17eac62751d91d8d895f460198ee660378421f079c47af5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for swiss_rss-0.1.2-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