# foodie_config.py # Constants shared across all automator scripts OPENAI_API_KEY = "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" PIXABAY_API_KEY = "14836528-999c19a033d77d463113b1fb8" AUTHORS = [ { "url": "https://insiderfoodie.com", "username": "shanehill", "password": "LKfH JF0x CnnU SSxK s9f1 993x", "persona": "Visionary Editor", "bio": "I oversee worldwide dining shifts, obsessed with the big picture. My edits deliver precise takes—charting the future of food with confidence." }, { "url": "https://insiderfoodie.com", "username": "javiermorales", "password": "r46q z0JX QL1q ztbH Tifk Cn28", "persona": "Foodie Critic", "bio": "I judge food scenes worldwide, wielding a fearless pen. My takes expose what shines and what flops—no compromise, just truth." }, { "url": "https://insiderfoodie.com", "username": "aishapatel", "password": "NyCa SOXd 5EVf bVvW KIoz wC0C", "persona": "Trend Scout", "bio": "I scout global food trends, obsessed with what’s emerging. My sharp predictions map the industry’s path—always one step ahead." }, { "url": "https://insiderfoodie.com", "username": "liennguyen", "password": "Xorz sdpp T08J 8buz cCba BGzW", "persona": "Culture Connoisseur", "bio": "I trace worldwide dining traditions, weaving past into present. My words uncover the soul of flavor—connecting cultures bite by bite." }, { "url": "https://insiderfoodie.com", "username": "keishawashington", "password": "PMjv bKMb FmUc bzZG ZV1f ZzpK", "persona": "African-American Soul Food Sage", "bio": "I bring soul food’s legacy to life, blending history with modern vibes. My stories celebrate flavor and resilience—dishing out culture with every bite." }, { "url": "https://insiderfoodie.com", "username": "lilamoreau", "password": "e3nv Vsg4 L9wv RgL6 dHkm T3UD", "persona": "Global Street Food Nomad", "bio": "I roam the globe chasing street eats, from stalls to trucks. My tales uncover bold flavors and gritty trends shaping food on the go." } ] POSTED_RSS_TITLES_FILE = '/home/shane/foodie_automator/posted_rss_titles.json' POSTED_GOOGLE_TITLES_FILE = '/home/shane/foodie_automator/posted_google_titles.json' POSTED_REDDIT_TITLES_FILE = '/home/shane/foodie_automator/posted_reddit_titles.json' USED_IMAGES_FILE = '/home/shane/foodie_automator/used_images.json' EXPIRATION_DAYS = 3 IMAGE_EXPIRATION_DAYS = 7 RSS_FEEDS = [ "https://www.eater.com/rss/full.xml", "https://modernrestaurantmanagement.com/feed/", "https://thespoon.tech/feed/", "https://www.nrn.com/rss.xml", "https://rss.nytimes.com/services/xml/rss/nyt/DiningandWine.xml", "https://www.bakingbusiness.com/rss/articles", "https://www.theguardian.com/food/rss" ] RSS_FEED_NAMES = { "https://www.eater.com/rss/full.xml": ("Eater", "https://www.eater.com/"), "https://modernrestaurantmanagement.com/feed/": ("Modern Restaurant Management", "https://modernrestaurantmanagement.com/"), "https://thespoon.tech/feed/": ("The Spoon", "https://thespoon.tech/"), "https://www.nrn.com/rss.xml": ("Nation's Restaurant News", "https://www.nrn.com/"), "https://rss.nytimes.com/services/xml/rss/nyt/DiningandWine.xml": ("The New York Times", "https://www.nytimes.com/section/food"), "https://www.bakingbusiness.com/rss/articles": ("Baking Business", "https://www.bakingbusiness.com/"), "https://www.theguardian.com/food/rss": ("The Guardian Food", "https://www.theguardian.com/food") } RECIPE_KEYWORDS = ["recipe", "cook", "bake", "baking", "cooking", "ingredient", "method", "mix", "stir", "preheat", "dinners", "make", "dish", "healthy"] PROMO_KEYWORDS = ["we serve", "our guests", "event", "competition", "franchise", "off", "discount", "sale"] HOME_KEYWORDS = ["home", "house", "household", "appliance", "kitchen", "gadget"] PRODUCT_KEYWORDS = ["best", "buy", "storage", "organizer", "shop", "price", "container", "product", "deal", "sale", "discount"] CATEGORIES = [ "People", "Trends", "Travel", "Lifestyle", "Buzz", "Culture", "Health", "Drink", "Food" "Eats" ] CTAS = [ "Love This Take? Share It On !", "Dig This Scoop? Post It On !", "Wild For This? Spread It On !", "Crave This Read? Tweet It On !", "Buzzing Over This? Share On !" ] SUMMARY_PERSONA_PROMPTS = { "Visionary Editor": ( "You’re a commanding food editor with a borderless view. Summarize this article in a polished, decisive tone, like shaping a premier food mag, but with a casual twist—think bold vibes like 'This is unreal!'. " "Explore a wide range of food-related topics, skip recipes. Generate exactly {num_paragraphs} paragraphs, 60-80 words each, full thoughts, with a single \n break. " "Write naturally without mentioning the source name or URL directly in the text, with a slight Upworthy/Buzzfeed flair style. " "Add a bold take and end with a clickbait-y question like Neil Patel would do to boost engagement!" ), "Foodie Critic": ( "You’re a seasoned foodie reviewer with a sharp eye. Summarize this article in a pro yet lively tone, like a top food mag with a playful edge—think 'This bangs!'. " "Explore a wide range of food-related topics, skip recipes. Generate exactly {num_paragraphs} paragraphs, 60-80 words each, full thoughts, with a single \n break. " "Write naturally without mentioning the source name or URL directly in the text, with a slight Upworthy/Buzzfeed flair style. " "Add a subtle opinion and end with a clickbait-y question like Neil Patel would do to boost engagement!" ), "Trend Scout": ( "You’re a forward-thinking editor obsessed with trends. Summarize this article in an enthusiastic voice, like 'This is the future, fam!'. " "Explore a wide range of food-related topics, skip recipes. Generate exactly {num_paragraphs} paragraphs, 60-80 words each, full thoughts, with a single \n break. " "Write naturally without mentioning the source name or URL directly in the text, with a slight Upworthy/Buzzfeed flair style. " "Predict what’s next and end with a clickbait-y question like Neil Patel would do to boost engagement!" ), "Culture Connoisseur": ( "You’re a cultured food writer who loves storytelling. Summarize this article in a warm, reflective tone with a kick, like 'This feels different, right?'. " "Explore a wide range of food-related topics, skip recipes. Generate exactly {num_paragraphs} paragraphs, 60-80 words each, full thoughts, with a single \n break. " "Write naturally without mentioning the source name or URL directly in the text, with a slight Upworthy/Buzzfeed flair style. " "Add a thoughtful observation and end with a clickbait-y question like Neil Patel would do to boost engagement!" ), "African-American Soul Food Sage": ( "You’re a vibrant storyteller rooted in African-American culinary heritage. Summarize this article in a soulful tone, like 'This got that heat, y’all!'. " "Explore a wide range of food-related topics, skip recipes. Generate exactly {num_paragraphs} paragraphs, 60-80 words each, full thoughts, with a single \n break. " "Write naturally without mentioning the source name or URL directly in the text, with a slight Upworthy/Buzzfeed flair style. " "Add a heritage twist and end with a clickbait-y question like Neil Patel would do to boost engagement!" ), "Global Street Food Nomad": ( "You’re an adventurous explorer of global street food. Summarize this article in a bold, gritty tone with a spin, like 'This is straight fire!'. " "Explore a wide range of food-related topics, skip recipes. Generate exactly {num_paragraphs} paragraphs, 60-80 words each, full thoughts, with a single \n break. " "Write naturally without mentioning the source name or URL directly in the text, with a slight Upworthy/Buzzfeed flair style. " "Drop a street-level insight and end with a clickbait-y question like Neil Patel would do to boost engagement!" ) } REDDIT_CLIENT_ID = "GtoZmrM8VyrxMvb7gBLrLg" REDDIT_CLIENT_SECRET = "YGTx69ZzvMn329pZj2qiEEXW82aeSA" REDDIT_USER_AGENT = "foodie_trends_bot by /u/AskShaneHill" REDDIT_SUBREDDITS = [ "food", "FoodPorn", "spicy" ] FAST_FOOD_KEYWORDS = [ "mcdonald", "burger king", "wendy", "taco bell", "kfc", "subway", "domino", "pizza hut", "chipotle", "dunkin", "starbucks", "sonic", "arby", "jack in the box", "popeyes", "fast food", "chain", "drive-thru" ] SUMMARY_MODEL = "gpt-4o" # or "gpt-4.1-mini" for testing LIGHT_TASK_MODEL = "gpt-4o-mini" def get_clean_source_name(source_name): """ Retrieve a clean source name from RSS_FEED_NAMES if source_name matches a feed URL, otherwise return the original source_name as a fallback. """ for feed_url, (clean_name, _) in RSS_FEED_NAMES.items(): if feed_url == source_name: return clean_name return source_name