Skip to main content

Xify is a Python tool for interacting with the X API.

Project description

Xify

Xify is a modern, asynchronous Python client for interacting with the X (formerly Twitter) API.

It provides authentication, error handling, and a clean async interface for common tasks.


Features

  • OAuth 1.0a Authentication: Sign and authenticate requests to the X API.
  • Async HTTP Requests: Uses aiohttp for efficient, non-blocking network operations.
  • Custom Error Handling: Clear exception hierarchy for all error cases.
  • Logging: Built-in logging with easy integration into your application’s logging setup.
  • Example Usage: See examples for working scripts.

Installation

You can install Xify from source or from PyPI.

From Source

git clone https://github.com/filming/xify.git
cd xify
pip install -e .[dev]
  • The [dev] extra will install development dependencies like mypy and ruff.

From PyPI

pip install xify

Usage

Here’s a minimal example for posting a tweet:

import asyncio
import os
import logging
from dotenv import load_dotenv
from xify import Xify
from xify.errors import APIError, XifyError

load_dotenv()

# Configure logging to see output from Xify
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
)

async def main():
    try:
        xify_client = Xify(
            consumer_key=os.getenv("CONSUMER_KEY"),
            consumer_secret=os.getenv("CONSUMER_SECRET"),
            access_token=os.getenv("ACCESS_TOKEN"),
            access_token_secret=os.getenv("ACCESS_TOKEN_SECRET"),
        )
        async with xify_client:
            content = {"msg": "Hello X!"}
            response = await xify_client.tweet(content)
        logging.info("Tweet posted successfully! ID: %s", response["id"])
    except APIError as e:
        logging.error("API error: %s", e)
        logging.error("Full error response from API: %s", e.response)
    except XifyError as e:
        logging.error("A library error occurred: %s", e)
    except Exception:
        logging.exception("An unexpected error occurred.")

if __name__ == "__main__":
    asyncio.run(main())

See examples for ready-to-run scripts.


Configuration

Xify requires four credentials to authenticate with the X API:

  • consumer_key
  • consumer_secret
  • access_token
  • access_token_secret

You can provide these credentials to the Xify initializer in any way you prefer—such as reading from environment variables, a .env file, a configuration file, a database, or any other method.

Example using environment variables:

Set your environment variables in your shell (for example, in .bashrc, .zshrc, or directly in your terminal):

export CONSUMER_KEY="your_consumer_key"
export CONSUMER_SECRET="your_consumer_secret"
export ACCESS_TOKEN="your_access_token"
export ACCESS_TOKEN_SECRET="your_access_token_secret"

Then, in your code:

import os
from xify import Xify

xify_client = Xify(
    consumer_key=os.getenv("CONSUMER_KEY"),
    consumer_secret=os.getenv("CONSUMER_SECRET"),
    access_token=os.getenv("ACCESS_TOKEN"),
    access_token_secret=os.getenv("ACCESS_TOKEN_SECRET"),
)

Error Handling

Xify provides a robust error hierarchy:

  • XifyError: Base class for all library errors.
  • AuthError: Raised for authentication issues.
  • APIError: Raised for errors returned by the X API (includes the full API response in .response).
  • RequestError: Raised for network or request issues.

You should catch these exceptions in your application for consistent error handling.


Logging

  • Xify uses Python’s standard logging library.
  • By default, it adds a NullHandler to prevent "No handler found" warnings if you have not set up logging in your application.

Dependencies

All dependencies are managed via pyproject.toml.


License

This project is licensed under the MIT License - see the LICENSE file for details.


Contributing

Contributions, bug reports, and feature requests are welcome!
Please open an issue or submit a pull request on GitHub.

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

xify-1.0.0.tar.gz (61.2 kB view details)

Uploaded Source

Built Distribution

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

xify-1.0.0-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file xify-1.0.0.tar.gz.

File metadata

  • Download URL: xify-1.0.0.tar.gz
  • Upload date:
  • Size: 61.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for xify-1.0.0.tar.gz
Algorithm Hash digest
SHA256 63372afac6da5d0ce5da493eb40146d3dc371ded06237935696f02f0c32ea3e5
MD5 83e0c99b2889cd1a015d8e236eeefa98
BLAKE2b-256 6b82fedd39d7b27e73085a27747a10748c06e8fb4a318916039d7453237177d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for xify-1.0.0.tar.gz:

Publisher: pypi-publish.yml on filming/xify

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

File details

Details for the file xify-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: xify-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for xify-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 45fcedddfb2a274395c5920d45626f34fb2742c5a3c9bb8e17706d7582e9d2c1
MD5 6d65c28f305b161d894338a77183b1a2
BLAKE2b-256 95bc2ee090919f99f45382571a4a324cd315d89bbde3b465d0d4dc9ebc09b183

See more details on using hashes here.

Provenance

The following attestation bundles were made for xify-1.0.0-py3-none-any.whl:

Publisher: pypi-publish.yml on filming/xify

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