Skip to content

Instantly share code, notes, and snippets.

@vdavez
Last active August 29, 2015 14:02
Show Gist options
  • Save vdavez/b284abbf6fbc946ab7a4 to your computer and use it in GitHub Desktop.
Save vdavez/b284abbf6fbc946ab7a4 to your computer and use it in GitHub Desktop.
First pass at scotus-bookmarks
var servo = require('servojs')
var cheerio = require('cheerio')
var scotus_page = 'http://scotus-bookmarks.herokuapp.com/urls/'
var request = require('request')
var out = []
var statusArray = []
var fs = require('fs')
servo.getElementsFromPage(scotus_page, "tr", runThrElems)
function runThrElems(elems) {
var links = elems
getElem(links, links.shift())
}
function getElem (links, elem) {
if (elem) {
async(elem, function (result) {
out.push(result)
return getElem(links, links.shift())
})
}
else {
allDone()
}
}
function allDone () {
out.shift()
var full = out
getStatuses(full, out.shift())
}
function async(e, callback) {
var item = {}
item["link"] = e.children('td').eq(0).text()
item["name"] = e.children('td').eq(3).text()
callback(item)
}
function getStatuses (objs, obj) {
if (typeof obj != undefined) {
getStatus(obj, function (result) {
fs.appendFileSync('out.json', JSON.stringify(result))
return getStatuses(objs, objs.shift())
})
}
else {
fin()
}
}
function getStatus (obj, callback) {
request.head({url: obj.link}, function (err, res, body) {
if (!err) {
obj["status"] = res.statusCode
callback(obj)
}
else {
callback(err)
}
})
}
function fin () {
console.log("All done")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment