mirror of
https://github.com/IT4Change/Ocelot-Social.git
synced 2025-12-13 07:45:56 +00:00
added sources to results from which data was aggregated
This commit is contained in:
parent
32fad6118c
commit
f8f0ff3d06
@ -12,6 +12,7 @@ type Embed {
|
||||
lang: String
|
||||
logo: String
|
||||
embed: String
|
||||
sources: [String]
|
||||
}
|
||||
|
||||
type Query {
|
||||
|
||||
@ -26,6 +26,8 @@ const request = require('request-promise-native')
|
||||
const find = require('lodash/find')
|
||||
const isEmpty = require('lodash/isEmpty')
|
||||
const each = require('lodash/each')
|
||||
const isArray = require('lodash/isArray')
|
||||
const mergeWith = require('lodash/mergeWith')
|
||||
const urlParser = require('url')
|
||||
|
||||
// quick in memory cache
|
||||
@ -52,12 +54,15 @@ const removeEmptyAttrs = obj => {
|
||||
|
||||
const scraper = {
|
||||
async fetch(targetUrl) {
|
||||
|
||||
if (targetUrl.indexOf('//youtu.be/')) {
|
||||
// replace youtu.be to get proper results
|
||||
targetUrl = targetUrl.replace('//youtu.be/', '//youtube.com/')
|
||||
}
|
||||
|
||||
if (cache[targetUrl]) {
|
||||
return cache[targetUrl]
|
||||
}
|
||||
|
||||
const url = parseUrl.parse(targetUrl, true)
|
||||
|
||||
let meta = {}
|
||||
@ -89,10 +94,15 @@ const scraper = {
|
||||
})
|
||||
])
|
||||
|
||||
const output = {
|
||||
...(removeEmptyAttrs(meta)),
|
||||
...(removeEmptyAttrs(embed))
|
||||
}
|
||||
const output = mergeWith(
|
||||
meta,
|
||||
embed,
|
||||
(objValue, srcValue) => {
|
||||
if (isArray(objValue)) {
|
||||
return objValue.concat(srcValue);
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
if (isEmpty(output)) {
|
||||
throw new ApolloError('Not found', 404)
|
||||
@ -105,6 +115,9 @@ const scraper = {
|
||||
output.url += `&start=${YouTubeStartParam}`
|
||||
}
|
||||
|
||||
// write to cache
|
||||
cache[targetUrl] = output
|
||||
|
||||
return output
|
||||
},
|
||||
async fetchEmbed(targetUrl) {
|
||||
@ -133,6 +146,8 @@ const scraper = {
|
||||
date: data.upload_date ? new Date(data.upload_date).toISOString() : null
|
||||
}
|
||||
|
||||
output.sources = ['oembed']
|
||||
|
||||
return output
|
||||
}
|
||||
return {}
|
||||
@ -142,16 +157,12 @@ const scraper = {
|
||||
// const parsedURL = urlParser.parse(targetUrl)
|
||||
// console.log(parsedURL)
|
||||
|
||||
// get from cache
|
||||
if (cache[targetUrl]) {
|
||||
return cache[targetUrl]
|
||||
}
|
||||
// get from cach
|
||||
|
||||
const { body: html, url } = await got(targetUrl)
|
||||
const metadata = await metascraper({ html, url })
|
||||
|
||||
// write to cache
|
||||
cache[targetUrl] = metadata
|
||||
metadata.sources = ['resource']
|
||||
|
||||
return metadata
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user