Adding endpoints for jukebox

This commit is contained in:
Ben Arc 2021-05-05 19:20:53 +01:00
parent bfdff79dd5
commit a698ba7a26
2 changed files with 72 additions and 6 deletions

View File

@ -227,6 +227,7 @@ new Vue({
self.jukeboxDialog.data.sp_playlists = self.jukeboxDialog.data.sp_playlists.join()
self.updateDB()
self.jukeboxDialog.show = false
self.getJukeboxes()
},
updateDB(){
self = this
@ -234,14 +235,16 @@ new Vue({
LNbits.api
.request(
'PUT',
'/jukebox/api/v1/jukebox/' + self.jukeboxDialog.data.sp_id,
'/jukebox/api/v1/jukebox/' + this.jukeboxDialog.data.sp_id,
self.g.user.wallets[0].adminkey,
self.jukeboxDialog.data
)
.then(function (response) {
console.log(response.data)
self.getJukeboxes()
//self.JukeboxLinks.push(mapJukebox(response.data))
if(this.jukeboxDialog.data.devices){
self.getJukeboxes()
}
self.JukeboxLinks.push(mapJukebox(response.data))
})
},
playlistApi(method, url, body) {

View File

@ -1,6 +1,8 @@
from quart import g, jsonify, request
from http import HTTPStatus
from lnurl.exceptions import InvalidUrl as LnurlInvalidUrl # type: ignore
from base64 import urlsafe_b64encode
import base64
from lnbits.decorators import api_check_wallet_key, api_validate_post_request
import httpx
@ -104,13 +106,74 @@ async def api_delete_item(juke_id):
return "", HTTPStatus.NO_CONTENT
################JUKEBOX ENDPOINTS##################
@jukebox_ext.route("/api/v1/jukebox/jb/<sp_id>", methods=["GET"])
async def api_get_jukebox_songs(sp_id):
jukebox = await get_jukebox(sp_id)
print(jukebox.playlists.split(",")[0].split("-")[1])
print(jukebox.sp_playlists.split(",")[0].split("-")[1])
async with httpx.AsyncClient() as client:
try:
r = await client.get(
"https://api.spotify.com/v1/playlists/"
+ jukebox.sp_playlists.split(",")[0].split("-")[1]
+ "/tracks",
timeout=40,
headers={"Authorization": "Bearer " + jukebox.sp_access_token},
)
if r.json()["error"]["status"] == 401:
token = await api_get_token(sp_id)
if token['error'] == 'invalid_client':
print("invalid")
return ""
else:
return await api_get_jukebox_songs(sp_id)
print(r.json()["items"])
resp = r.json()["items"][0]
print("id: " + resp["track"]["id"])
print("name: " + resp["track"]["name"])
print("album: " + resp["track"]["album"]["name"])
print("artist: " + resp["track"]["artists"][0]["name"])
print("image: " + resp["track"]["album"]["images"][0])
except AssertionError:
something = None
return jsonify(jukebox._asdict()), HTTPStatus.CREATED
return jsonify(jukebox._asdict()), HTTPStatus.CREATED
@jukebox_ext.route("/api/v1/jukebox/jb/<sp_id>", methods=["GET"])
async def api_get_token(sp_id):
jukebox = await get_jukebox(sp_id)
print(jukebox.sp_playlists.split(",")[0].split("-")[1])
async with httpx.AsyncClient() as client:
try:
r = await client.post(
"https://accounts.spotify.com/api/token",
timeout=40,
params={
"grant_type": "refresh_token",
"refresh_token": jukebox.sp_refresh_token,
"client_id": jukebox.sp_user,
},
headers={
"Authorization": "Bearer "
+ base64.b64encode(
(jukebox.sp_user + ":" + jukebox.sp_refresh_token).encode(
"utf-8"
)
).decode("ascii"),
"Content-Type": "application/x-www-form-urlencoded",
},
)
print(r)
print(r.json())
if r.json()['error'] == 'invalid_client':
return r.json()
#await update_jukebox(
# juke_id=sp_id,
# sp_access_token=r.json()["access_token"],
# sp_refresh_token=r.json()["refresh_token"],
#)
except AssertionError:
something = None
return jsonify(jukebox._asdict()), HTTPStatus.CREATED