open-graph-scraper
Advanced tools
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); | ||
}); | ||
}; | ||
}; |
{ | ||
"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 @@ } |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
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
434
1
69
3
+ Addedlodash@3.6.0
+ Addedansi-regex@2.1.1(transitive)
+ Addedansi-styles@2.2.1(transitive)
+ Addedbl@0.9.5(transitive)
+ Addedbluebird@2.11.0(transitive)
+ Addedboolbase@1.0.0(transitive)
+ Addedboom@2.10.1(transitive)
+ Addedcaseless@0.9.0(transitive)
+ Addedchalk@1.1.3(transitive)
+ Addedcheerio@0.19.0(transitive)
+ Addedcommander@2.20.3(transitive)
+ Addedcryptiles@2.0.5(transitive)
+ Addedcss-select@1.0.0(transitive)
+ Addedcss-what@1.0.0(transitive)
+ Addeddom-serializer@0.1.1(transitive)
+ Addeddomhandler@2.3.0(transitive)
+ Addedentities@1.1.2(transitive)
+ Addedescape-string-regexp@1.0.5(transitive)
+ Addedforever-agent@0.6.1(transitive)
+ Addedform-data@0.2.0(transitive)
+ Addedgenerate-function@2.3.1(transitive)
+ Addedgenerate-object-property@1.2.0(transitive)
+ Addedhar-validator@1.8.0(transitive)
+ Addedhas-ansi@2.0.0(transitive)
+ Addedhawk@2.3.1(transitive)
+ Addedhoek@2.16.3(transitive)
+ Addedhtmlparser2@3.8.3(transitive)
+ Addedis-my-ip-valid@1.0.1(transitive)
+ Addedis-my-json-valid@2.20.6(transitive)
+ Addedis-property@1.0.2(transitive)
+ Addedisstream@0.1.2(transitive)
+ Addedjsonpointer@5.0.1(transitive)
+ Addedlodash@3.6.0(transitive)
+ Addedmime-db@1.12.0(transitive)
+ Addedmime-types@2.0.14(transitive)
+ Addednth-check@1.0.2(transitive)
+ Addedoauth-sign@0.6.0(transitive)
+ Addedqs@2.4.2(transitive)
+ Addedreadable-stream@1.0.34(transitive)
+ Addedrequest@2.55.0(transitive)
+ Addedsntp@1.0.9(transitive)
+ Addedstringstream@0.0.6(transitive)
+ Addedstrip-ansi@3.0.1(transitive)
+ Addedsupports-color@2.0.0(transitive)
+ Addedtunnel-agent@0.4.3(transitive)
+ Addedxtend@4.0.2(transitive)
- RemovedCSSselect@0.4.1(transitive)
- RemovedCSSwhat@0.4.7(transitive)
- Removedboom@0.4.2(transitive)
- Removedcheerio@0.15.0(transitive)
- Removedcryptiles@0.2.2(transitive)
- Removeddom-serializer@0.2.2(transitive)
- Removeddomelementtype@2.3.0(transitive)
- Removeddomhandler@2.2.1(transitive)
- Removedentities@2.2.0(transitive)
- Removedforever-agent@0.5.2(transitive)
- Removedform-data@0.1.4(transitive)
- Removedhawk@1.0.0(transitive)
- Removedhoek@0.9.1(transitive)
- Removedhtmlparser2@3.7.3(transitive)
- Removedlodash@2.4.2(transitive)
- Removedmime@1.2.11(transitive)
- Removedoauth-sign@0.3.0(transitive)
- Removedqs@0.6.6(transitive)
- Removedrequest@2.34.0(transitive)
- Removedsntp@0.2.4(transitive)
- Removedtunnel-agent@0.3.0(transitive)
Updatedcheerio@0.19.0
Updatedrequest@2.55.0