Skip to content

Instantly share code, notes, and snippets.

@timmarinin
Created November 25, 2014 09:50
Show Gist options
  • Save timmarinin/ab3da2280d46d832fcca to your computer and use it in GitHub Desktop.
Save timmarinin/ab3da2280d46d832fcca to your computer and use it in GitHub Desktop.
node as perl
var cheerio = require('cheerio'),
iconv = require('iconv-lite'),
sizeOf = require('image-size'),
fs = require('fs');
iconv.extendNodeEncodings(); //to use win1251 as node encoding
//extract filename from PHP method
function getFilenameFromGetUrld(str) {
var newStr = str.substr(str.indexOf("'") + 1)
newStr = newStr.substr(0, newStr.indexOf("'"))
return newStr;
}
function getDimensions(filename) {
filename = '/path/to/images/folder/' + filename
return sizeOf(filename)
}
function generateMeta(dimensions) {
return cheerio.load('<meta itemprop="width" content="' + dimensions.width + 'px">\n <meta itemprop="height" content="' + dimensions.height +'px">\n ');
}
function getFixed(filename) {
console.log('fixing', filename);
//win1251 -> utf8
var text = fs.readFileSync(prefix + filename, {encoding:'win1251'});
var $ = cheerio.load(text, {decodeEntities: false});
var $img = $('img[itemprop="contentUrl"]')
if ($img.length > 0) {
var dimensions = getDimensions(getFilenameFromGetUrld($img.attr('src')));
var els = generateMeta(dimensions);
$img.before(els.html())
//utf8 -> win1251
fs.writeFileSync(prefix + filename, iconv.encode($.html(), 'win1251'));
} else {
console.log('no img in ', filename, '!'); //it helped find one file, where img was incorrect
}
}
var prefix = '/path/to/files/';
var files = fs.readdirSync(prefix);
files.forEach(getFixed)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment