Почему WordPress устанавливает текущую дату и время при загрузке фотографии, вместо того чтобы использовать дату и время, которые я указал в своем Python-скрипте?

У меня есть функция для загрузки медиа в WordPress: <br/> <pre><code class="python">def upload_media(file_path, timestamp):
        """ Функция загрузки фото в Wordpress """
        dt = datetime.datetime.fromtimestamp(timestamp)
        dt = str(dt.strftime('%Y-%m-%dT%H:%M:%S'))
        print(f"Дата постинга фотографии: {dt}")
        file_path = Path(path_arh_insta + "/" + file_path)
        endpoint = f"{site_url}/wp-json/wp/v2/media"
        headers = {
            'Authorization': 'Basic ' + token_wp.decode('utf-8'),
            "Content-Disposition": f"attachment; filename={file_path};"
        }
        with open(file_path, 'rb') as file:
            response = requests.post(endpoint, headers=headers, files={'file': file, 'date': timestamp, 'caption': 'Photo Instagram', 'alt_text': 'Photo Instagram'})
            #response = requests.post(endpoint, headers=headers, files=media)
        if response.status_code == 201:
            print(f"&gt;&gt;&gt; Файл успешно загружен:\n&gt;&gt;&gt; Код для вставки в пост: {response.json()['description']['rendered']}\n&gt;&gt;&gt; ")
            return response.json()['description']['rendered']
        else:
            logger.error(f"Ошибка загрузки файла: {response.status_code}, {response.json()['message']}")
            exit ()</code></pre> <br/> Файл успешно загружается, однако у него не устанавливаются нужные дата, описание и alt-текст. <br/> Можете подсказать, в чем может быть проблема?
  • 4 сентября 2024 г. 14:43
Ответы на вопрос 2
Проблема, с которой вы столкнулись, связана с тем, как вы передаете метаданные (включая дату) в вашем запросе к API WordPress. Когда вы загружаете медиафайл через REST API WordPress, необходимо использовать дополнительный параметр для установки метаданных, таких как `date`, `caption` и `alt_text`. В вашем текущем коде вы пытаетесь передать параметр `date` непосредственно в файлах, что не будет работать.

Чтобы установить дату и другие метаданные для загружаемого медиафайла, вам нужно передать их в теле запроса при добавлении медиафайла. Вот как вы можете это сделать:

1. Сначала загрузите медиафайл, что вы уже делаете.
2. Затем используйте другой запрос POST для обновления метаданных файла.

Примерный код будет выглядеть так:

```python
import requests
from pathlib import Path
import datetime

def upload_media(file_path, timestamp):
    """ Функция загрузки фото в WordPress """
    dt = datetime.datetime.fromtimestamp(timestamp)
    dt = str(dt.strftime('%Y-%m-%dT%H:%M:%S'))
    print(f"Дата постинга фотографии: {dt}")

    file_path = Path(file_path)  # Корректный путь к файлу
    endpoint = f"{site_url}/wp-json/wp/v2/media"
    headers = {
        'Authorization': 'Basic ' + token_wp.decode('utf-8'),
        "Content-Disposition": f"attachment; filename={file_path.name};"
    }

    # Загрузка файла
    with open(file_path, 'rb') as file:
        response = requests.post(endpoint, headers=headers, files={'file': file})

    if response.status_code == 201:
        media_id = response.json()['id']
        print(f"Файл успешно загружен: {file_path.name}, media ID: {media_id}")

        # Обновление метаданных
        update_endpoint = f"{site_url}/wp-json/wp/v2/media/{media_id}"
        metadata = {
            'date': dt,
            'caption': 'Photo Instagram',
            'alt_text': 'Photo Instagram'
        }
        update_response = requests.post(update_endpoint, headers=headers, json=metadata)

        if update_response.status_code == 200:
            print("Метаданные успешно обновлены.")
        else:
            print(f"Ошибка при обновлении метаданных: {update_response.status_code}, {update_response.json()['message']}")
    else:
        print(f"Ошибка загрузки файла: {response.status_code}, {response.json()['message']}")
        exit()
```

Обратите внимание на использование второго запроса `/media/{media_id}` для обновления метаданных. В запросе на обновление вы передаете `date`, `caption` и `alt_text` в формате JSON.

Проверьте, что используемые вами данные предоставляют корректные значения и что у вас есть необходимые разрешения и настройки на стороне WordPress для выполнения этих операций.
В итоге сам разобрался: 
def upload_media(file_path, timestamp):
        """ Функция загрузки фото в Wordpress """
        dt = datetime.datetime.fromtimestamp(timestamp)
        dt = str(dt.strftime('%Y-%m-%dT%H:%M:%S'))
        print(f"Дата постинга фотографии: {dt}")
        file_path = Path(path_arh_insta + "/" + file_path)
        endpoint = f"{site_url}/wp-json/wp/v2/media"
        headers = {
            'Authorization': 'Basic ' + token_wp.decode('utf-8'),
            "Content-Disposition": f"attachment; filename={file_path};"
        }
        with open(file_path, 'rb') as file:
            response = requests.post(endpoint, headers=headers, files={'file': file}, data={'date': dt, 'caption': 'Photo Instagram', 'alt_text': 'Photo Instagram'})
        if response.status_code == 201:
            print(f">>> Файл успешно загружен:\n>>> Код для вставки в пост: {response.json()['description']['rendered']}\n>>> ")
            return response.json()['description']['rendered']
        else:
            logger.error(f"Ошибка загрузки файла: {response.status_code}, {response.json()['message']}")
            exit ()
Похожие вопросы