В настоящее время я использую конечную точку video_reels Facebook для загрузки видео в виде роликов. Для локальных файлов этот процесс отлично работает, загружая видео в двоичной форме. Однако я хочу не загружать видео локально, если оно размещено в CDN, а вместо этого загружать его напрямую с URL-адреса CDN.
Вот упрощенная версия моего текущего кода:
Код: Выделить всё
import requests
# Facebook API parameters
page_access_token = 'your_page_access_token'
page_id = 'your_page_id'
api_version = 'v20.0'
video_url = 'https://cdn.example.com/video.mp4' # CDN URL of the video
video_description = "My awesome reel"
video_title = "Reel Title"
thumbnail_path = 'thumb.jpg'
# Step 1: Initialize the upload session for reels
def initialize_upload_reel():
url = f"https://graph.facebook.com/{api_version}/{page_id}/video_reels"
payload = {
'upload_phase': 'start',
'access_token': page_access_token
}
response = requests.post(url, data=payload)
if response.status_code == 200:
data = response.json()
video_id = data['video_id']
print(f"Upload session started. Video ID: {video_id}")
return video_id
else:
raise Exception(f"Error initializing reel upload: {response.text}")
# Step 2: Upload the reel video file
def process_upload_reel(video_id, file_size):
url = f"https://rupload.facebook.com/video-upload/v20.0/{video_id}"
headers = {
'Authorization': f'OAuth {page_access_token}',
'Content-Type': 'application/octet-stream',
'offset': '0',
'file_size': str(file_size)
}
with open(video_url, 'rb') as file_data:
response = requests.post(url, headers=headers, data=file_data)
if response.status_code == 200:
print("Reel Uploaded")
else:
raise Exception(f"Error uploading reel video: {response.text}")
def publish_reel(video_id, description, publish_time=None, published=True):
url = f"https://graph.facebook.com/{api_version}/{page_id}/video_reels"
thumb_file = {'thumb': open(thumbnail_url, 'rb')}
payload = {
'access_token': page_access_token,
'video_id': video_id,
'upload_phase': 'finish',
'title': title_entry.get(), # Ensure title is passed
'description': description_entry.get() # Ensure description is passed
}
if publish_time:
payload['video_state'] = 'SCHEDULED'
payload['scheduled_publish_time'] = publish_time
else:
payload['video_state'] = 'PUBLISHED' if published else 'DRAFT'
response = requests.post(url, data=payload, files=thumb_file)
thumb_file['thumb'].close()
if response.status_code == 200:
check_video_status(video_id)
else:
raise Exception(f"Error publishing reel: {response.text}")
Когда я пытаюсь выполнить загрузку с помощью URL-адреса CDN, я получаю следующее сообщение об ошибке:
Код: Выделить всё
{
"error": {
"message": "There was a problem uploading your video file. Please try again with another file.",
"type": "OAuthException",
"code": 6000,
"error_subcode": 1363130,
"error_user_title": "Video Upload Is Missing",
"error_user_msg": "The video was not uploaded.",
"fbtrace_id": "Ai3SicB2QxOVA-ZpIQu7cjT"
}
}
Вопрос:
Можно ли загружать видео непосредственно с URL-адреса CDN в Facebook Reels через API Graph без предварительной загрузки видео локально?
Если да, то как должен ли я структурировать свой запрос API для достижения это?
Если нет, каков рекомендуемый подход к обработке видео, размещенных на CDN, в этом сценарии (например, избегать загрузки видео на сервер)?
Любая помощь или рекомендации буду очень признателен!
Подробнее здесь: https://stackoverflow.com/questions/789 ... t-download
Мобильная версия