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 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"),
)

Note:
How you load and manage your credentials is up to you. Xify does not enforce any particular method—just ensure you pass the required values to the Xify constructor.


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-0.1.0.tar.gz (62.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-0.1.0-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: xify-0.1.0.tar.gz
  • Upload date:
  • Size: 62.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.4

File hashes

Hashes for xify-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b614901b062461d0e846a3983b908f8b61b93f5ccba7cd48ef35c80ea1f22368
MD5 4e5c985abab9b67430d94852156515cd
BLAKE2b-256 fd304657850e5f31140ecc2d9f8f440748bf4950f5f168fba96c250a69ed29af

See more details on using hashes here.

File details

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

File metadata

  • Download URL: xify-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.4

File hashes

Hashes for xify-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4c3bd429bdab3663c9665db6600b646dea6a0be56a4b819c3255caf4aa6a8bd5
MD5 f9d819085106c83fc6ee547578345bf0
BLAKE2b-256 67aeb8c0dfaa91f89f0dbcdf94e855637eb79b338cefef44374a13655e45d6c5

See more details on using hashes here.

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