Add playlist field to MusikGame model and update YouTube credentials handling in views
This commit is contained in:
parent
4b2f695afb
commit
122ae40570
8 changed files with 128 additions and 4 deletions
|
@ -1,6 +1,8 @@
|
|||
import random
|
||||
|
||||
import google.oauth2.credentials
|
||||
import google_auth_oauthlib
|
||||
import googleapiclient.discovery
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.db.models import Count, Q
|
||||
|
@ -131,6 +133,42 @@ class GameCreateView(LoginRequiredMixin, CreateView):
|
|||
models.MusicGameOrder.objects.create(
|
||||
game=form.instance, player=player, music_video=music, order=order
|
||||
)
|
||||
|
||||
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.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()
|
||||
return res
|
||||
|
||||
|
||||
|
@ -173,8 +211,18 @@ class YoutubeCallbackView(LoginRequiredMixin, View):
|
|||
|
||||
flow.fetch_token(code=request.GET.get("code"))
|
||||
|
||||
credentials = models.YoutubeCredentials(
|
||||
user=request.user, credentials=flow.credentials.to_json()
|
||||
credentials = flow.credentials
|
||||
models.YoutubeCredentials.objects.update_or_create(
|
||||
user=request.user,
|
||||
defaults={
|
||||
"credentials": {
|
||||
"token": credentials.token,
|
||||
"refresh_token": credentials.refresh_token,
|
||||
"token_uri": credentials.token_uri,
|
||||
"client_id": credentials.client_id,
|
||||
"client_secret": credentials.client_secret,
|
||||
"granted_scopes": credentials.granted_scopes,
|
||||
}
|
||||
},
|
||||
)
|
||||
credentials.save()
|
||||
return redirect("/")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue