Skip to content

Commit

Permalink
remove dependency on legacy spotify widget
Browse files Browse the repository at this point in the history
  • Loading branch information
teticio committed Sep 4, 2022
1 parent 2cb3328 commit b32a53f
Show file tree
Hide file tree
Showing 7 changed files with 1,484 additions and 807 deletions.
1 change: 1 addition & 0 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ yapf = "*"
pytest = "*"
pylint = "*"
flake8 = "*"
ipykernel = "*"

[requires]
python_version = "3.8"
2,243 changes: 1,476 additions & 767 deletions Pipfile.lock

Large diffs are not rendered by default.

41 changes: 4 additions & 37 deletions backend/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -286,39 +286,6 @@ async def get_access_token(request: Request):
return HTMLResponse(content=text, status_code=200)


async def get_track_widget(track_id):
"""Get Spotify track widget.
Args:
track_id (str): Spotify track ID.
Returns:
str: HTML as text.
"""
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/92.0.4515.159 Safari/537.36'
}
async with aiohttp.ClientSession() as session:
try:
async with session.get(
f'https://open.spotify.com/embed/track/{track_id}',
headers=headers) as response:
if response.status != 200:
raise HTTPException(status_code=response.status,
detail=response.reason)
text = await response.text()
except aiohttp.ClientError as error:
raise HTTPException(status_code=400, detail=str(error)) from error
soup = BeautifulSoup(text, 'html.parser')
#tag = soup.find(id="resource")
#track = json.loads(urllib.parse.unquote(tag.string))
#track['preview_url'] = deejai.urls.get(track_id, '')
#tag.string.replace_with(urllib.parse.quote(json.dumps(track)))
return str(soup)


@app.get('/api/v1/widget')
@cache(namespace=REDIS_NAMESPACE, expire=24 * 60 * 60)
async def widget(track_id: str):
Expand All @@ -331,8 +298,7 @@ async def widget(track_id: str):
Returns:
str: Base64 encoded HTML which can be embedded in an iframe.
"""
html = await get_track_widget(track_id)
return b64encode(html.encode('ascii'))
return await make_playlist_widget(f'["{track_id}"]')


@app.get('/api/v1/track_widget')
Expand All @@ -346,8 +312,6 @@ async def track_widget(track_id: str):
Returns:
str: HTML which can be embedded in an iframe.
"""
#html = await get_track_widget(track_id)
#return HTMLResponse(content=html, status_code=200)
return await make_playlist_widget(f'["{track_id}"]')


Expand Down Expand Up @@ -724,12 +688,15 @@ async def custom_http_exception_handler(request, exc):
class _StaticFiles(StaticFiles):
"""Hack because starlette StaticFiles returns PlainTextReponse instead of Exception
in case of 404
Also handle gzipped responses for js and css files
"""

async def get_response(self, path: str, scope: Scope) -> Response:
response = await super().get_response(path, scope)
if response.status_code == 404:
raise StarletteHTTPException(404, "Not found")
if path[-3:] == '.js' or path[-4:] == '.css':
response.headers['Content-Encoding'] = 'gzip'
return response


