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(