From f0d0fdd7fcc952f2358b2ba11f86644a223733c7 Mon Sep 17 00:00:00 2001 From: Pedro Penna Date: Tue, 17 May 2016 15:12:32 -0300 Subject: [PATCH] fix issue related to searching town postcodes with no street or district data #3 --- lib/scraper.js | 34 ++++++++++++++++++++++++---------- test/scraper.js | 20 ++++++++++++++++++++ 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/lib/scraper.js b/lib/scraper.js index 7c03c9b..1c81110 100644 --- a/lib/scraper.js +++ b/lib/scraper.js @@ -161,18 +161,32 @@ var data = html('.caixacampobranco,.caixacampoazul'); data.each(function() { - var address = $(this).find('.respostadestaque'); - - response.data.push({ - 'address': parseAddress(address.eq(0).text().trim()), - 'district': address.eq(1).text().trim(), - 'city': address.eq(2).text().trim().split('/')[0].trim(), - 'state': address.eq(2).text().trim().split('/')[1].trim(), - 'postcode': parsePostcode(address.eq(3).text().trim()), - 'client': address.eq(4) ? address.eq(4).text().trim() : null + var labels = $(this).find('.resposta'); + + var parsedResponse = {}; + address.each(function(index, element) { + var label = labels.eq(index).text().trim(); + var text = $(element).text().trim(); + + if (label == 'Localidade / UF:' + || label == 'Localidade/UF:') { + var stateAndCity = text.split('/'); + parsedResponse.city = stateAndCity[0].trim(); + parsedResponse.state = stateAndCity[1].trim(); + } else if (label == 'Bairro:') { + parsedResponse.district = text; + } else if (label == 'Logradouro:' + || label == 'Endereço:') { + parsedResponse.address = parseAddress(text); + } else if (label == 'CEP:') { + parsedResponse.postcode = parsePostcode(text); + } else if (label == 'Cliente:') { + parsedResponse.client = text; + } }); + response.data.push(parsedResponse); }); // paging @@ -266,4 +280,4 @@ return CEP; -})); \ No newline at end of file +})); diff --git a/test/scraper.js b/test/scraper.js index 655b90a..2f5053c 100644 --- a/test/scraper.js +++ b/test/scraper.js @@ -27,6 +27,26 @@ describe('Address from Postcode', function() { }); }); + + it('should get the city and state data without the fine-grained street and district data from a town postcode', function(done) { + + CEP.scrape('34000000', function(res) { + should(res).be.ok; + should(res.data).be.an.Array(); + should(res.data).not.be.empty(); + + var result = res.data[0]; + + should.not.exist(result.address); + should.not.exist(result.district); + should.equal(result.city, 'Nova Lima', 'City not equal as expected'); + should.equal(result.state, 'MG', 'State not equal as expected'); + + done(); + }); + + }); + });