diff --git a/package.json b/package.json index 4e59f09dd..77ea21967 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "metascraper-logo": "^4.8.5", "metascraper-logo-favicon": "^4.8.5", "metascraper-publisher": "^4.8.5", + "metascraper-soundcloud": "^4.8.5", "metascraper-title": "^4.8.5", "metascraper-url": "^4.8.5", "metascraper-video": "^4.8.5", diff --git a/src/scraper.js b/src/scraper.js index 8c44dc0dd..834fad11c 100644 --- a/src/scraper.js +++ b/src/scraper.js @@ -11,11 +11,15 @@ const metascraper = require('metascraper')([ require('metascraper-publisher')(), require('metascraper-title')(), require('metascraper-url')(), + require('metascraper-audio')(), + require('metascraper-soundcloud')(), require('metascraper-video')(), require('metascraper-youtube')() // require('./rules/metascraper-embed')() ]) +const { ApolloError } = require('apollo-server') + const got = require('got') const request = require('request-promise-native') const find = require('lodash/find') @@ -69,31 +73,46 @@ const scraper = { new Promise(async (resolve, reject) => { try { embed = await scraper.fetchEmbed(targetUrl) + console.log(embed) resolve() } catch(err) { + console.error(err) resolve() } }) ]) - return { + + const output = { ...(removeEmptyAttrs(meta)), ...(removeEmptyAttrs(embed)) } + + if (isEmpty(output)) { + throw new ApolloError('Not found', 404) + } + + return output }, async fetchEmbed(targetUrl) { const url = urlParser.parse(targetUrl) const embedMeta = find(oEmbedProviders, provider => { return provider.provider_url.indexOf(url.hostname) >= 0 }) + console.log('embedMeta', embedMeta) if (!embedMeta) { return {} } const embedUrl = embedMeta.endpoints[0].url.replace('{format}', 'json') - let data = await request(`${embedUrl}?url=${targetUrl}`) - if (data) { + let data + try { + data = await request(`${embedUrl}?url=${targetUrl}`) data = JSON.parse(data) - + } catch (err) { + data = await request(`${embedUrl}?url=${targetUrl}&format=json`) + data = JSON.parse(data) + } + if (data) { let output = { type: data.type, embed: data.html, diff --git a/yarn.lock b/yarn.lock index dd072e74a..3db4db7b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2275,6 +2275,13 @@ metascraper-publisher@^4.8.5: dependencies: "@metascraper/helpers" "^4.8.5" +metascraper-soundcloud@^4.8.5: + version "4.8.5" + resolved "https://registry.yarnpkg.com/metascraper-soundcloud/-/metascraper-soundcloud-4.8.5.tgz#6593ba8a26fedbb4a3bebc6d2803e22b38278621" + integrity sha512-fChxmwqCLyans9RKKg1jaL7dh/6twIBgaQm/NjvlKcp4+V39J85wQlZPHBgoXl+K/uMwy94wMftKWWQ1Hxxgkw== + dependencies: + "@metascraper/helpers" "^4.8.5" + metascraper-title@^4.8.5: version "4.8.5" resolved "https://registry.yarnpkg.com/metascraper-title/-/metascraper-title-4.8.5.tgz#406de3b443442b34cfffba207d4b53de9343ad98"