Expand Down
6 changes: 3 additions & 3 deletions playlist.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<link as="font" crossorigin="anonymous" href="https://encore.scdn.co/fonts/CircularSpTitle-Bold-2fbf72b606d7f0b0f771ea4956a8b4d6.woff2" rel="preload" type="font/woff2"/>
<link as="font" crossorigin="anonymous" href="https://encore.scdn.co/fonts/CircularSpTitle-Black-3f9afb402080d53345ca1850226ca724.woff2" rel="preload" type="font/woff2"/>
<link as="font" crossorigin="anonymous" href="https://open.spotifycdn.com/cdn/fonts/spoticon_regular_2.d319d911.woff2" rel="preload" type="font/woff2"/>
<link href="https://open.spotifycdn.com/cdn/build/embed-legacy/embed-legacy.831fa035.css" rel="stylesheet"/>
<link href="/embed-legacy.831fa035.css" rel="stylesheet"/>
<script data-testid="config" id="config" type="application/json">
{"enableLogin":true,"session":"1f4423jl7f1eiz4","clientId":"a46f5c5745a14fbf826186da8da5ecc3","accessToken":"","accessTokenExpirationTimestampMs":null,"isMobile":false,"isSpotified":false,"countryCode":"GB","premiumOnlyMarket":false,"isAnonymous":true,"features":{},"appName":"web_player_embed","market":"GB","locale":{"locale":"en","rtl":false,"textDirection":"ltr"},"userCountry":null,"isPremium":false,"correlationId":"8345b5e8e48e886995348177f8e9e8f3","gtmId":"GTM-PZHN3VD","optimizeId":"GTM-W53X654","babaExperiments":"","retargetingPixels":{"twitter":"o0fpx","pinterest":"2613898645044","snapchat":"38d8444a-feca-4a00-8ce8-24c20d195d67"},"recaptchaWebPlayerFraudSiteKey":"6LfCVLAUAAAAALFwwRnnCJ12DalriUGbj8FW_J39"}
</script>
Expand All @@ -27,7 +27,7 @@
<script id="resource" type="application/json">
%7B%22images%22%3A%20%5B%7B%22height%22%3A%20640%2C%20%22url%22%3A%20%22https%3A//i.scdn.co/image/ab67616d0000b273c2ced39899b0d67cd5a724fa%22%2C%20%22width%22%3A%20640%7D%2C%20%7B%22height%22%3A%20300%2C%20%22url%22%3A%20%22https%3A//i.scdn.co/image/ab67616d00001e02c2ced39899b0d67cd5a724fa%22%2C%20%22width%22%3A%20300%7D%2C%20%7B%22height%22%3A%2064%2C%20%22url%22%3A%20%22https%3A//i.scdn.co/image/ab67616d00004851c2ced39899b0d67cd5a724fa%22%2C%20%22width%22%3A%2064%7D%5D%2C%20%22tracks%22%3A%20%7B%22items%22%3A%20%5B%7B%22track%22%3A%20%7B%22is_local%22%3A%20true%2C%20%22is_playable%22%3A%20true%2C%20%22name%22%3A%20%22%2A%20The%20Static%20Age%22%2C%20%22preview_url%22%3A%20%22https%3A//p.scdn.co/mp3-preview/edf247c4a3c34bfa7bfed66be2e6c37592a2a6b7%3Fcid%3D194086cb37be48ebb45b9ba4ce4c5936%22%2C%20%22artists%22%3A%20%5B%7B%22name%22%3A%20%22Green%20Day%22%7D%5D%2C%20%22duration_ms%22%3A%20%2230000%22%2C%20%22uri%22%3A%20%22spotify%3Atrack0c0ptxjRaqaxMM8gvSWCG0%22%7D%7D%2C%20%7B%22track%22%3A%20%7B%22is_local%22%3A%20true%2C%20%22is_playable%22%3A%20true%2C%20%22name%22%3A%20%22Bouncing%20Off%20The%20Walls%22%2C%20%22preview_url%22%3A%20%22https%3A//p.scdn.co/mp3-preview/7ca28d7743e9ad1e4f4c85f3aaa2373d1e80572a%3Fcid%3D194086cb37be48ebb45b9ba4ce4c5936%22%2C%20%22artists%22%3A%20%5B%7B%22name%22%3A%20%22Sugarcult%22%7D%5D%2C%20%22duration_ms%22%3A%20%2230000%22%2C%20%22uri%22%3A%20%22spotify%3Atrack1rUHLQEmtefobuukC1SVDf%22%7D%7D%2C%20%7B%22track%22%3A%20%7B%22is_local%22%3A%20true%2C%20%22is_playable%22%3A%20true%2C%20%22name%22%3A%20%22American%20Eulogy%3A%20Mass%20Hysteria%20/%20Modern%20World%22%2C%20%22preview_url%22%3A%20%22https%3A//p.scdn.co/mp3-preview/f29d3bb1ae8f063bb25c79ae11c48e73f2dfc2e6%3Fcid%3D194086cb37be48ebb45b9ba4ce4c5936%22%2C%20%22artists%22%3A%20%5B%7B%22name%22%3A%20%22Green%20Day%22%7D%5D%2C%20%22duration_ms%22%3A%20%2230000%22%2C%20%22uri%22%3A%20%22spotify%3Atrack2DSgsIY3ZCjx7DhMNRzsSS%22%7D%7D%2C%20%7B%22track%22%3A%20%7B%22is_local%22%3A%20true%2C%20%22is_playable%22%3A%20true%2C%20%22name%22%3A%20%22Screamer%22%2C%20%22preview_url%22%3A%20%22https%3A//p.scdn.co/mp3-preview/dad2a415e7359b33c59400e5eac71c78017ef729%3Fcid%3D194086cb37be48ebb45b9ba4ce4c5936%22%2C%20%22artists%22%3A%20%5B%7B%22name%22%3A%20%22Good%20Charlotte%22%7D%5D%2C%20%22duration_ms%22%3A%20%2230000%22%2C%20%22uri%22%3A%20%22spotify%3Atrack5atOXzX69XW1pglsNdBZFz%22%7D%7D%2C%20%7B%22track%22%3A%20%7B%22is_local%22%3A%20true%2C%20%22is_playable%22%3A%20true%2C%20%22name%22%3A%20%22Angel%20Blue%22%2C%20%22preview_url%22%3A%20%22https%3A//p.scdn.co/mp3-preview/cacdb2da4378591594634482a8ebf1357843bc2a%3Fcid%3D194086cb37be48ebb45b9ba4ce4c5936%22%2C%20%22artists%22%3A%20%5B%7B%22name%22%3A%20%22Green%20Day%22%7D%5D%2C%20%22duration_ms%22%3A%20%2230000%22%2C%20%22uri%22%3A%20%22spotify%3Atrack4Rce7Dk3rYxcAbpRUvGPmV%22%7D%7D%2C%20%7B%22track%22%3A%20%7B%22is_local%22%3A%20true%2C%20%22is_playable%22%3A%20true%2C%20%22name%22%3A%20%22There%20Will%20Be%20Blood%22%2C%20%22preview_url%22%3A%20%22https%3A//p.scdn.co/mp3-preview/6dac81fa530795913f8b0df5cfb9c984baf80100%3Fcid%3D194086cb37be48ebb45b9ba4ce4c5936%22%2C%20%22artists%22%3A%20%5B%7B%22name%22%3A%20%22Sum%2041%22%7D%5D%2C%20%22duration_ms%22%3A%20%2230000%22%2C%20%22uri%22%3A%20%22spotify%3Atrack2Ffof1f2gKzre8fjFBzHe8%22%7D%7D%2C%20%7B%22track%22%3A%20%7B%22is_local%22%3A%20true%2C%20%22is_playable%22%3A%20true%2C%20%22name%22%3A%20%22Baby%20Eyes%22%2C%20%22preview_url%22%3A%20%22https%3A//p.scdn.co/mp3-preview/7cd5d7e8bb0559ff6b77ea56297915343e67776c%3Fcid%3D194086cb37be48ebb45b9ba4ce4c5936%22%2C%20%22artists%22%3A%20%5B%7B%22name%22%3A%20%22Green%20Day%22%7D%5D%2C%20%22duration_ms%22%3A%20%2230000%22%2C%20%22uri%22%3A%20%22spotify%3Atrack0tFdjFoHrOXX4kMa5JpjWG%22%7D%7D%2C%20%7B%22track%22%3A%20%7B%22is_local%22%3A%20true%2C%20%22is_playable%22%3A%20true%2C%20%22name%22%3A%20%2213%20Voices%22%2C%20%22preview_url%22%3A%20%22https%3A//p.scdn.co/mp3-preview/3abd5e44ea01b2711070ad4d0792b888834820d8%3Fcid%3D194086cb37be48ebb45b9ba4ce4c5936%22%2C%20%22artists%22%3A%20%5B%7B%22name%22%3A%20%22Sum%2041%22%7D%5D%2C%20%22duration_ms%22%3A%20%2230000%22%2C%20%22uri%22%3A%20%22spotify%3Atrack2730j592jE4F4zHE9rebGZ%22%7D%7D%2C%20%7B%22track%22%3A%20%7B%22is_local%22%3A%20true%2C%20%22is_playable%22%3A%20true%2C%20%22name%22%3A%20%22Lady%20Cobra%22%2C%20%22preview_url%22%3A%20%22https%3A//p.scdn.co/mp3-preview/fc91e08a9c14e74801a789eab49143ef6c1432e7%3Fcid%3D194086cb37be48ebb45b9ba4ce4c5936%22%2C%20%22artists%22%3A%20%5B%7B%22name%22%3A%20%22Green%20Day%22%7D%5D%2C%20%22duration_ms%22%3A%20%2230000%22%2C%20%22uri%22%3A%20%22spotify%3Atrack70TeuHuMoVRxkMh0SefQOF%22%7D%7D%2C%20%7B%22track%22%3A%20%7B%22is_local%22%3A%20true%2C%20%22is_playable%22%3A%20true%2C%20%22name%22%3A%20%22Breaking%20The%20Chain%22%2C%20%22preview_url%22%3A%20%22https%3A//p.scdn.co/mp3-preview/f4265b84a367e78131865247ee31d444a8300bfd%3Fcid%3D194086cb37be48ebb45b9ba4ce4c5936%22%2C%20%22artists%22%3A%20%5B%7B%22name%22%3A%20%22Sum%2041%22%7D%5D%2C%20%22duration_ms%22%3A%20%2230000%22%2C%20%22uri%22%3A%20%22spotify%3Atrack1ijfXmenqXnS37PioJBvjp%22%7D%7D%5D%7D%2C%20%22type%22%3A%20%22playlist%22%2C%20%22uri%22%3A%20%22spotify%3Aplaylist%3A2p8cnjuIgVpsWln5HfbqTk%22%2C%20%22href%22%3A%20%22https%3A//api.spotify.com/v1/playlist/2p8cnjuIgVpsWln5HfbqTk%22%2C%20%22dominantColor%22%3A%20%22%23901808%22%2C%20%22name%22%3A%20%22%2A%20The%20Static%20Age%22%2C%20%22owner%22%3A%20%7B%22display_name%22%3A%20%22Green%20Day%22%7D%7D
</script>
<script defer="" src="https://open.spotifycdn.com/cdn/build/embed-legacy/embed-legacy.fbfabdfc.js"></script>
<script defer="" src="https://open.spotifycdn.com/cdn/build/embed-legacy/vendor~embed-legacy.e0b956ac.js"></script>
<script defer="" src="/embed-legacy.fbfabdfc.js"></script>
<script defer="" src="/vendor~embed-legacy.e0b956ac.js"></script>
</body>
</html>
Binary file added public/embed-legacy.831fa035.css
Binary file not shown.
Binary file added public/embed-legacy.fbfabdfc.js
Binary file not shown.
Binary file added public/vendor~embed-legacy.e0b956ac.js
Binary file not shown.

0 comments on commit b32a53f

Please sign in to comment.