support spotify.link

This commit is contained in:
Your Name 2023-09-16 15:38:25 -04:00 committed by Henri Dickson
parent 971849da46
commit 37872de538
2 changed files with 22 additions and 5 deletions

View file

@ -13,6 +13,7 @@ from dataclasses import dataclass, field
from typing import Callable, Type
import django_rq
import requests
from .models import ExternalResource, IdealIdTypes, IdType, Item, SiteName
@ -275,6 +276,21 @@ class SiteManager:
cls = next(
filter(lambda p: p.validate_url(url), SiteManager.registry.values()), None
)
if cls is None:
try:
url2 = requests.head(url, allow_redirects=True, timeout=1).url
if url2 != url:
cls = next(
filter(
lambda p: p.validate_url(url2),
SiteManager.registry.values(),
),
None,
)
if cls:
url = url2
except:
pass
if cls is None:
cls = next(
filter(
@ -292,11 +308,6 @@ class SiteManager:
cls = SiteManager.registry[id_type]
return cls(id_value=id_value)
@staticmethod
def get_id_by_url(url: str):
site = SiteManager.get_site_by_url(url)
return site.url_to_id(url) if site else None
@staticmethod
def get_all_sites():
return SiteManager.register.values()

View file

@ -26,6 +26,12 @@ class SpotifyTestCase(TestCase):
self.assertEqual(site.url, t_url)
self.assertEqual(site.id_value, t_id_value)
t_url2 = "https://spotify.link/poyfZyBo6Cb"
t_id_value2 = "3yu2aNKeWTxqCjqoIH4HDU"
site = SiteManager.get_site_by_url(t_url2)
self.assertIsNotNone(site)
self.assertEqual(site.id_value, t_id_value2)
@use_local_response
def test_scrape(self):
t_url = "https://open.spotify.com/album/65KwtzkJXw7oT819NFWmEP"