diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index 192fc024cbd890f01aa5ef079c139a0039c6a373..99e3dc40cfe676e3c04bdb538030ce49ab60f50e 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -387,6 +387,10 @@ class TrackActivitySerializer(activity_serializers.ModelSerializer): return "Audio" +def get_embed_url(type, id): + return settings.FUNKWHALE_EMBED_URL + "?type={}&id={}".format(type, id) + + class OembedSerializer(serializers.Serializer): format = serializers.ChoiceField(choices=["json"]) url = serializers.URLField() @@ -473,10 +477,7 @@ class OembedSerializer(serializers.Serializer): data[ "html" ] = '<iframe width="{}" height="{}" scrolling="no" frameborder="no" src="{}"></iframe>'.format( - data["width"], - data["height"], - settings.FUNKWHALE_EMBED_URL - + "?type={}&id={}".format(embed_type, embed_id), + data["width"], data["height"], get_embed_url(embed_type, embed_id) ) return data diff --git a/api/funkwhale_api/music/spa_views.py b/api/funkwhale_api/music/spa_views.py index e71612caefd427578936e4285ba7bc9e6acd6cbb..351431d0f1e451898a78bb58d400175cc9f0fe3c 100644 --- a/api/funkwhale_api/music/spa_views.py +++ b/api/funkwhale_api/music/spa_views.py @@ -6,6 +6,20 @@ from django.urls import reverse from funkwhale_api.common import utils from . import models +from . import serializers + + +def get_twitter_card_metas(type, id): + return [ + {"tag": "meta", "property": "twitter:card", "content": "player"}, + { + "tag": "meta", + "property": "twitter:player", + "content": serializers.get_embed_url(type, id), + }, + {"tag": "meta", "property": "twitter:player:width", "content": "600"}, + {"tag": "meta", "property": "twitter:player:height", "content": "400"}, + ] def library_track(request, pk): @@ -72,6 +86,8 @@ def library_track(request, pk): ), } ) + # twitter player is also supported in various software + metas += get_twitter_card_metas(type="track", id=obj.pk) return metas @@ -131,6 +147,8 @@ def library_album(request, pk): ), } ) + # twitter player is also supported in various software + metas += get_twitter_card_metas(type="album", id=obj.pk) return metas diff --git a/api/tests/music/test_spa_views.py b/api/tests/music/test_spa_views.py index 7761e313f33747c0c30f5ad62ed1992b2d376566..901c6fe436850ccd284970c26569413487be52a4 100644 --- a/api/tests/music/test_spa_views.py +++ b/api/tests/music/test_spa_views.py @@ -3,6 +3,7 @@ import urllib.parse from django.urls import reverse from funkwhale_api.common import utils +from funkwhale_api.music import serializers def test_library_track(spa_html, no_api_auth, client, factories, settings): @@ -68,6 +69,14 @@ def test_library_track(spa_html, no_api_auth, client, factories, settings): ) ), }, + {"tag": "meta", "property": "twitter:card", "content": "player"}, + { + "tag": "meta", + "property": "twitter:player", + "content": serializers.get_embed_url("track", id=track.id), + }, + {"tag": "meta", "property": "twitter:player:width", "content": "600"}, + {"tag": "meta", "property": "twitter:player:height", "content": "400"}, ] metas = utils.parse_meta(response.content.decode()) @@ -122,6 +131,14 @@ def test_library_album(spa_html, no_api_auth, client, factories, settings): ) ), }, + {"tag": "meta", "property": "twitter:card", "content": "player"}, + { + "tag": "meta", + "property": "twitter:player", + "content": serializers.get_embed_url("album", id=album.id), + }, + {"tag": "meta", "property": "twitter:player:width", "content": "600"}, + {"tag": "meta", "property": "twitter:player:height", "content": "400"}, ] metas = utils.parse_meta(response.content.decode()) diff --git a/changes/changelog.d/578.enhancement b/changes/changelog.d/578.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..194ad211190ada13307941451ccb092118016ad7 --- /dev/null +++ b/changes/changelog.d/578.enhancement @@ -0,0 +1 @@ +Added twitter:* meta tags to detect tracks and albums players automatically on more sites (#578)