""" 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 ------ `` """ 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'(?Phttps?://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