123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- """
- 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
|