Jump To …

search.coffee

cheerio = require 'cheerio'
request = require 'request'
url     = require 'url'

defs    = require './defs'

class Search
    constructor: (@options = {}) ->
        do @handleOptions

    handleOptions: =>
        @options.protocol       ?= 'http'                       #
        @options.hostname       ?= 'www.leboncoin.fr'           #
        @options.category       ?= 'annonces'                   #
        @options.debug          ?= false                        #
        @options.verbose        ?= false                        #
        @options.page           ?= 1                            #
        @options.shouldbe       ?= ''                           #
        @options.query          ?= null                         #
        @options.region         ?= 'ile_de_france'              #
        @options.department     ?= 'occasions'                  # toute la france
        @options.urgency_only   ?= false                        #
        @options.sort_by_price  ?= false                        #
        @options.hide_photos    ?= false                        #
        @options.in_title       ?= false                        # search only in title
        @options.url            ?= false                        # force
        @options.location       ?= null
        @options.category_attrs ?= {}

    getUrl: =>
        return @options.url if @options.url
        pathname = "#{@options.category}/offres/#{@options.region}/#{@options.department}/"
        query    = {}
        query.o = parseInt(@options.page, 10) if @options.page > 1
        query.q = @options.query if @options.query
        query.f = @options.filter if @options.filter in ['c', 'p']
        query.ur = 1 if @options.urgency_only
        query.sp = 1 if @options.sort_by_price
        query.th = 0 if @options.hide_photos
        query.it = 1 if @options.in_title
        query.location = @options.location if @options.location

        for k, v of @options.category_attrs
            query[k] = v

        return url.format
            hostname: @options.hostname
            protocol: @options.protocol
            pathname: pathname
            query:    query

    parseHTML: (html) =>
        results = []
        return results

    perform: (callback) =>
        _url = do @getUrl
        request _url, (error, response, html) =>
            results = @parseHTML html
            callback
                error:    error
                response: response
                html:     html
                results:  results

module.exports = Search