From affc5719262e166360aee7cc86c177828f5dba1d Mon Sep 17 00:00:00 2001 From: Asko Soukka Date: Fri, 15 Jan 2021 21:19:30 +0200 Subject: [PATCH 1/2] Replace dependency on noembed with python-oembed and generated providers list --- Makefile | 5 + generate_embed_providers.py | 40 + plone/app/standardtiles/embed.py | 55 +- plone/app/standardtiles/embed_providers.py | 1906 +++++++++++++++++++ plone/app/standardtiles/media.zcml | 2 +- plone/app/standardtiles/tests/test_media.py | 6 +- setup.py | 1 + 7 files changed, 2003 insertions(+), 12 deletions(-) create mode 100644 Makefile create mode 100755 generate_embed_providers.py create mode 100644 plone/app/standardtiles/embed_providers.py diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..da605357 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +all: plone/app/standardtiles/embed_providers.py + +plone/app/standardtiles/embed_providers.py: generate_embed_providers.py + ./generate_embed_providers.py > plone/app/standardtiles/embed_providers.py + diff --git a/generate_embed_providers.py b/generate_embed_providers.py new file mode 100755 index 00000000..c5c79df2 --- /dev/null +++ b/generate_embed_providers.py @@ -0,0 +1,40 @@ +#!/usr/bin/env nix-shell +#!nix-shell -p "python3.withPackages(ps: with ps; [ requests pyyaml ])" -i python3 + +import io +import json +import requests +import tarfile +import yaml +import datetime + +URL = "https://github.com/iamcal/oembed/archive/master.tar.gz" + +r = requests.get(URL, allow_redirects=True) +fp = io.BytesIO(r.content) +fp.seek(0) + +endpoints = [] + +tar = tarfile.open(fileobj=fp, mode="r:gz") +for info in tar: + if all([ + info.isfile(), + "providers" in info.path, + info.path.endswith(".yml") + ]): + fb_ = tar.extractfile(info) + data = yaml.safe_load(fb_) + for provider in data: + for e in provider['endpoints']: + endpoints.append([ + e['url'], + e.get('schemes', [provider['provider_url'] + '*']) + ]) + +print(f"""\ +\"\"\"oEmbed providers from https://github.com/iamcal/oembed\"\"\" +# {datetime.datetime.now().isoformat()} + +PROVIDERS = {json.dumps(sorted(endpoints), indent=4)} +""") diff --git a/plone/app/standardtiles/embed.py b/plone/app/standardtiles/embed.py index a905d457..df7daf3d 100644 --- a/plone/app/standardtiles/embed.py +++ b/plone/app/standardtiles/embed.py @@ -1,14 +1,32 @@ # -*- coding: utf-8 -*- from plone.app.standardtiles import _PMF as _ +from plone.app.standardtiles import embed_providers from plone.memoize import ram from plone.supermodel.model import Schema from plone.tiles import Tile from zope import schema -import requests +import oembed +try: + from urllib.error import HTTPError +except ImportError: # py2 + from urllib2 import HTTPError -NOEMBED_ENDPOINT = 'https://noembed.com/embed?url=' + +CONSUMER = oembed.OEmbedConsumer() +ENABLED_PROVIDERS = [] +DISABLED_PROVIDERS = [] + +for endpoint, scheme in embed_providers.PROVIDERS: + try: + oe = oembed.OEmbedEndpoint(endpoint, scheme) + ENABLED_PROVIDERS.append(endpoint) + except: # noqa + # Some endpoints fail to register + DISABLED_PROVIDERS.append(endpoint) + continue + CONSUMER.addEndpoint(oe) class IEmbedTile(Schema): @@ -20,16 +38,39 @@ class IEmbedTile(Schema): required=True ) + maxwidth = schema.Int( + title=_(u"Maximum width"), + required=False + ) + + maxheight = schema.Int( + title=_(u"Maximum height"), + required=False + ) + class EmbedTile(Tile): """ A tile that embeds media. """ - @ram.cache(lambda method, obj: obj.data.get('media_url')) + @ram.cache(lambda method, obj: (obj.data.get('media_url'), + obj.data.get('maxwidth'), + obj.data.get('maxheight'))) def __call__(self): media_url = self.data.get('media_url') - url = NOEMBED_ENDPOINT + media_url - rr = requests.get(url) - if rr.ok: - data = rr.json() + maxwidth = self.data.get('maxwidth') or None + maxheight = self.data.get('maxheight') or None + + try: + response = CONSUMER.embed( + media_url, + maxwidth=maxwidth, + maxheight=maxheight, + ) + data = response.getData() + except (oembed.OEmbedError, HTTPError) as e: + data = { + "html": "
" + str(e) + "
" + } + return u"%s" % data['html'] diff --git a/plone/app/standardtiles/embed_providers.py b/plone/app/standardtiles/embed_providers.py new file mode 100644 index 00000000..7b33219c --- /dev/null +++ b/plone/app/standardtiles/embed_providers.py @@ -0,0 +1,1906 @@ +"""oEmbed providers from https://github.com/iamcal/oembed""" +# 2021-01-15T20:40:55.948762 + +PROVIDERS = [ + [ + "http://*.wiredrive.com/present-oembed/", + [ + "https://*.wiredrive.com/*" + ] + ], + [ + "http://animoto.com/oembeds/create", + [ + "http://animoto.com/play/*" + ] + ], + [ + "http://api.clyp.it/oembed/", + [ + "http://clyp.it/*", + "http://clyp.it/playlist/*" + ] + ], + [ + "http://api.embed.ly/1/oembed", + [ + "http://api.embed.ly/*" + ] + ], + [ + "http://api.geograph.org.uk/api/oembed", + [ + "http://*.geograph.org.uk/*", + "http://*.geograph.co.uk/*", + "http://*.geograph.ie/*", + "http://*.wikimedia.org/*_geograph.org.uk_*" + ] + ], + [ + "http://api.inphood.com/oembed", + [ + "http://*.inphood.com/*" + ] + ], + [ + "http://api.mobypicture.com/oEmbed", + [ + "http://www.mobypicture.com/user/*/view/*", + "http://moby.to/*" + ] + ], + [ + "http://app.wizer.me/api/oembed.{format}", + [ + "http://*.wizer.me/learn/*", + "https://*.wizer.me/learn/*", + "http://*.wizer.me/preview/*", + "https://*.wizer.me/preview/*" + ] + ], + [ + "http://axiom.ninja/oembed/", + [ + "http://axiom.ninja/*" + ] + ], + [ + "http://backend.deviantart.com/oembed", + [ + "http://*.deviantart.com/art/*", + "http://*.deviantart.com/*#/d*", + "http://fav.me/*", + "http://sta.sh/*", + "https://*.deviantart.com/art/*", + "https://*.deviantart.com/*/art/*", + "https://sta.sh/*\",", + "https://*.deviantart.com/*#/d*\"" + ] + ], + [ + "http://boxofficebuz.com/oembed", + [ + "http://boxofficebuz.com*" + ] + ], + [ + "http://cacoo.com/oembed.{format}", + [ + "https://cacoo.com/diagrams/*" + ] + ], + [ + "http://carbonhealth.com/oembed", + [ + "https://carbonhealth.com/practice/*" + ] + ], + [ + "http://chirb.it/oembed.{format}", + [ + "http://chirb.it/*" + ] + ], + [ + "http://coub.com/api/oembed.{format}", + [ + "http://coub.com/view/*", + "http://coub.com/embed/*" + ] + ], + [ + "http://crowdranking.com/api/oembed.{format}", + [ + "http://crowdranking.com/*/*" + ] + ], + [ + "http://dotsub.com/services/oembed", + [ + "http://dotsub.com/view/*" + ] + ], + [ + "http://edocr.com/api/oembed", + [ + "http://edocr.com/docs/*" + ] + ], + [ + "http://egliseinfo.catholique.fr/api/oembed", + [ + "http://egliseinfo.catholique.fr/*" + ] + ], + [ + "http://embed.chartblocks.com/1.0/oembed", + [ + "http://public.chartblocks.com/c/*" + ] + ], + [ + "http://embed.gettyimages.com/oembed", + [ + "http://gty.im/*" + ] + ], + [ + "http://embedarticles.com/oembed/", + [ + "http://embedarticles.com/*" + ] + ], + [ + "http://geo.hlipp.de/restapi.php/api/oembed", + [ + "http://geo-en.hlipp.de/*", + "http://geo.hlipp.de/*", + "http://germany.geograph.org/*" + ] + ], + [ + "http://huffduffer.com/oembed", + [ + "http://huffduffer.com/*/*" + ] + ], + [ + "http://img.catbo.at/oembed.json", + [ + "http://img.catbo.at/*" + ] + ], + [ + "http://learningapps.org/oembed.php", + [ + "http://learningapps.org/*" + ] + ], + [ + "http://mathembed.com/oembed", + [ + "http://mathembed.com/latex?inputText=*", + "http://mathembed.com/latex?inputText=*" + ] + ], + [ + "http://official.fm/services/oembed.{format}", + [ + "http://official.fm/tracks/*", + "http://official.fm/playlists/*" + ] + ], + [ + "http://on.aol.com/api", + [ + "http://on.aol.com/video/*" + ] + ], + [ + "http://orbitvu.co/service/oembed", + [ + "https://orbitvu.co/001/*/ov3601/view", + "https://orbitvu.co/001/*/ov3601/*/view", + "https://orbitvu.co/001/*/ov3602/*/view", + "https://orbitvu.co/001/*/2/orbittour/*/view", + "https://orbitvu.co/001/*/1/2/orbittour/*/view", + "http://orbitvu.co/001/*/ov3601/view", + "http://orbitvu.co/001/*/ov3601/*/view", + "http://orbitvu.co/001/*/ov3602/*/view", + "http://orbitvu.co/001/*/2/orbittour/*/view", + "http://orbitvu.co/001/*/1/2/orbittour/*/view" + ] + ], + [ + "http://play.adpaths.com/oembed/*", + [ + "http://play.adpaths.com/experience/*" + ] + ], + [ + "http://play.wecandeo.com/oembed", + [ + "http://www.wecandeo.com/*" + ] + ], + [ + "http://polldaddy.com/oembed/", + [ + "http://*.polldaddy.com/s/*", + "http://*.polldaddy.com/poll/*", + "http://*.polldaddy.com/ratings/*" + ] + ], + [ + "http://posixion.com/services/oembed/", + [ + "https://posixion.com/question/*", + "https://posixion.com/*/question/*" + ] + ], + [ + "http://public-api.wordpress.com/oembed/", + [ + "http://wordpress.com/*" + ] + ], + [ + "http://publisher.releasewire.com/oembed/", + [ + "http://rwire.com/*" + ] + ], + [ + "http://repubhub.icopyright.net/oembed.act", + [ + "http://repubhub.icopyright.net/freePost.act?*" + ] + ], + [ + "http://roomshare.jp/en/oembed.{format}", + [ + "http://roomshare.jp/post/*", + "http://roomshare.jp/en/post/*" + ] + ], + [ + "http://shoudio.com/api/oembed", + [ + "http://shoudio.com/*", + "http://shoud.io/*" + ] + ], + [ + "http://sketchfab.com/oembed", + [ + "http://sketchfab.com/models/*", + "https://sketchfab.com/models/*", + "https://sketchfab.com/*/folders/*" + ] + ], + [ + "http://uttles.com/api/reply/oembed", + [ + "http://uttles.com/uttle/*" + ] + ], + [ + "http://verse.com/services/oembed/", + [ + "http://verse.com/*" + ] + ], + [ + "http://videos.sapo.pt/oembed", + [ + "http://videos.sapo.pt/*" + ] + ], + [ + "http://view.ceros.com/oembed", + [ + "http://view.ceros.com/*" + ] + ], + [ + "http://viziosphere.com/services/oembed/", + [ + "http://viziosphere.com/3dphoto*" + ] + ], + [ + "http://www.23hq.com/23/oembed", + [ + "http://www.23hq.com/*/photo/*" + ] + ], + [ + "http://www.collegehumor.com/oembed.{format}", + [ + "http://www.collegehumor.com/video/*" + ] + ], + [ + "http://www.dipity.com/oembed/timeline/", + [ + "http://www.dipity.com/*/*/" + ] + ], + [ + "http://www.funnyordie.com/oembed.{format}", + [ + "http://www.funnyordie.com/videos/*" + ] + ], + [ + "http://www.geograph.org.gg/api/oembed", + [ + "http://*.geograph.org.gg/*", + "http://*.geograph.org.je/*", + "http://channel-islands.geograph.org/*", + "http://channel-islands.geographs.org/*", + "http://*.channel.geographs.org/*" + ] + ], + [ + "http://www.hulu.com/api/oembed.{format}", + [ + "http://www.hulu.com/watch/*" + ] + ], + [ + "http://www.ifixit.com/Embed", + [ + "http://www.ifixit.com/Guide/View/*" + ] + ], + [ + "http://www.ifttt.com/oembed/", + [ + "http://ifttt.com/recipes/*" + ] + ], + [ + "http://www.kickstarter.com/services/oembed", + [ + "http://www.kickstarter.com/projects/*" + ] + ], + [ + "http://www.kitchenbowl.com/oembed", + [ + "http://www.kitchenbowl.com/recipe/*" + ] + ], + [ + "http://www.nfb.ca/remote/services/oembed/", + [ + "http://*.nfb.ca/film/*" + ] + ], + [ + "http://www.quiz.biz/api/oembed", + [ + "http://www.quiz.biz/quizz-*.html" + ] + ], + [ + "http://www.quizz.biz/api/oembed", + [ + "http://www.quizz.biz/quizz-*.html" + ] + ], + [ + "http://www.screenr.com/api/oembed.{format}", + [ + "http://www.screenr.com/*/" + ] + ], + [ + "http://www.scribd.com/services/oembed/", + [ + "http://www.scribd.com/doc/*" + ] + ], + [ + "http://www.topy.se/oembed/", + [ + "http://www.topy.se/image/*" + ] + ], + [ + "http://www.ustream.tv/oembed", + [ + "http://*.ustream.tv/*", + "http://*.ustream.com/*" + ] + ], + [ + "http://www.videojug.com/oembed.{format}", + [ + "http://www.videojug.com/film/*", + "http://www.videojug.com/interview/*" + ] + ], + [ + "http://www.wootled.com/oembed", + [ + "http://www.wootled.com/*" + ] + ], + [ + "http://www.yfrog.com/api/oembed", + [ + "http://*.yfrog.com/*", + "http://yfrog.us/*" + ] + ], + [ + "http://yesik.it/s/oembed", + [ + "http://yesik.it/*", + "http://www.yesik.it/*" + ] + ], + [ + "https://*.didacte.com/cards/oembed'", + [ + "https://*.didacte.com/a/course/*" + ] + ], + [ + "https://*.medialab.(co|app)/api/oembed/", + [ + "https://*.medialab.app/share/watch/*", + "https://*.medialab.co/share/watch/*", + "https://*.medialab.app/share/social/*", + "https://*.medialab.co/share/social/*", + "https://*.medialab.app/share/embed/*", + "https://*.medialab.co/share/embed/*" + ] + ], + [ + "https://admin.lumiere.is/api/services/oembed", + [ + "https://*.lumiere.is/v/*" + ] + ], + [ + "https://alpha-api.app.net/oembed", + [ + "https://alpha.app.net/*/post/*", + "https://photos.app.net/*/*" + ] + ], + [ + "https://animatron.com/oembed", + [ + "https://www.rcvis.com/v/*", + "https://www.rcvis.com/visualize=*", + "https://www.rcvis.com/ve/*", + "https://www.rcvis.com/visualizeEmbedded=*" + ] + ], + [ + "https://animatron.com/oembed/json", + [ + "https://www.animatron.com/project/*", + "https://animatron.com/project/*" + ] + ], + [ + "https://api.abraia.me/oembed", + [ + "https://store.abraia.me/*" + ] + ], + [ + "https://api.altrulabs.com/api/v1/social/oembed", + [ + "https://app.altrulabs.com/*/*?answer_id=*", + "https://app.altrulabs.com/player/*" + ] + ], + [ + "https://api.bespotful.com/oembed", + [ + "http://play.bespotful.com/*" + ] + ], + [ + "https://api.d.tube/oembed", + [ + "https://d.tube/v/*" + ] + ], + [ + "https://api.datawrapper.de/v3/oembed/", + [ + "https://datawrapper.dwcdn.net/*" + ] + ], + [ + "https://api.getshow.io/oembed.{format}", + [ + "https://app.getshow.io/iframe/*", + "https://*.getshow.io/share/*" + ] + ], + [ + "https://api.gfycat.com/v1/oembed", + [ + "http://gfycat.com/*", + "http://www.gfycat.com/*", + "https://gfycat.com/*", + "https://www.gfycat.com/*" + ] + ], + [ + "https://api.gyazo.com/api/oembed", + [ + "https://gyazo.com/*" + ] + ], + [ + "https://api.instagram.com/oembed", + [ + "http://instagram.com/*/p/*,", + "http://www.instagram.com/*/p/*,", + "https://instagram.com/*/p/*,", + "https://www.instagram.com/*/p/*,", + "http://instagram.com/p/*", + "http://instagr.am/p/*", + "http://www.instagram.com/p/*", + "http://www.instagr.am/p/*", + "https://instagram.com/p/*", + "https://instagr.am/p/*", + "https://www.instagram.com/p/*", + "https://www.instagr.am/p/*", + "http://instagram.com/tv/*", + "http://instagr.am/tv/*", + "http://www.instagram.com/tv/*", + "http://www.instagr.am/tv/*", + "https://instagram.com/tv/*", + "https://instagr.am/tv/*", + "https://www.instagram.com/tv/*", + "https://www.instagr.am/tv/*" + ] + ], + [ + "https://api.jovian.ai/oembed.json", + [ + "https://jovian.ml/*", + "https://jovian.ml/viewer*", + "https://*.jovian.ml/*", + "https://jovian.ai/*", + "https://jovian.ai/viewer*", + "https://*.jovian.ai/*" + ] + ], + [ + "https://api.kmdr.sh/services/oembed", + [ + "https://app.kmdr.sh/h/*", + "https://app.kmdr.sh/history/*" + ] + ], + [ + "https://api.luminery.com/oembed", + [ + "https://gtchannel.com/watch/*" + ] + ], + [ + "https://api.meetup.com/oembed", + [ + "http://meetup.com/*", + "https://www.meetup.com/*", + "https://meetup.com/*", + "http://meetu.ps/*" + ] + ], + [ + "https://api.microlink.io", + [ + "http://api.microlink.io*" + ] + ], + [ + "https://api.nb.no/catalog/v1/oembed", + [ + "https://www.nb.no/items/*" + ] + ], + [ + "https://api.observablehq.com/oembed", + [ + "https://observablehq.com/@*/*", + "https://observablehq.com/d/*", + "https://observablehq.com/embed/*" + ] + ], + [ + "https://api.podbean.com/v1/oembed", + [ + "https://*.podbean.com/e/*", + "http://*.podbean.com/e/*" + ] + ], + [ + "https://api.polarishare.com/rest/api/oembed", + [ + "https://www.polarishare.com/*/*" + ] + ], + [ + "https://api.portfolium.com/oembed", + [ + "https://portfolium.com/entry/*" + ] + ], + [ + "https://api.screen9.com/oembed", + [ + "https://console.screen9.com/*", + "https://*.screen9.tv/*" + ] + ], + [ + "https://api.screencast.com/external/oembed", + [ + "http://www.screencast.com/*" + ] + ], + [ + "https://api.sellwithport.com/v1.0/buyer/oembed", + [ + "https://app.sellwithport.com/#/buyer/*" + ] + ], + [ + "https://api.smugmug.com/services/oembed/", + [ + "http://*.smugmug.com/*", + "https://*.smugmug.com/*" + ] + ], + [ + "https://api.spoonacular.com/knowledge/oembed", + [ + "https://knowledgepad.co/#/knowledge/*" + ] + ], + [ + "https://api.spreaker.com/oembed", + [ + "http://*.spreaker.com/*", + "https://*.spreaker.com/*" + ] + ], + [ + "https://api.streamable.com/oembed.json", + [ + "http://streamable.com/*", + "https://streamable.com/*" + ] + ], + [ + "https://api.uppy.jp/v1/oembed", + [ + "https://app.uppy.jp/_shares/video/*" + ] + ], + [ + "https://api.veer.tv/oembed", + [ + "http://veer.tv/videos/*" + ] + ], + [ + "https://api.veervr.tv/oembed", + [ + "http://veervr.tv/videos/*" + ] + ], + [ + "https://api.vidl.it/oembed", + [ + "https://vidl.it/*" + ] + ], + [ + "https://api.vidyard.com/dashboard/v1.1/oembed", + [ + "http://*.vidyard.com/*", + "https://*.vidyard.com/*", + "http://*.hubs.vidyard.com/*", + "https://*.hubs.vidyard.com/*" + ] + ], + [ + "https://api.znipe.tv/v3/oembed/", + [ + "https://*.znipe.tv/*" + ] + ], + [ + "https://app-v2.vidmizer.com/api/oembed", + [ + "https://players-cdn-v2.vidmizer.com/*" + ] + ], + [ + "https://app.archivos.digital/oembed/", + [ + "https://app.archivos.digital/app/view/*" + ] + ], + [ + "https://app.customerdb.com/embed", + [ + "https://app.customerdb.com/share/*" + ] + ], + [ + "https://app.flourish.studio/api/v1/oembed", + [ + "https://public.flourish.studio/visualisation/*", + "https://public.flourish.studio/story/*" + ] + ], + [ + "https://app.getfader.com/api/oembed", + [ + "https://app.getfader.com/projects/*/publish" + ] + ], + [ + "https://app.ilovecoco.video/api/oembed.{format}", + [ + "https://app.ilovecoco.video/*/embed" + ] + ], + [ + "https://app.ludus.one/oembed", + [ + "https://app.ludus.one/*" + ] + ], + [ + "https://app.ustudio.com/api/v2/oembed", + [ + "https://*.ustudio.com/embed/*", + "https://*.ustudio.com/embed/*/*" + ] + ], + [ + "https://app.zeplin.io/embed", + [ + "https://app.zeplin.io/project/*/screen/*", + "https://app.zeplin.io/project/*/screen/*/version/*", + "https://app.zeplin.io/project/*/styleguide/components?coid=*", + "https://app.zeplin.io/styleguide/*/components?coid=*" + ] + ], + [ + "https://app.zingsoft.com/oembed", + [ + "https://app.zingsoft.com/embed/*", + "https://app.zingsoft.com/view/*" + ] + ], + [ + "https://audioboom.com/publishing/oembed/v4.{format}", + [ + "https://audioboom.com/channels/*", + "https://audioboom.com/channel/*", + "https://audioboom.com/posts/*" + ] + ], + [ + "https://audioclip.naver.com/oembed", + [ + "https://audioclip.naver.com/channels/*/clips/*", + "https://audioclip.naver.com/audiobooks/*" + ] + ], + [ + "https://audiomack.com/oembed", + [ + "https://audiomack.com/*/song/*", + "https://audiomack.com/*/album/*", + "https://audiomack.com/*/playlist/*" + ] + ], + [ + "https://backtracks.fm/oembed", + [ + "https://backtracks.fm/*/*/e/*", + "https://backtracks.fm/*/s/*/*", + "https://backtracks.fm/*/*/*/*/e/*/*", + "https://backtracks.fm/*", + "http://backtracks.fm/*" + ] + ], + [ + "https://beta.pingvp.com.kpnis.nl/p/oembed.php", + [ + "https://www.pingvp.com/*" + ] + ], + [ + "https://blackfire.io/oembed", + [ + "https://blackfire.io/profiles/*/graph", + "https://blackfire.io/profiles/compare/*/graph" + ] + ], + [ + "https://blogcast.host/oembed", + [ + "https://blogcast.host/embed/*", + "https://blogcast.host/embedly/*" + ] + ], + [ + "https://buttondown.email/embed", + [ + "https://buttondown.email/*" + ] + ], + [ + "https://cmc.byzart.eu/oembed/", + [ + "https://cmc.byzart.eu/files/*" + ] + ], + [ + "https://codehs.com/api/sharedprogram/*/oembed/", + [ + "https://codehs.com/editor/share_abacus/*" + ] + ], + [ + "https://codepen.io/api/oembed", + [ + "http://codepen.io/*", + "https://codepen.io/*" + ] + ], + [ + "https://codepoints.net/api/v1/oembed", + [ + "http://codepoints.net/*", + "https://codepoints.net/*", + "http://www.codepoints.net/*", + "https://www.codepoints.net/*" + ] + ], + [ + "https://codesandbox.io/oembed", + [ + "https://codesandbox.io/s/*", + "https://codesandbox.io/embed/*" + ] + ], + [ + "https://commaful.com/api/oembed/", + [ + "https://commaful.com/play/*" + ] + ], + [ + "https://content.streamonecloud.net/oembed", + [ + "https://content.streamonecloud.net/embed/*" + ] + ], + [ + "https://core.oz.com/oembed", + [ + "https://www.oz.com/*/video/*" + ] + ], + [ + "https://data.voxsnap.com/oembed", + [ + "https://article.voxsnap.com/*/*" + ] + ], + [ + "https://display.apester.com/oembed", + [ + "https://renderer.apester.com/v2/*?preview=true&iframe_preview=true" + ] + ], + [ + "https://embed.deseret.com/", + [ + "https://*.deseret.com/*" + ] + ], + [ + "https://embed.kit.co/oembed", + [ + "http://kit.co/*/*", + "https://kit.co/*/*" + ] + ], + [ + "https://embed.runkit.com/oembed", + [ + "http://embed.runkit.com/*,", + "https://embed.runkit.com/*," + ] + ], + [ + "https://embed.sendtonews.com/services/oembed", + [ + "https://embed.sendtonews.com/oembed/*" + ] + ], + [ + "https://embed.spotify.com/oembed/", + [ + "https://*.spotify.com/*", + "spotify:*" + ] + ], + [ + "https://embed.wave.video/oembed", + [ + "https://watch.wave.video/*", + "https://embed.wave.video/*" + ] + ], + [ + "https://embedery.com/api/oembed", + [ + "https://embedery.com/widget/*" + ] + ], + [ + "https://ethfiddle.com/services/oembed/", + [ + "https://ethfiddle.com/*" + ] + ], + [ + "https://eyrie.io/v1/oembed", + [ + "https://eyrie.io/board/*", + "https://eyrie.io/sparkfun/*" + ] + ], + [ + "https://faithlifetv.com/api/oembed", + [ + "https://faithlifetv.com/items/*", + "https://faithlifetv.com/items/resource/*/*", + "https://faithlifetv.com/media/*", + "https://faithlifetv.com/media/assets/*", + "https://faithlifetv.com/media/resource/*/*" + ] + ], + [ + "https://fast.wistia.com/oembed.{format}", + [ + "https://fast.wistia.com/embed/iframe/*", + "https://fast.wistia.com/embed/playlists/*", + "https://*.wistia.com/medias/*" + ] + ], + [ + "https://fiso.foxsports.com.au/oembed", + [ + "http://fiso.foxsports.com.au/isomorphic-widget/*", + "https://fiso.foxsports.com.au/isomorphic-widget/*" + ] + ], + [ + "https://flat.io/services/oembed", + [ + "https://flat.io/score/*", + "https://*.flat.io/score/*" + ] + ], + [ + "https://framebuzz.com/oembed/", + [ + "http://framebuzz.com/v/*", + "https://framebuzz.com/v/*" + ] + ], + [ + "https://giphy.com/services/oembed", + [ + "https://giphy.com/gifs/*", + "http://gph.is/*", + "https://media.giphy.com/media/*/giphy.gif" + ] + ], + [ + "https://gloria.tv/oembed/", + [ + "https://gloria.tv/*" + ] + ], + [ + "https://graph.facebook.com/v8.0/instagram_oembed", + [ + "http://instagram.com/*/p/*,", + "http://www.instagram.com/*/p/*,", + "https://instagram.com/*/p/*,", + "https://www.instagram.com/*/p/*,", + "http://instagram.com/p/*", + "http://instagr.am/p/*", + "http://www.instagram.com/p/*", + "http://www.instagr.am/p/*", + "https://instagram.com/p/*", + "https://instagr.am/p/*", + "https://www.instagram.com/p/*", + "https://www.instagr.am/p/*", + "http://instagram.com/tv/*", + "http://instagr.am/tv/*", + "http://www.instagram.com/tv/*", + "http://www.instagr.am/tv/*", + "https://instagram.com/tv/*", + "https://instagr.am/tv/*", + "https://www.instagram.com/tv/*", + "https://www.instagr.am/tv/*" + ] + ], + [ + "https://graph.facebook.com/v8.0/oembed_page", + [ + "https://www.facebook.com/*" + ] + ], + [ + "https://graph.facebook.com/v8.0/oembed_post", + [ + "https://www.facebook.com/*/posts/*", + "https://www.facebook.com/*/activity/*", + "https://www.facebook.com/photo.php?fbid=*", + "https://www.facebook.com/photos/*", + "https://www.facebook.com/permalink.php?story_fbid=*", + "https://www.facebook.com/media/set?set=*", + "https://www.facebook.com/questions/*", + "https://www.facebook.com/notes/*/*/*" + ] + ], + [ + "https://graph.facebook.com/v8.0/oembed_video", + [ + "https://www.facebook.com/*/videos/*", + "https://www.facebook.com/video.php?id=*", + "https://www.facebook.com/video.php?v=*" + ] + ], + [ + "https://halaman.email/service/oembed", + [ + "https://halaman.email/form/*", + "https://aplikasi.kirim.email/form/*" + ] + ], + [ + "https://hearthis.at/oembed/?format=json", + [ + "https://hearthis.at/*/*/", + "https://hearthis.at/*/set/*/" + ] + ], + [ + "https://homey.app/api/oembed/flow", + [ + "https://homey.app/f/*", + "https://homey.app/*/flow/*" + ] + ], + [ + "https://hostedbyyou.com/api/oembed", + [ + "https://hostedbyyou.com/event/*" + ] + ], + [ + "https://infogram.com/oembed", + [ + "https://infogram.com/*" + ] + ], + [ + "https://infoveave.net/services/oembed/", + [ + "https://*.infoveave.net/E/*", + "https://*.infoveave.net/P/*" + ] + ], + [ + "https://issuu.com/oembed", + [ + "https://issuu.com/*/docs/*" + ] + ], + [ + "https://jdr.knacki.info/oembed", + [ + "http://jdr.knacki.info/meuh/*", + "https://jdr.knacki.info/meuh/*" + ] + ], + [ + "https://live.amcharts.com/oembed", + [ + "http://live.amcharts.com/*", + "https://live.amcharts.com/*" + ] + ], + [ + "https://livestream.com/oembed", + [ + "https://livestream.com/accounts/*/events/*", + "https://livestream.com/accounts/*/events/*/videos/*", + "https://livestream.com/*/events/*", + "https://livestream.com/*/events/*/videos/*", + "https://livestream.com/*/*", + "https://livestream.com/*/*/videos/*" + ] + ], + [ + "https://m-roll.morphcast.com/service/oembed", + [ + "https://m-roll.morphcast.com/mroll/*" + ] + ], + [ + "https://mais.uol.com.br/apiuol/v3/oembed/view", + [ + "https://*.uol.com.br/view/*", + "https://*.uol.com.br/video/*" + ] + ], + [ + "https://map.cam.ac.uk/oembed/", + [ + "https://map.cam.ac.uk/*" + ] + ], + [ + "https://me.me/oembed", + [ + "https://me.me/i/*" + ] + ], + [ + "https://mediatheque.univ-paris1.fr/oembed", + [ + "https://mediatheque.univ-paris1.fr/video/*" + ] + ], + [ + "https://medienarchiv.zhdk.ch/oembed.{format}", + [ + "https://medienarchiv.zhdk.ch/entries/*" + ] + ], + [ + "https://mermaid.ink/services/oembed", + [ + "https://mermaid.ink/img/*", + "https://mermaid.ink/svg/*" + ] + ], + [ + "https://music.ivlis.kr/oembed", + [ + "https://music.ivlis.kr/*" + ] + ], + [ + "https://musicboxmaniacs.com/embed/", + [ + "https://musicboxmaniacs.com/explore/melody/*" + ] + ], + [ + "https://my.matterport.com/api/v1/models/oembed/", + [ + "https://matterport.com/*" + ] + ], + [ + "https://mybeweeg.com/services/oembed", + [ + "https://mybeweeg.com/w/*" + ] + ], + [ + "https://namchey.com/api/oembed", + [ + "https://namchey.com/embeds/*" + ] + ], + [ + "https://naturalatlas.com/oembed.{format}", + [ + "https://naturalatlas.com/*", + "https://naturalatlas.com/*/*", + "https://naturalatlas.com/*/*/*", + "https://naturalatlas.com/*/*/*/*" + ] + ], + [ + "https://octopus.saooti.com/oembed", + [ + "https://octopus.saooti.com/main/pub/podcast/*" + ] + ], + [ + "https://oembed.nopaste.ml", + [ + "https://nopaste.ml/*" + ] + ], + [ + "https://oembed.qualifio.com/", + [ + "https://qualifio.com/*" + ] + ], + [ + "https://oembed.radiopublic.com/oembed", + [ + "https://play.radiopublic.com/*", + "https://radiopublic.com/*", + "https://www.radiopublic.com/*", + "http://play.radiopublic.com/*", + "http://radiopublic.com/*", + "http://www.radiopublic.com/*", + "https://*.radiopublic.com/*'" + ] + ], + [ + "https://oembed.tourhero.com/", + [ + "https://www.tourhero.com/*" + ] + ], + [ + "https://omniscope.me/_global_/oembed/json", + [ + "https://omniscope.me/*" + ] + ], + [ + "https://onsizzle.com/oembed", + [ + "https://onsizzle.com/i/*" + ] + ], + [ + "https://outplayed.tv/oembed", + [ + "https://outplayed.tv/media/*" + ] + ], + [ + "https://overflow.io/services/oembed", + [ + "https://overflow.io/s/*", + "https://overflow.io/embed/*" + ] + ], + [ + "https://padlet.com/oembed/", + [ + "https://padlet.com/*" + ] + ], + [ + "https://play.tvcf.co.kr/rest/oembed", + [ + "https://play.tvcf.co.kr/*", + "https://*.tvcf.co.kr/*" + ] + ], + [ + "https://play.typecast.ai/oembed", + [ + "https://play.typecast.ai/s/*", + "https://play.typecast.ai/e/*", + "https://play.typecast.ai/*" + ] + ], + [ + "https://player.hihaho.com/services/oembed/*", + [ + "https://player.hihaho.com/*" + ] + ], + [ + "https://player.indacolive.com/services/oembed", + [ + "https://player.indacolive.com/player/jwp/clients/*" + ] + ], + [ + "https://player.ubideo.com/api/oembed.json", + [ + "https://player.ubideo.com/*" + ] + ], + [ + "https://pod.univ-lille.fr/oembed", + [ + "https://pod.univ-lille.fr/video/*" + ] + ], + [ + "https://portal.modelo.io/oembed", + [ + "https://beta.modelo.io/embedded/*" + ] + ], + [ + "https://publish.twitter.com/oembed", + [ + "https://twitter.com/*/status/*", + "https://*.twitter.com/*/status/*", + "https://twitter.com/*/moments/*", + "https://*.twitter.com/*/moments/*" + ] + ], + [ + "https://purl.stanford.edu/embed.{format}", + [ + "https://purl.stanford.edu/*" + ] + ], + [ + "https://repl.it/data/oembed", + [ + "https://repl.it/@*/*" + ] + ], + [ + "https://roosterteeth.com/oembed", + [ + "https://roosterteeth.com/*" + ] + ], + [ + "https://rumble.com/api/Media/oembed.{format}", + [ + "https://rumble.com/*" + ] + ], + [ + "https://scribblemaps.com/api/services/oembed.{format}", + [ + "http://www.scribblemaps.com/maps/view/*", + "https://www.scribblemaps.com/maps/view/*", + "http://scribblemaps.com/maps/view/*", + "https://scribblemaps.com/maps/view/*" + ] + ], + [ + "https://secure.actblue.com/cf/oembed", + [ + "https://secure.actblue.com/donate/*" + ] + ], + [ + "https://showtheway.io/oembed", + [ + "https://showtheway.io/to/*" + ] + ], + [ + "https://simplecast.com/oembed", + [ + "https://simplecast.com/s/*" + ] + ], + [ + "https://smashnotes.com/services/oembed", + [ + "https://smashnotes.com/p/*", + "https://smashnotes.com/p/*/e/* - https://smashnotes.com/p/*/e/*/s/*" + ] + ], + [ + "https://song.link/oembed", + [ + "https://song.link/*", + "https://album.link/*", + "https://artist.link/*", + "https://playlist.link/*", + "https://pods.link/*", + "https://mylink.page/*", + "https://odesli.co/*" + ] + ], + [ + "https://soundcloud.com/oembed", + [ + "http://soundcloud.com/*", + "https://soundcloud.com/*", + "https://soundcloud.app.goog.gl/*" + ] + ], + [ + "https://speakerdeck.com/oembed.json", + [ + "http://speakerdeck.com/*/*", + "https://speakerdeck.com/*/*" + ] + ], + [ + "https://srv2.zoomable.ca/oembed", + [ + "https://srv2.zoomable.ca/viewer.php*" + ] + ], + [ + "https://stage-embed.avocode.com/api/oembed", + [ + "https://app.avocode.com/view/*" + ] + ], + [ + "https://staging.cyranosystems.com/oembed", + [ + "https://staging.cyranosystems.com/msg/*", + "https://app.cyranosystems.com/msg/*" + ] + ], + [ + "https://store.pixdor.com/oembed", + [ + "https://store.pixdor.com/place-marker-widget/*/show", + "https://store.pixdor.com/map/*/show" + ] + ], + [ + "https://storymaps.arcgis.com/oembed", + [ + "https://storymaps.arcgis.com/stories/*" + ] + ], + [ + "https://subscribi.io/api/oembed", + [ + "https://subscribi.io/api/oembed*" + ] + ], + [ + "https://sway.com/api/v1.0/oembed", + [ + "https://sway.com/*", + "https://www.sway.com/*" + ] + ], + [ + "https://theysaidso.com/extensions/oembed/", + [ + "https://theysaidso.com/image/*" + ] + ], + [ + "https://tools.pinpoll.com/oembed", + [ + "https://tools.pinpoll.com/embed/*" + ] + ], + [ + "https://tv.kakao.com/oembed", + [ + "https://tv.kakao.com/channel/*/cliplink/*", + "https://tv.kakao.com/channel/v/*", + "https://tv.kakao.com/channel/*/livelink/*", + "https://tv.kakao.com/channel/l/*" + ] + ], + [ + "https://typlog.com/oembed", + [ + "https://typlog.com*" + ] + ], + [ + "https://umotion-test.univ-lemans.fr/oembed", + [ + "https://umotion-test.univ-lemans.fr/video/*" + ] + ], + [ + "https://view.briovr.com/api/v1/worlds/oembed/", + [ + "https://view.briovr.com/api/v1/worlds/oembed/*" + ] + ], + [ + "https://vimeo.com/api/oembed.{format}", + [ + "https://vimeo.com/*", + "https://vimeo.com/album/*/video/*", + "https://vimeo.com/channels/*/*", + "https://vimeo.com/groups/*/videos/*", + "https://vimeo.com/ondemand/*/*", + "https://player.vimeo.com/video/*" + ] + ], + [ + "https://vizydrop.com/oembed", + [ + "https://vizydrop.com/shared/*" + ] + ], + [ + "https://vlipsy.com/oembed", + [ + "https://vlipsy.com/*" + ] + ], + [ + "https://vlurb.co/oembed.json", + [ + "http://vlurb.co/video/*", + "https://vlurb.co/video/*" + ] + ], + [ + "https://web.microsoftstream.com/oembed", + [ + "https://*.microsoftstream.com/video/*", + "https://*.microsoftstream.com/channel/*" + ] + ], + [ + "https://web.xpression.jp/api/oembed", + [ + "https://web.xpression.jp/video/*" + ] + ], + [ + "https://widget.toornament.com/oembed", + [ + "https://www.toornament.com/tournaments/*/information", + "https://www.toornament.com/tournaments/*/registration/", + "https://www.toornament.com/tournaments/*/matches/schedule", + "https://www.toornament.com/tournaments/*/stages/*/" + ] + ], + [ + "https://wokwi.com/api/oembed", + [ + "https://wokwi.com/share/*" + ] + ], + [ + "https://www.beautiful.ai/api/oembed", + [ + "https://www.beautiful.ai/*" + ] + ], + [ + "https://www.chainflix.net/video/oembed", + [ + "https://chainflix.net/video/*", + "https://chainflix.net/video/embed/*", + "https://*.chainflix.net/video/*", + "https://*.chainflix.net/video/embed/*" + ] + ], + [ + "https://www.circuitlab.com/circuit/oembed/", + [ + "https://www.circuitlab.com/circuit/*" + ] + ], + [ + "https://www.clipland.com/api/oembed", + [ + "http://www.clipland.com/v/*", + "https://www.clipland.com/v/*" + ] + ], + [ + "https://www.dailymotion.com/services/oembed", + [ + "https://www.dailymotion.com/video/*" + ] + ], + [ + "https://www.docdroid.net/api/oembed", + [ + "https://*.docdroid.net/*", + "http://*.docdroid.net/*", + "https://docdro.id/*", + "http://docdro.id/*", + "https://*.docdroid.com/*", + "http://*.docdroid.com/*" + ] + ], + [ + "https://www.edumedia-sciences.com/oembed.json", + [ + "https://www.edumedia-sciences.com/*" + ] + ], + [ + "https://www.edumedia-sciences.com/oembed.xml", + [ + "https://www.edumedia-sciences.com/*" + ] + ], + [ + "https://www.fireworktv.com/oembed", + [ + "https://*.fireworktv.com/*", + "https://*.fireworktv.com/embed/*/v/*" + ] + ], + [ + "https://www.fite.tv/oembed", + [ + "https://www.fite.tv/watch/*" + ] + ], + [ + "https://www.flickr.com/services/oembed/", + [ + "http://*.flickr.com/photos/*", + "http://flic.kr/p/*", + "https://*.flickr.com/photos/*", + "https://flic.kr/p/*" + ] + ], + [ + "https://www.gifnote.com/services/oembed", + [ + "https://www.gifnote.com/play/*" + ] + ], + [ + "https://www.iheart.com/oembed", + [ + "https://www.iheart.com/podcast/*/*" + ] + ], + [ + "https://www.injurymap.com/services/oembed", + [ + "https://www.injurymap.com/exercises/*" + ] + ], + [ + "https://www.inoreader.com/oembed/api/", + [ + "https://www.inoreader.com/oembed/" + ] + ], + [ + "https://www.kidoju.com/api/oembed", + [ + "https://www.kidoju.com/en/x/*/*", + "https://www.kidoju.com/fr/x/*/*" + ] + ], + [ + "https://www.mixcloud.com/oembed/", + [ + "http://www.mixcloud.com/*/*/", + "https://www.mixcloud.com/*/*/" + ] + ], + [ + "https://www.nanoo.tv/services/oembed", + [ + "http://*.nanoo.tv/link/*", + "http://nanoo.tv/link/*", + "http://*.nanoo.pro/link/*", + "http://nanoo.pro/link/*", + "https://*.nanoo.tv/link/*", + "https://nanoo.tv/link/*", + "https://*.nanoo.pro/link/*", + "https://nanoo.pro/link/*", + "http://media.zhdk.ch/signatur/*", + "http://new.media.zhdk.ch/signatur/*", + "https://media.zhdk.ch/signatur/*", + "https://new.media.zhdk.ch/signatur/*" + ] + ], + [ + "https://www.nytimes.com/svc/oembed/json/", + [ + "https://www.nytimes.com/svc/oembed", + "https://nytimes.com/*", + "https://*.nytimes.com/*" + ] + ], + [ + "https://www.odds.com.au/api/oembed/", + [ + "https://www.odds.com.au/*", + "https://odds.com.au/*" + ] + ], + [ + "https://www.ora.tv/oembed/*?format={format}", + [ + "http://www.ora.tv/*" + ] + ], + [ + "https://www.oumy.com/oembed", + [ + "https://www.oumy.com/v/*" + ] + ], + [ + "https://www.pastery.net/oembed", + [ + "http://pastery.net/*", + "https://pastery.net/*", + "http://www.pastery.net/*", + "https://www.pastery.net/*" + ] + ], + [ + "https://www.reddit.com/oembed", + [ + "https://reddit.com/r/*/comments/*/*", + "https://www.reddit.com/r/*/comments/*/*" + ] + ], + [ + "https://www.reverbnation.com/oembed", + [ + "https://www.reverbnation.com/*", + "https://www.reverbnation.com/*/songs/*" + ] + ], + [ + "https://www.riffreporter.de/service/oembed", + [ + "https://www.riffreporter.de/*" + ] + ], + [ + "https://www.shortnote.jp/oembed/", + [ + "https://www.shortnote.jp/view/notes/*" + ] + ], + [ + "https://www.slideshare.net/api/oembed/2", + [ + "https://www.slideshare.net/*/*", + "http://www.slideshare.net/*/*", + "https://fr.slideshare.net/*/*", + "http://fr.slideshare.net/*/*", + "https://de.slideshare.net/*/*", + "http://de.slideshare.net/*/*", + "https://es.slideshare.net/*/*", + "http://es.slideshare.net/*/*", + "https://pt.slideshare.net/*/*", + "http://pt.slideshare.net/*/*" + ] + ], + [ + "https://www.socialexplorer.com/services/oembed/", + [ + "https://www.socialexplorer.com/*/explore", + "https://www.socialexplorer.com/*/view", + "https://www.socialexplorer.com/*/edit", + "https://www.socialexplorer.com/*/embed" + ] + ], + [ + "https://www.sudomemo.net/oembed", + [ + "https://www.sudomemo.net/watch/*", + "http://www.sudomemo.net/watch/*", + "https://flipnot.es/*", + "http://flipnot.es/*" + ] + ], + [ + "https://www.sutori.com/api/oembed", + [ + "https://www.sutori.com/story/*" + ] + ], + [ + "https://www.ted.com/services/v1/oembed.{format}", + [ + "http://ted.com/talks/*", + "https://ted.com/talks/*", + "https://www.ted.com/talks/*" + ] + ], + [ + "https://www.tickcounter.com/oembed", + [ + "http://www.tickcounter.com/countdown/*", + "http://www.tickcounter.com/countup/*", + "http://www.tickcounter.com/ticker/*", + "http://www.tickcounter.com/worldclock/*", + "https://www.tickcounter.com/countdown/*", + "https://www.tickcounter.com/countup/*", + "https://www.tickcounter.com/ticker/*", + "https://www.tickcounter.com/worldclock/*" + ] + ], + [ + "https://www.tiktok.com/oembed", + [ + "https://www.tiktok.com/*/video/*" + ] + ], + [ + "https://www.tumblr.com/oembed/1.0", + [ + "https://*.tumblr.com/post/*" + ] + ], + [ + "https://www.tuxx.be/services/oembed", + [ + "https://www.tuxx.be/*" + ] + ], + [ + "https://www.ultimedia.com/api/search/oembed", + [ + "https://www.ultimedia.com/central/video/edit/id/*/topic_id/*/", + "https://www.ultimedia.com/default/index/videogeneric/id/*/showtitle/1/viewnc/1", + "https://www.ultimedia.com/default/index/videogeneric/id/*" + ] + ], + [ + "https://www.utposts.com/api/oembed", + [ + "https://www.utposts.com/products/*", + "http://www.utposts.com/products/*", + "https://utposts.com/products/*", + "http://utposts.com/products/*" + ] + ], + [ + "https://www.vevo.com/oembed", + [ + "http://www.vevo.com/*", + "https://www.vevo.com/*" + ] + ], + [ + "https://www.viously.com/oembed", + [ + "https://www.viously.com/*/*" + ] + ], + [ + "https://www.vlive.tv/oembed", + [ + "https://www.vlive.tv/video/*" + ] + ], + [ + "https://www.wolframcloud.com/oembed", + [ + "https://*.wolframcloud.com/*" + ] + ], + [ + "https://www.youtube.com/oembed", + [ + "https://*.youtube.com/watch*", + "https://*.youtube.com/v/*", + "https://youtu.be/*" + ] + ] +] diff --git a/plone/app/standardtiles/media.zcml b/plone/app/standardtiles/media.zcml index 49cb7f20..188c539a 100644 --- a/plone/app/standardtiles/media.zcml +++ b/plone/app/standardtiles/media.zcml @@ -8,7 +8,7 @@ =1.8.0.dev0', 'Products.CMFPlone>=5.0.4', + 'python-oembed', 'requests', 'setuptools', 'six', From 67434967ebbf53a038c4d9dec0441d2c2ca915d8 Mon Sep 17 00:00:00 2001 From: Asko Soukka Date: Sat, 16 Jan 2021 08:01:49 +0200 Subject: [PATCH 2/2] Update changelog --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index db42df65..b8a9ac7d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,12 @@ Changelog 2.3.3 (unreleased) ------------------ +- Embed: Replace use of noembed.com (or custom noembed instance) with python-oembed and embedded provider configuration generated (with included script) from https://github.com/iamcal/oembed/. + [datakurre] + +- Embed: Add Maximum width and Maximum height configuration parameters, which are supported by many oEmbed providers. + [datakure] + - Content listing: Allow to use collection query parameters from context. Content listing: Include query parameters from request. Content listing: Add "tile_class".