From 3f2cc0860722cadfe62d64eaf54a34c619d8a7e4 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 14 Sep 2016 03:51:10 +0900 Subject: [PATCH] Soundcloud support --- src/index.ts | 3 ++- src/plugins/soundcloud/index.ts | 28 ++++++++++++++++++++++++++++ tsconfig.json | 3 ++- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/plugins/soundcloud/index.ts diff --git a/src/index.ts b/src/index.ts index d3d9d92..aac72f7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,7 +8,8 @@ require('babel-core/register'); require('babel-polyfill'); const plugins: IPlugin[] = [ - require('./plugins/wikipedia') + require('./plugins/wikipedia'), + require('./plugins/soundcloud') ]; export default async (url: string, options?: Options): Promise => { diff --git a/src/plugins/soundcloud/index.ts b/src/plugins/soundcloud/index.ts new file mode 100644 index 0000000..7026cc1 --- /dev/null +++ b/src/plugins/soundcloud/index.ts @@ -0,0 +1,28 @@ +import * as URL from 'url'; +import * as request from 'request'; +import Options from '../../options'; + +exports.test = (url: URL.Url) => { + return url.hostname == 'soundcloud.com'; +}; + +exports.compile = async (url: URL.Url, opts: Options) => { + request({ + url: 'http://soundcloud.com/oembed', + method: 'get', + qs: { + format: 'json', + url: url.href + } + }, (err, response, body) => { + if (err) { + throw err; + } else if (response.statusCode !== 200) { + return null; + } else { + const parsed = JSON.parse(body); + const html = parsed.html; + return html.replace('height="400"', 'height="200"'); + } + }); +}; diff --git a/tsconfig.json b/tsconfig.json index 1f78993..3ad7ef0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -29,6 +29,7 @@ "./src/iplugin.ts", "./src/options.ts", "./src/general/index.ts", - "./src/plugins/wikipedia/index.ts" + "./src/plugins/wikipedia/index.ts", + "./src/plugins/soundcloud/index.ts" ] }