|
|
|
|
@ -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'<a href="{page_url}">{image_source}</a> by {uploader}' |
|
|
|
|
elif page_url: |
|
|
|
|
caption = f'<a href="{page_url}">{image_source}</a>' |
|
|
|
|
if page_url: |
|
|
|
|
caption = f'<a href="{page_url}">Image via {image_source}</a>' |
|
|
|
|
else: |
|
|
|
|
caption = image_source |
|
|
|
|
requests.post( |
|
|
|
|
|