open-graph-scraper
Advanced tools
Comparing version
184
app.js
var request = require('request'), | ||
cheerio = require('cheerio'); | ||
cheerio = require('cheerio'), | ||
_ = require('lodash'); | ||
@@ -10,2 +11,98 @@ module.exports = function(options, callback){ | ||
var fieldsArray = [{ | ||
multiple: false, | ||
property: 'og:title', | ||
fieldName: 'ogTitle' | ||
}, { | ||
multiple: false, | ||
property: 'og:type', | ||
fieldName: 'ogType' | ||
}, { | ||
multiple: true, | ||
property: 'og:image', | ||
fieldName: 'ogImage' | ||
}, { | ||
multiple: true, | ||
property: 'og:image:width', | ||
fieldName: 'ogImageWidth' | ||
}, { | ||
multiple: true, | ||
property: 'og:image:height', | ||
fieldName: 'ogImageHeight' | ||
}, { | ||
multiple: true, | ||
property: 'og:image:type', | ||
fieldName: 'ogImageType' | ||
}, { | ||
multiple: false, | ||
property: 'og:url', | ||
fieldName: 'ogUrl' | ||
}, { | ||
multiple: false, | ||
property: 'og:audio', | ||
fieldName: 'ogAudio' | ||
}, { | ||
multiple: false, | ||
property: 'og:description', | ||
fieldName: 'ogDescription' | ||
}, { | ||
multiple: false, | ||
property: 'og:determiner', | ||
fieldName: 'ogDeterminer' | ||
}, { | ||
multiple: false, | ||
property: 'og:locale', | ||
fieldName: 'ogLocale' | ||
}, { | ||
multiple: false, | ||
property: 'og:locale:alternate', | ||
fieldName: 'ogLocaleAlternate' | ||
}, { | ||
multiple: false, | ||
property: 'og:site_name', | ||
fieldName: 'ogSiteName' | ||
}, { | ||
multiple: true, | ||
property: 'og:video', | ||
fieldName: 'ogVideo' | ||
}, { | ||
multiple: true, | ||
property: 'og:video:width', | ||
fieldName: 'ogVideoWidth' | ||
}, { | ||
multiple: true, | ||
property: 'og:video:height', | ||
fieldName: 'ogVideoHeight' | ||
}, { | ||
multiple: true, | ||
property: 'og:video:type', | ||
fieldName: 'ogVideoType' | ||
}]; | ||
var mediaMapper = function(item) { | ||
return { | ||
url: item[0], | ||
width: item[1], | ||
height: item[2], | ||
type: item[3] | ||
} | ||
}; | ||
var mediaSorter = function(a, b) { | ||
if (!(a.url && b.url)) | ||
return 0; | ||
var aRes = a.url.match(/\.(\w{2,5})$/), | ||
aExt = (aRes && aRes[1].toLowerCase()) || null; | ||
var bRes = b.url.match(/\.(\w{2,5})$/), | ||
bExt = (bRes && bRes[1].toLowerCase()) || null; | ||
if (aExt == 'gif' && bExt != 'gif') | ||
return -1; | ||
else if (aExt != 'gif' && bExt == 'gif') | ||
return 1; | ||
else | ||
return Math.max(b.width, b.height) - Math.max(a.width, a.height); | ||
}; | ||
/* | ||
@@ -133,37 +230,52 @@ * get info | ||
keys.forEach(function(key){ | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:title'){ | ||
ogObject.ogTitle = meta[key].attribs.content; | ||
}; | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:type'){ | ||
ogObject.ogType = meta[key].attribs.content; | ||
}; | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:image'){ | ||
ogObject.ogImage = meta[key].attribs.content; | ||
}; | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:url'){ | ||
ogObject.ogUrl = meta[key].attribs.content; | ||
}; | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:audio'){ | ||
ogObject.ogAudio = meta[key].attribs.content; | ||
}; | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:description'){ | ||
ogObject.ogDescription = meta[key].attribs.content; | ||
}; | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:determiner'){ | ||
ogObject.ogDeterminer = meta[key].attribs.content; | ||
}; | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:locale'){ | ||
ogObject.ogLocale = meta[key].attribs.content; | ||
}; | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:locale:alternate'){ | ||
ogObject.ogLocaleAlternate = meta[key].attribs.content; | ||
}; | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:site_name'){ | ||
ogObject.ogSiteName = meta[key].attribs.content; | ||
}; | ||
if(meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:video'){ | ||
ogObject.ogVideo = meta[key].attribs.content; | ||
}; | ||
if(!(meta[key].attribs && meta[key].attribs.property)) | ||
return; | ||
var property = meta[key].attribs.property, | ||
content = meta[key].attribs.content; | ||
fieldsArray.forEach(function(item){ | ||
if (property === item.property){ | ||
if(!item.multiple) | ||
ogObject[item.fieldName] = content; | ||
else if(!ogObject[item.fieldName]) | ||
ogObject[item.fieldName] = [content]; | ||
else if(Array.isArray(ogObject[item.fieldName])) | ||
ogObject[item.fieldName].push(content); | ||
}; | ||
}); | ||
}); | ||
//example of how to get the title tag | ||
/* Combine image/width/height/type | ||
and sort for priority */ | ||
var ogImages = _.zip(ogObject.ogImage, | ||
ogObject.ogImageWidth, | ||
ogObject.ogImageHeight, | ||
ogObject.ogImageType) | ||
.map(mediaMapper).sort(mediaSorter); | ||
/* Combine video/width/height/type | ||
and sort for priority */ | ||
var ogVideos = _.zip(ogObject.ogVideo, | ||
ogObject.ogVideoWidth, | ||
ogObject.ogVideoHeight, | ||
ogObject.ogVideoType) | ||
.map(mediaMapper).sort(mediaSorter); | ||
// Delete temporary fields | ||
fieldsArray.filter(function(item){ | ||
return item.multiple; | ||
}).forEach(function(item) { | ||
delete ogObject[item.fieldName]; | ||
}); | ||
// Select the best image | ||
if (ogImages.length) | ||
ogObject.ogImage = ogImages[0]; | ||
// Select the best video | ||
if (ogVideos.length) | ||
ogObject.ogVideo = ogVideos[0]; | ||
//example of how to get the title tag | ||
// $('title').map(function(i, info) { | ||
@@ -176,2 +288,2 @@ // console.log('title:',info.children[0].data); | ||
}); | ||
}; | ||
}; |
{ | ||
"name": "open-graph-scraper", | ||
"description": "Node.js scraper service for Open Graph info", | ||
"version": "0.9.9", | ||
"version": "1.0.1", | ||
"license": "MIT", | ||
@@ -13,8 +13,9 @@ "main": "app.js", | ||
"dependencies": { | ||
"request": "2.34.0", | ||
"cheerio": "0.15.0" | ||
"request": "2.55.0", | ||
"lodash": "3.6.0", | ||
"cheerio": "0.19.0" | ||
}, | ||
"devDependencies": { | ||
"expect.js": "0.3.1", | ||
"mocha": "1.18.2" | ||
"mocha": "2.2.4" | ||
}, | ||
@@ -21,0 +22,0 @@ "repository": { |
@@ -39,3 +39,8 @@ openGraphScraper | ||
ogUrl: "http://ogp.me/" | ||
ogImage: "http://ogp.me/logo.png" | ||
ogImage: { | ||
url: "http://ogp.me/logo.png" | ||
width: 100 | ||
height: 100 | ||
type: 'image/jpeg' | ||
} | ||
ogDescription: "The Open Graph protocol enables any web page to become a rich object in a social graph." | ||
@@ -42,0 +47,0 @@ } |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
15177
13.78%434
29.94%1
-50%69
7.81%3
50%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated