Skip to content

Instantly share code, notes, and snippets.

@oieioi
Last active August 29, 2015 14:07
Show Gist options
  • Save oieioi/bd82d7d15ea8ab748560 to your computer and use it in GitHub Desktop.
Save oieioi/bd82d7d15ea8ab748560 to your computer and use it in GitHub Desktop.
localhost はてブ数
#!/usr/bin/env coffee --nodejs --harmony
request = require 'request'
fs = require 'fs'
# mock request
#request = (str, cb)->
# setTimeout ->
# cb null, null, "{\"hoge\": \"#{str}\"}"
# , 10
hatebu = 'http://api.b.st-hatena.com/entry.counts'
url = 'http%3A%2F%2Flocalhost'
file = 'result'
interval = 3000
getQuery = (ports) ->
res = for port in ports then "url=#{url}%3A#{port}"
res.join '&'
prettyJson = (json) ->
res = for key of json then "#{key} #{json[key]}"
"\n#{res.join '\n'}"
req = (ports)-> new Promise (done, reject) ->
console.log "request port #{ports[0]} ~ #{ports[ports.length - 1]}"
query = getQuery ports
request "#{hatebu}?#{query}", (err, res, body)->
if err
reject err
return
fs.appendFile file, prettyJson(JSON.parse(body)), (err)->
if err
reject err
return
setTimeout done, interval
main = (count, ports)->
unless count <= ports.length
console.log "done! total #{Math.ceil count / 50} requested"
return 0
(req ports.slice(count, count + 50)).then ->
main count + 50, ports
, (err)->
console.log err
main 0, [0..10000]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment