A connector for interacting with the Twitter API via Tweepy.
This class handles OAuth 1.0a and OAuth 2.0 authentication for
posting tweets and retrieving data from Twitter.
Attributes:
Name |
Type |
Description |
api_key |
str
|
The API key for the Twitter API.
|
api_secret_key |
str
|
The API secret key for the Twitter API.
|
access_token |
str
|
The access token for the Twitter API.
|
access_token_secret |
str
|
The access token secret for the Twitter API.
|
bearer_token |
str
|
The bearer token for the Twitter API.
|
bot_username |
str
|
|
bot_id |
str
|
|
Source code in arai_ai_agents/connectors/twitter_connector.py
| class TwitterConnector:
"""A connector for interacting with the Twitter API via Tweepy.
This class handles OAuth 1.0a and OAuth 2.0 authentication for
posting tweets and retrieving data from Twitter.
Attributes:
api_key (str): The API key for the Twitter API.
api_secret_key (str): The API secret key for the Twitter API.
access_token (str): The access token for the Twitter API.
access_token_secret (str): The access token secret for the Twitter API.
bearer_token (str): The bearer token for the Twitter API.
bot_username (str): The username of the bot.
bot_id (str): The ID of the bot.
"""
def __init__(self):
"""Initializes the Twitter connector.
Raises:
ValueError: If Twitter API credentials are not present in the environment variables.
"""
self.api_key = os.getenv("TWITTER_API_KEY")
# Part of the OAuth 1.0a credentials identifying the application (required for user-based authentication).
self.api_secret_key = os.getenv("TWITTER_API_KEY_SECRET")
# Secret counterpart to the API key, used in signing OAuth 1.0a requests.
self.access_token = os.getenv("TWITTER_ACCESS_TOKEN")
# Represents the user’s OAuth 1.0a credentials, required for user-level actions (e.g., posting tweets).
self.access_token_secret = os.getenv("TWITTER_ACCESS_TOKEN_SECRET")
# Secret counterpart to the access token, used in signing user-level requests under OAuth 1.0a.
self.bearer_token = os.getenv("TWITTER_BEARER_TOKEN")
# Used for OAuth 2.0 app-only authentication in Twitter API v2, often for read-only access to public data.
if not all([self.api_key, self.api_secret_key, self.access_token, self.access_token_secret]):
raise ValueError("Twitter API credentials are not set in .env file")
try:
# Initialize v2 client only
self.client = tweepy.Client(
bearer_token=self.bearer_token,
consumer_key=self.api_key,
consumer_secret=self.api_secret_key,
access_token=self.access_token,
access_token_secret=self.access_token_secret,
wait_on_rate_limit=True
)
# Get the bot's info using v2 API
me = self.client.get_me()
self.bot_username = me.data.username.lower()
self.bot_id = me.data.id
print(f"Successfully authenticated as @{self.bot_username}")
self.last_mention_id = None
except Exception as e:
print(f"Twitter authentication failed: {str(e)}")
raise
def post_tweet(self, message: str) -> str:
"""Posts a tweet to the bot's Twitter account.
Args:
message (str): The message to be posted as a tweet. Must be shorter than 280 characters.
Returns:
str: A string message indicating success or failure.
Raises:
Exception: If there's an error posting the tweet.
Example:
>>> twitter_connector.post_tweet("Hello, world!")
"""
try:
if not message:
return "Error: Tweet message is empty"
# Truncate if too long
if len(message) > 280:
message = message[:277] + "..."
self.client.create_tweet(text=message)
return "Tweeted: " + message
except Exception as e:
return "Error posting tweet: " + str(e)
|
Initializes the Twitter connector.
Raises:
Type |
Description |
ValueError
|
If Twitter API credentials are not present in the environment variables.
|
Source code in arai_ai_agents/connectors/twitter_connector.py
| def __init__(self):
"""Initializes the Twitter connector.
Raises:
ValueError: If Twitter API credentials are not present in the environment variables.
"""
self.api_key = os.getenv("TWITTER_API_KEY")
# Part of the OAuth 1.0a credentials identifying the application (required for user-based authentication).
self.api_secret_key = os.getenv("TWITTER_API_KEY_SECRET")
# Secret counterpart to the API key, used in signing OAuth 1.0a requests.
self.access_token = os.getenv("TWITTER_ACCESS_TOKEN")
# Represents the user’s OAuth 1.0a credentials, required for user-level actions (e.g., posting tweets).
self.access_token_secret = os.getenv("TWITTER_ACCESS_TOKEN_SECRET")
# Secret counterpart to the access token, used in signing user-level requests under OAuth 1.0a.
self.bearer_token = os.getenv("TWITTER_BEARER_TOKEN")
# Used for OAuth 2.0 app-only authentication in Twitter API v2, often for read-only access to public data.
if not all([self.api_key, self.api_secret_key, self.access_token, self.access_token_secret]):
raise ValueError("Twitter API credentials are not set in .env file")
try:
# Initialize v2 client only
self.client = tweepy.Client(
bearer_token=self.bearer_token,
consumer_key=self.api_key,
consumer_secret=self.api_secret_key,
access_token=self.access_token,
access_token_secret=self.access_token_secret,
wait_on_rate_limit=True
)
# Get the bot's info using v2 API
me = self.client.get_me()
self.bot_username = me.data.username.lower()
self.bot_id = me.data.id
print(f"Successfully authenticated as @{self.bot_username}")
self.last_mention_id = None
except Exception as e:
print(f"Twitter authentication failed: {str(e)}")
raise
|
Posts a tweet to the bot's Twitter account.
Parameters:
Name |
Type |
Description |
Default |
message
|
str
|
The message to be posted as a tweet. Must be shorter than 280 characters.
|
required
|
Returns:
Name | Type |
Description |
str |
str
|
A string message indicating success or failure.
|
Raises:
Type |
Description |
Exception
|
If there's an error posting the tweet.
|
Example
twitter_connector.post_tweet("Hello, world!")
Source code in arai_ai_agents/connectors/twitter_connector.py
| def post_tweet(self, message: str) -> str:
"""Posts a tweet to the bot's Twitter account.
Args:
message (str): The message to be posted as a tweet. Must be shorter than 280 characters.
Returns:
str: A string message indicating success or failure.
Raises:
Exception: If there's an error posting the tweet.
Example:
>>> twitter_connector.post_tweet("Hello, world!")
"""
try:
if not message:
return "Error: Tweet message is empty"
# Truncate if too long
if len(message) > 280:
message = message[:277] + "..."
self.client.create_tweet(text=message)
return "Tweeted: " + message
except Exception as e:
return "Error posting tweet: " + str(e)
|