diff --git a/foodie_utils.py b/foodie_utils.py
index 605af1a..41fb084 100644
--- a/foodie_utils.py
+++ b/foodie_utils.py
@@ -435,7 +435,31 @@ def upload_image_to_wp(image_url, post_title, wp_base_url, wp_username, wp_passw
}
logging.info(f"Fetching image from {image_url} for '{post_title}'")
- # ... (image fetching logic) ...
+ image_response = None
+ for attempt in range(3):
+ try:
+ image_response = requests.get(image_url, headers=image_headers, timeout=IMAGE_UPLOAD_TIMEOUT)
+ if image_response.status_code == 429:
+ wait_time = 10 * (2 ** attempt)
+ logging.warning(f"Rate limit hit for {image_url}. Retrying after {wait_time}s (attempt {attempt+1}/3).")
+ time.sleep(wait_time)
+ continue
+ image_response.raise_for_status()
+ break
+ except requests.exceptions.RequestException as e:
+ logging.warning(f"Image fetch failed for {image_url} (attempt {attempt+1}/3): {e}")
+ if attempt == 2:
+ logging.error(f"Failed to fetch image {image_url} after 3 attempts")
+ return None
+ time.sleep(10 * (2 ** attempt))
+ else:
+ logging.error(f"Failed to fetch image {image_url} after retries")
+ return None
+
+ # Only proceed if image_response is defined (i.e., the fetch succeeded)
+ if image_response is None:
+ logging.error(f"Image response is None for {image_url}, cannot proceed with upload")
+ return None
response = requests.post(
f"{wp_base_url}/media",
@@ -445,10 +469,8 @@ def upload_image_to_wp(image_url, post_title, wp_base_url, wp_username, wp_passw
response.raise_for_status()
image_id = response.json()["id"]
- if page_url and uploader:
- caption = f'{image_source} by {uploader}'
- elif page_url:
- caption = f'{image_source}'
+ if page_url:
+ caption = f'Image via {image_source}'
else:
caption = image_source
requests.post(