2ch
Version:
A JavaScript library for comfortable 2ch watching.
52 lines (43 loc) • 1.5 kB
text/coffeescript
_ = require 'lodash'
util = require './util'
module.exports = class Bbs
constructor: (, ) ->
getThreadUrl: (number) ->
"#{@bbsMenu.getBbsUrl @name}dat/#{number}.dat"
fetch: (done) ->
url = .getBbsUrl() + 'subject.txt'
util.requestGet(url).end done
fetchThreadHeader: (query, done) ->
if .updatedAt?
query, done
else
.update (error) =>
return done error if error
url = .getBbsUrl
return done new Error('Unknown BBS name: ' + ) unless url?
query, done
searchThreadHeader: (query, text) ->
if _.isRegExp(query)
query = query.toString().replace /^\/|\/[igm]*$/g, ''
reStr = "^([0-9]+)\\.dat<>(.*#{query}.*) \\(([0-9]+)\\)$"
else
query = util.escapeRegExpChars query
reStr = "^([0-9]+)\\.dat<>(#{query}) \\(([0-9]+)\\)$"
matches = text.match(new RegExp(reStr, 'img'))
return null unless matches
re = new RegExp(reStr, 'im')
headers = matches.map (m) =>
match = re.exec m
{
number: Number match[1]
title: match[2]
count: Number match[3]
}
headers = _.sortBy(headers, (h) -> h.count).filter((h) -> h.count < 1000)
headers.reverse()
headers[0]
_fetchThreadHeader: (query, done) ->
(error, res) =>
return done error if error
header = query, res.body.text
done null, header