Socket
Socket
Sign inDemoInstall

open-graph-scraper

Package Overview
Dependencies
Maintainers
1
Versions
108
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

open-graph-scraper - npm Package Compare versions

Comparing version 0.9.9 to 1.0.1

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);

});
};
};

9

package.json
{
"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 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc