thread-gpt / tweet.py
wis-k's picture
Upload folder using huggingface_hub
6370672
raw
history blame contribute delete
No virus
2.53 kB
import argparse
import json
import logging
import os
import tweepy
from dotenv import load_dotenv
from tweet_counter import count_tweet
load_dotenv()
CONSUMER_KEY = os.environ["CONSUMER_KEY"]
CONSUMER_SECRET = os.environ["CONSUMER_SECRET"]
ACCESS_KEY = os.environ["ACCESS_KEY"]
ACCESS_SECRET = os.environ["ACCESS_SECRET"]
# Authenticate to Twitter
client = tweepy.Client(
consumer_key=CONSUMER_KEY,
consumer_secret=CONSUMER_SECRET,
access_token=ACCESS_KEY,
access_token_secret=ACCESS_SECRET,
)
auth = tweepy.OAuth1UserHandler(
CONSUMER_KEY,
CONSUMER_SECRET,
ACCESS_KEY,
ACCESS_SECRET,
)
# Create API object
api = tweepy.API(auth, wait_on_rate_limit=True)
logging.basicConfig(handlers=[logging.StreamHandler()], level=logging.INFO)
logger = logging.getLogger(__name__)
def tweet_thread(thread_data, base_path):
for index, tweet in enumerate(thread_data, start=1):
tweet_length = count_tweet(tweet["content"])
if tweet_length > 280:
raise ValueError(
f"Tweet number {index} exceeds 280 characters by {tweet_length - 280}. Content: {tweet['content']}"
)
# Posting the thread
previous_tweet_id = None
for tweet_data in thread_data:
if "media" in tweet_data and tweet_data["media"]:
media_ids = [
api.media_upload(os.path.join(base_path, media["path"])).media_id
for media in tweet_data["media"]
]
else:
media_ids = None
# Post tweet
if previous_tweet_id is None:
# First tweet of the thread
tweet = client.create_tweet(text=tweet_data["content"], media_ids=media_ids)
else:
# Subsequent tweets in the thread
tweet = client.create_tweet(
text=tweet_data["content"],
in_reply_to_tweet_id=previous_tweet_id,
media_ids=media_ids,
)
previous_tweet_id = tweet.data["id"]
logger.info(f"Tweeted: {tweet_data['content']}")
logger.info("Thread posted!")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Tweet a thread from a json file.")
parser.add_argument(
"file", type=str, help="Path to the json file containing the thread data."
)
args = parser.parse_args()
with open(args.file, "r") as f:
thread_data = json.load(f)
base_path = os.path.dirname(os.path.abspath(args.file))
tweet_thread(thread_data, base_path)