Add playlist loading feature and integrate YouTube API for playlist generation

This commit is contained in:
Edgar P. Burkhart 2025-06-14 11:49:04 +02:00
parent 95969b897b
commit 094c5c104d
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
9 changed files with 230 additions and 39 deletions

View file

@ -1,8 +1,6 @@
import random
import google.oauth2.credentials
import google_auth_oauthlib
import googleapiclient.discovery
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
@ -15,7 +13,7 @@ from django.views import View
from django.views.generic.detail import DetailView, SingleObjectMixin
from django.views.generic.edit import CreateView, DeleteView, UpdateView
from . import forms, models, utils
from . import forms, models, tasks, utils
class OwnerFilterMixin(LoginRequiredMixin):
@ -207,7 +205,7 @@ class GameCreateView(LoginRequiredMixin, CreateView):
players = []
musics = []
for player in form.instance.players.all():
players += 2 * [player]
players += form.instance.n * [player]
musics += random.sample(
list(
player.musicvideo_set.filter(group=group, blacklisted=False).all()
@ -225,40 +223,9 @@ class GameCreateView(LoginRequiredMixin, CreateView):
)
if creds := self.request.user.youtubecredentials:
credentials = google.oauth2.credentials.Credentials(**creds.credentials)
yt_api = googleapiclient.discovery.build(
"youtube", "v3", credentials=credentials
)
pl_request = yt_api.playlists().insert(
part="snippet,status",
body={
"snippet": {
"title": f"Musik {group.name} {form.instance.date.strftime('%x')}",
"description": "Playlist générée par Musik",
},
"status": {
"privacyStatus": "private",
},
},
)
pl_response = pl_request.execute()
pl_id = pl_response.get("id")
form.instance.playlist = pl_id
form.instance.playlist_loading = True
form.instance.save()
for _, music in pm_list:
request = yt_api.playlistItems().insert(
part="snippet",
body={
"snippet": {
"playlistId": pl_id,
"resourceId": {
"kind": "youtube#video",
"videoId": music.yt_id,
},
}
},
)
request.execute()
tasks.generate_playlist.delay_on_commit(creds.credentials, form.instance.pk)
return res