UNPKG

pinxport

Version:

Pinboard and Delicious command-line export script

83 lines (70 loc) 2.16 kB
// Generated by CoffeeScript 1.4.0 (function() { var argv, csvLineItem, jsonToCsv, optimist, options, quote_re, request, tagstr, xml2js; request = require('request'); optimist = require('optimist'); xml2js = require('xml2js'); optimist = optimist.usage('Usage: $0 --token [Pinboard token] --tag [tag] --output [csv] --site [site uri]').alias('t', 'tag')["default"]('output', 'csv')["default"]('site', 'api.pinboard.in'); quote_re = new RegExp('"', 'g'); argv = optimist.argv; csvLineItem = function(item) { return '"' + item.replace(quote_re, '""') + '"'; }; jsonToCsv = function(posts) { var csv, line, post, tags, _i, _len; csv = []; csv.push('"tags", "title", "uri"'); for (_i = 0, _len = posts.length; _i < _len; _i++) { post = posts[_i]; tags = post.tags || post.tag; line = ''; line += csvLineItem(tags) + ','; line += csvLineItem(post.description) + ','; line += csvLineItem(post.href); csv.push(line); } return csv.join('\n'); }; if (argv.tag != null) { tagstr = typeof argv.tag === 'string' ? argv.tag : argv.tag.join(','); } else { tagstr = ''; } options = { uri: 'https://' + argv.site + '/v1/posts/all', qs: { auth_token: argv.token, tag: tagstr, format: 'json' }, json: true, headers: { Connection: 'close', 'User-Agent': 'pinXport (https://github.com/webjay/pinXport)' } }; request.get(options, function(err, request, posts) { var parser; if (err != null) { return console.error(err); } if (request.statusCode !== 200) { console.error('Status: ' + request.statusCode); console.error(optimist.help()); return; } if (typeof posts !== 'object') { parser = new xml2js.Parser({ mergeAttrs: true }); return parser.parseString(posts, function(err, json) { if (err != null) { return console.error('Error parsing XML: ' + err); } return console.log(jsonToCsv(json.posts.post)); }); } else { return console.log(jsonToCsv(posts)); } }); }).call(this);