Skip to content

Commit 0622039

Browse files
committed
feat: implement JSON-LD retrieval of image
1 parent 6be3164 commit 0622039

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

packages/metascraper-helpers/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const {
66
replace,
77
includes,
88
isString,
9+
isArray,
910
trim,
1011
flow,
1112
chain,
@@ -210,6 +211,8 @@ module.exports = {
210211
normalizeUrl,
211212
isMime,
212213
isUrl,
214+
isString,
215+
isArray,
213216
isVideoUrl,
214217
isAudioUrl,
215218
isImageUrl,

packages/metascraper-image/index.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict'
22

3-
const { $filter, url: urlFn } = require('@metascraper/helpers')
3+
const { $filter, url: urlFn, isString, isArray } = require('@metascraper/helpers')
44

55
/**
66
* Wrap a rule with validation and formatting logic.
@@ -14,13 +14,25 @@ const wrap = rule => ({ htmlDom, url }) => {
1414
return urlFn(value, { url })
1515
}
1616

17+
const findImageFromLd = ({ jsonLd, url }) => {
18+
const value = jsonLd.image
19+
if (isString(value)) {
20+
return urlFn(value, { url })
21+
}
22+
if (isArray(value) && value.length > 0 && value[0].url) {
23+
return urlFn(value[0].url, { url })
24+
}
25+
return null
26+
}
27+
1728
const getSrc = el => el.attr('src')
1829

1930
/**
2031
* Rules.
2132
*/
2233
module.exports = () => ({
2334
image: [
35+
findImageFromLd,
2436
wrap($ => $('meta[property="og:image:secure_url"]').attr('content')),
2537
wrap($ => $('meta[property="og:image:url"]').attr('content')),
2638
wrap($ => $('meta[property="og:image"]').attr('content')),

packages/metascraper/__snapshots__/index.js.snap-shot

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -972,7 +972,7 @@ exports['engadget 1'] = {
972972
"author": null,
973973
"date": "2019-01-07T15:37:00.000Z",
974974
"description": "Previously, only paid subscribers had access to private repositories.",
975-
"image": "https://o.aolcdn.com/images/dims?thumbnail=1200%2C630&quality=80&image_uri=https%3A%2F%2Fo.aolcdn.com%2Fimages%2Fdims%3Fcrop%3D4834%252C3230%252C0%252C0%26quality%3D85%26format%3Djpg%26resize%3D1600%252C1069%26image_uri%3Dhttps%253A%252F%252Fs.yimg.com%252Fos%252Fcreatr-images%252F2019-01%252F2d1e22f0-12ae-11e9-bae7-60d640081814%26client%3Da1acac3e1b3290917d92%26signature%3D269ae0af3a1a1772ffea6759d126791b9ad25184&client=amp-blogside-v2&signature=ea8c3bcfcab1cb450830a18333e5a76988365326",
975+
"image": "https://o.aolcdn.com/images/dims?thumbnail=640%2C480&quality=80&image_uri=https%3A%2F%2Fo.aolcdn.com%2Fimages%2Fdims%3Fcrop%3D4834%252C3230%252C0%252C0%26quality%3D85%26format%3Djpg%26resize%3D1600%252C1069%26image_uri%3Dhttps%253A%252F%252Fs.yimg.com%252Fos%252Fcreatr-images%252F2019-01%252F2d1e22f0-12ae-11e9-bae7-60d640081814%26client%3Da1acac3e1b3290917d92%26signature%3D269ae0af3a1a1772ffea6759d126791b9ad25184&client=amp-blogside-v2&signature=4539df4b9d0dc62559e62894701669f8e9e58612",
976976
"video": null,
977977
"lang": "en",
978978
"logo": "https://s.blogsmithmedia.com/www.engadget.com/assets-h79a2a298ee2333258b2b96d407e66b8d/images/favicon-160x160.png?h=1638b0a8bbe7effa8f85c3ecabb63620",

0 commit comments

Comments
 (0)