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 examples 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.7.tar.gz (87.9 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.7-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: xify-1.1.7.tar.gz
  • Upload date:
  • Size: 87.9 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.7.tar.gz
Algorithm Hash digest
SHA256 27e19fb05e6803e51398b09ac31b38c4e1ae1c25a27a68efd2f4728ece391f11
MD5 c581498294d4507182b4194acc882468
BLAKE2b-256 e145728b059402c897c0187228ceaf24651348b5db91b15a6a77dfdcbf2f2974

See more details on using hashes here.

Provenance

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

Publisher: release.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.7-py3-none-any.whl.

File metadata

  • Download URL: xify-1.1.7-py3-none-any.whl
  • Upload date:
  • Size: 9.9 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.7-py3-none-any.whl
Algorithm Hash digest
SHA256 98701d2d6b0c853d0b69b298aab6fb3bd5bed3579b33db89501a6b4e244eabc2
MD5 563ec81fe9e4356b43e0c94adf6b8c0e
BLAKE2b-256 9db12ae786c83912e6c2e330b100164bdb5bc334a46ce90761bfe36ee8d73ebe

See more details on using hashes here.

Provenance

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

Publisher: release.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