support spotify.link
This commit is contained in:
parent
971849da46
commit
37872de538
2 changed files with 22 additions and 5 deletions
|
@ -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()
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Reference in a new issue