|
|
|
|
@ -17,7 +17,7 @@ from requests.packages.urllib3.util.retry import Retry |
|
|
|
|
from requests.adapters import HTTPAdapter |
|
|
|
|
from foodie_config import ( |
|
|
|
|
RSS_FEEDS, RSS_FEED_NAMES, AUTHORS, RECIPE_KEYWORDS, PROMO_KEYWORDS, |
|
|
|
|
HOME_KEYWORDS, PRODUCT_KEYWORDS, PERSONA_CONFIGS, CATEGORIES, |
|
|
|
|
HOME_KEYWORDS, PRODUCT_KEYWORDS, PERSONA_CONFIGS, CATEGORIES, CTAS, |
|
|
|
|
get_clean_source_name, X_API_CREDENTIALS |
|
|
|
|
) |
|
|
|
|
from foodie_utils import ( |
|
|
|
|
@ -32,10 +32,6 @@ from dotenv import load_dotenv |
|
|
|
|
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
|
|
|
|
# Log script version to ensure it's the latest |
|
|
|
|
SCRIPT_VERSION = "1.2.0" |
|
|
|
|
logging.info(f"Starting foodie_automator_rss.py version {SCRIPT_VERSION}") |
|
|
|
|
|
|
|
|
|
is_posting = False |
|
|
|
|
|
|
|
|
|
def signal_handler(sig, frame): |
|
|
|
|
@ -275,10 +271,8 @@ def curate_from_rss(): |
|
|
|
|
if not image_url: |
|
|
|
|
image_url, image_source, uploader, page_url = get_image(image_query) |
|
|
|
|
|
|
|
|
|
# Log the fetched image details |
|
|
|
|
logging.info(f"Fetched image for '{post_data['title']}': URL={image_url}, Source={image_source}, Uploader={uploader}, Page URL={page_url}") |
|
|
|
|
|
|
|
|
|
hook = get_dynamic_hook(post_data["title"]).strip() |
|
|
|
|
# Removed: cta = select_best_cta(post_data["title"], final_summary, post_url=None) |
|
|
|
|
|
|
|
|
|
# Generate viral share prompt |
|
|
|
|
share_prompt = get_viral_share_prompt(post_data["title"], final_summary) |
|
|
|
|
@ -287,7 +281,7 @@ def curate_from_rss(): |
|
|
|
|
f'<a href="https://x.com/intent/tweet?url={{post_url}}&text={{share_text}}" target="_blank"><i class="tsi tsi-twitter"></i></a> ' |
|
|
|
|
f'<a href="https://www.facebook.com/sharer/sharer.php?u={{post_url}}" target="_blank"><i class="tsi tsi-facebook"></i></a></p>' |
|
|
|
|
) |
|
|
|
|
post_data["content"] = f"{final_summary}\n\n{share_links_template}" |
|
|
|
|
post_data["content"] = f"{final_summary}\n\n{share_links_template}" # Removed cta from content |
|
|
|
|
|
|
|
|
|
global is_posting |
|
|
|
|
is_posting = True |
|
|
|
|
@ -313,7 +307,8 @@ def curate_from_rss(): |
|
|
|
|
share_text_encoded = quote(share_text) |
|
|
|
|
post_url_encoded = quote(post_url) |
|
|
|
|
share_links = share_links_template.format(post_url=post_url_encoded, share_text=share_text_encoded) |
|
|
|
|
post_data["content"] = f"{final_summary}\n\n{share_links}" |
|
|
|
|
# Removed: cta = select_best_cta(post_data["title"], final_summary, post_url=post_url) |
|
|
|
|
post_data["content"] = f"{final_summary}\n\n{share_links}" # Removed cta from content |
|
|
|
|
is_posting = True |
|
|
|
|
try: |
|
|
|
|
post_to_wp( |
|
|
|
|
@ -339,16 +334,6 @@ def curate_from_rss(): |
|
|
|
|
logging.info(f"Successfully saved '{title}' to {POSTED_TITLES_FILE}") |
|
|
|
|
|
|
|
|
|
if image_url: |
|
|
|
|
# Check if image is already used |
|
|
|
|
used_images_list = load_json_file(USED_IMAGES_FILE, IMAGE_EXPIRATION_DAYS) |
|
|
|
|
used_image_urls = {entry["title"] for entry in used_images_list} |
|
|
|
|
if image_url in used_image_urls: |
|
|
|
|
logging.warning(f"Image '{image_url}' already used, attempting to fetch a new image") |
|
|
|
|
image_url, image_source, uploader, page_url = get_flickr_image(image_query, relevance_keywords) |
|
|
|
|
if not image_url: |
|
|
|
|
image_url, image_source, uploader, page_url = get_image(image_query) |
|
|
|
|
logging.info(f"New image fetched: URL={image_url}, Source={image_source}, Uploader={uploader}, Page URL={page_url}") |
|
|
|
|
|
|
|
|
|
save_json_file(USED_IMAGES_FILE, image_url, timestamp) |
|
|
|
|
used_images.add(image_url) |
|
|
|
|
logging.info(f"Saved image '{image_url}' to {USED_IMAGES_FILE}") |
|
|
|
|
|