| from googleapiclient.discovery import build |
| from googleapiclient.http import MediaFileUpload |
| from .base import validate_payload |
| from .auth import get_token |
|
|
|
|
| async def publish_shorts(payload: dict): |
|
|
| payload = validate_payload(payload) |
|
|
| youtube = build( |
| "youtube", |
| "v3", |
| developerKey=get_token("YOUTUBE_API_KEY"), |
| ) |
|
|
| request = youtube.videos().insert( |
| part="snippet,status", |
| body={ |
| "snippet": { |
| "title": payload["caption"][:90], |
| "description": payload["caption"], |
| "tags": payload["hashtags"], |
| "categoryId": "22", |
| }, |
| "status": {"privacyStatus": "public"}, |
| }, |
| media_body=MediaFileUpload(payload["video_path"]), |
| ) |
|
|
| response = request.execute() |
|
|
| return { |
| "platform": "shorts", |
| "video_id": response["id"], |
| "status": "published", |
| } |