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.1.0.tar.gz (61.4 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.1.0-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for xify-1.1.0.tar.gz
Algorithm Hash digest
SHA256 bfe95eb83e759f18140b91004e1b54d80a44c63ef8726ab2a08380fadf7da2b9
MD5 72ecdea292a13da5a0ae98ea9cd7d2a1
BLAKE2b-256 c3c0b5f9d72fbd9d674c8cff973a15500df16b2194da3a650d9805099536bace

See more details on using hashes here.

Provenance

The following attestation bundles were made for xify-1.1.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.1.0-py3-none-any.whl.

File metadata

  • Download URL: xify-1.1.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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b3652e52321184690f636fd4eb315e45c0b8ab1f6aac8b40572fbe9ace5613fc
MD5 eb80e873c9f001283eddd2a386334651
BLAKE2b-256 3959c7d8b326f745a9768cbef061f173add712f5b3f53e470dabac436636a516

See more details on using hashes here.

Provenance

The following attestation bundles were made for xify-1.1.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