# foodie_x_config.py from dotenv import load_dotenv import os load_dotenv() X_API_CREDENTIALS = [ { "username": "owenjohnson", "x_username": "@insiderfoodieowen", "api_key": os.getenv("OWENJOHNSON_X_API_KEY"), "api_secret": os.getenv("OWENJOHNSON_X_API_SECRET"), "access_token": os.getenv("OWENJOHNSON_X_ACCESS_TOKEN"), "access_token_secret": os.getenv("OWENJOHNSON_X_ACCESS_TOKEN_SECRET"), "client_secret": os.getenv("OWENJOHNSON_X_CLIENT_SECRET") }, { "username": "javiermorales", "x_username": "@insiderfoodiejavier", "api_key": os.getenv("JAVIERMORALES_X_API_KEY"), "api_secret": os.getenv("JAVIERMORALES_X_API_SECRET"), "access_token": os.getenv("JAVIERMORALES_X_ACCESS_TOKEN"), "access_token_secret": os.getenv("JAVIERMORALES_X_ACCESS_TOKEN_SECRET"), "client_secret": os.getenv("JAVIERMORALES_X_CLIENT_SECRET") }, { "username": "aishapatel", "x_username": "@insiderfoodieaisha", "api_key": os.getenv("AISHAPATEL_X_API_KEY"), "api_secret": os.getenv("AISHAPATEL_X_API_SECRET"), "access_token": os.getenv("AISHAPATEL_X_ACCESS_TOKEN"), "access_token_secret": os.getenv("AISHAPATEL_X_ACCESS_TOKEN_SECRET"), "client_secret": os.getenv("AISHAPATEL_X_CLIENT_SECRET") }, { "username": "trangnguyen", "x_username": "@insiderfoodietrang", "api_key": os.getenv("TRANGNGUYEN_X_API_KEY"), "api_secret": os.getenv("TRANGNGUYEN_X_API_SECRET"), "access_token": os.getenv("TRANGNGUYEN_X_ACCESS_TOKEN"), "access_token_secret": os.getenv("TRANGNGUYEN_X_ACCESS_TOKEN_SECRET"), "client_secret": os.getenv("TRANGNGUYEN_X_CLIENT_SECRET") }, { "username": "keishareid", "x_username": "@insiderfoodiekeisha", "api_key": os.getenv("KEISHAREID_X_API_KEY"), "api_secret": os.getenv("KEISHAREID_X_API_SECRET"), "access_token": os.getenv("KEISHAREID_X_ACCESS_TOKEN"), "access_token_secret": os.getenv("KEISHAREID_X_ACCESS_TOKEN_SECRET"), "client_secret": os.getenv("KEISHAREID_X_CLIENT_SECRET") }, { "username": "lilamoreau", "x_username": "@insiderfoodielila", "api_key": os.getenv("LILAMOREAU_X_API_KEY"), "api_secret": os.getenv("LILAMOREAU_X_API_SECRET"), "access_token": os.getenv("LILAMOREAU_X_ACCESS_TOKEN"), "access_token_secret": os.getenv("LILAMOREAU_X_ACCESS_TOKEN_SECRET"), "client_secret": os.getenv("LILAMOREAU_X_CLIENT_SECRET") } ] X_PERSONA_PROMPTS = { "Visionary Editor": { "description": "a commanding food editor with a borderless view", "tone": "a polished and insightful tone, like 'This redefines culinary excellence.'", "prompt": ( "Craft a tweet as {description}. Keep it under 280 characters, using {tone}. " "For article tweets, include the article title, a quirky hook, and the URL. For personal tweets, reflect on your role at InsiderFoodie or background. " "Avoid emojis and clichés like 'game-changer'. Return only the tweet text." ) }, "Foodie Critic": { "description": "a seasoned foodie reviewer with a sharp eye", "tone": "a professional yet engaging tone, like 'This dish is a revelation.'", "prompt": ( "Craft a tweet as {description}. Keep it under 280 characters, using {tone}. " "For article tweets, include the article title, a quirky hook, and the URL. For personal tweets, reflect on your role at InsiderFoodie or background. " "Avoid emojis and clichés like 'game-changer'. Return only the tweet text." ) }, "Trend Scout": { "description": "a forward-thinking editor obsessed with trends", "tone": "an insightful and forward-looking tone, like 'This sets the stage for what’s next.'", "prompt": ( "Craft a tweet as {description}. Keep it under 280 characters, using {tone}. " "For article tweets, include the article title, a quirky hook, and the URL. For personal tweets, reflect on your role at InsiderFoodie or background. " "Avoid emojis and clichés like 'game-changer'. Return only the tweet text." ) }, "Culture Connoisseur": { "description": "a cultured food writer who loves storytelling", "tone": "a warm and thoughtful tone, like 'This evokes a sense of tradition.'", "prompt": ( "Craft a tweet as {description}. Keep it under 280 characters, using {tone}. " "For article tweets, include the article title, a quirky hook, and the URL. For personal tweets, reflect on your role at InsiderFoodie or background. " "Avoid emojis and clichés like 'game-changer'. Return only the tweet text." ) }, "African-American Soul Food Sage": { "description": "a vibrant storyteller rooted in African-American culinary heritage", "tone": "a heartfelt and authentic tone, like 'This captures the essence of heritage.'", "prompt": ( "Craft a tweet as {description}. Keep it under 280 characters, using {tone}. " "For article tweets, include the article title, a quirky hook, and the URL. For personal tweets, reflect on your role at InsiderFoodie or background. " "Avoid emojis and clichés like 'game-changer'. Return only the tweet text." ) }, "Global Street Food Nomad": { "description": "an adventurous explorer of global street food", "tone": "a bold and adventurous tone, like 'This takes you on a global journey.'", "prompt": ( "Craft a tweet as {description}. Keep it under 280 characters, using {tone}. " "For article tweets, include the article title, a quirky hook, and the URL. For personal tweets, reflect on your role at InsiderFoodie or background. " "Avoid emojis and clichés like 'game-changer'. Return only the tweet text." ) } } AUTHOR_BACKGROUNDS_FILE = '/home/shane/foodie_automator/author_backgrounds.json' X_POST_COUNTS_FILE = '/home/shane/foodie_automator/x_post_counts.json' RECENT_POSTS_FILE = '/home/shane/foodie_automator/recent_posts.json'