forked from varia/varia.website
many many many Varia's websites, work in progress: https://many.vvvvvvaria.org
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.5 KiB
59 lines
1.5 KiB
"""
|
|
Soundcloud Tag
|
|
--------------
|
|
This implements a Liquid-style soundcloud tag for Pelican.
|
|
|
|
It asks the official Soundcloud-API for the widget html code.
|
|
|
|
Syntax
|
|
------
|
|
`{% soundcloud track_url %}`
|
|
|
|
Example
|
|
-------
|
|
`{% soundcloud https://soundcloud.com/luftmentsh/hakotel %}`
|
|
|
|
Output
|
|
------
|
|
`<iframe width="100%" height="400" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?visual=true&url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F33875102&show_artwork=true"></iframe>`
|
|
"""
|
|
from .mdx_liquid_tags import LiquidTags
|
|
import re
|
|
import json
|
|
try:
|
|
from urllib.request import urlopen
|
|
except ImportError:
|
|
from urllib import urlopen
|
|
|
|
|
|
SYNTAX = '{% soundcloud track_url %}'
|
|
PARSE_SYNTAX = re.compile(r'(?P<track_url>https?://soundcloud.com/[\S]+)')
|
|
|
|
|
|
def get_widget(track_url):
|
|
r = urlopen(
|
|
'http://soundcloud.com/oembed',
|
|
data='format=json&url={}'.format(track_url).encode('utf-8'))
|
|
|
|
return json.loads(r.read().decode('utf-8'))['html']
|
|
|
|
|
|
def match_it(markup):
|
|
match = PARSE_SYNTAX.search(markup)
|
|
if match:
|
|
return match.groupdict()
|
|
else:
|
|
raise ValueError('Error processing input. '
|
|
'Expected syntax: {}'.format(SYNTAX))
|
|
|
|
|
|
@LiquidTags.register('soundcloud')
|
|
def soundcloud(preprocessor, tag, markup):
|
|
track_url = match_it(markup)['track_url']
|
|
|
|
return get_widget(track_url)
|
|
|
|
|
|
# ---------------------------------------------------
|
|
# This import allows image tag to be a Pelican plugin
|
|
from liquid_tags import register
|
|
|