11var request = require ( 'request-promise' ) ;
22var cheerio = require ( 'cheerio' ) ;
3- var { getId, getElement } = require ( './helpers' ) ;
3+ var { getId, getElement, getDate, sanatizer } = require ( './helpers' ) ;
4+ var { effectParse, recipeParse, descriptionParse } = require ( './parsing-service/helpers' ) ;
45
56var requestOpts = {
67 url : '' ,
78 transform : function ( body ) {
89 return cheerio . load ( body ) ;
910 }
1011} ;
12+ var item = { } ;
13+ var body = '' ;
1114
1215var getWeapons = exports . getWeapons = function ( url ) {
1316 requestOpts . url = url ;
1417 return request ( requestOpts ) . then ( function ( $ ) {
15- var itemId = getId ( url ) ;
16- var type = $ ( 'div.ak-encyclo-detail-right.ak-nocontentpadding' ) . find ( 'div.ak-encyclo-detail-type.col-xs-6' ) . find ( 'span' ) . text ( ) . trim ( ) ;
17- var name = $ ( 'h1.ak-return-link' ) . text ( ) . trim ( ) ;
18- var description = $ ( 'div.ak-encyclo-detail-right.ak-nocontentpadding' ) . find ( 'div.ak-container.ak-panel' ) . first ( ) . find ( 'div.ak-panel-content' ) . text ( ) . trim ( ) ;
19- var lvl = $ ( 'div.ak-encyclo-detail-right.ak-nocontentpadding' ) . find ( 'div.ak-encyclo-detail-level.col-xs-6.text-right' ) . text ( ) . trim ( ) . replace ( / \D / g, '' ) ;
20- var imgUrl = $ ( 'div.ak-encyclo-detail-illu' ) . find ( 'img' ) . attr ( 'src' ) . replace ( 'dofus/ng/img/../../../' , '' ) ;
21-
22- var item = {
23- id : itemId ,
24- name : name ,
25- description : description ,
26- lvl : lvl ,
27- type : type ,
28- imgUrl : imgUrl ,
29- url : url
30- }
31-
18+ /////// Global initializations ///////
19+ body = $ . html ( ) ;
20+
21+ /////// Description parse ///////
22+ item = descriptionParse ( body , url ) ;
23+
24+ /////// Tabs initializations ///////
3225 item [ "stats" ] = [ ] ;
26+ item [ "characteristic" ] = [ ] ;
3327 item [ "condition" ] = [ ] ;
34- item [ "recipe" ] = [ ] ;
28+ item [ "recipe" ] = [ ] ;
29+ item [ "set" ] = [ ] ;
30+
31+ /////// Sets parse ///////
3532 if ( typeof $ ( 'div.ak-container.ak-panel.ak-crafts' ) . next ( 'div.ak-container.ak-panel' ) . find ( 'div.ak-panel-title' ) . find ( 'a' ) . attr ( 'href' ) !== 'undefined' ) {
36- var setUrl = 'https://www.dofus-touch.com' + $ ( 'div.ak-container.ak-panel.ak-crafts' ) . next ( 'div.ak-container.ak-panel' ) . find ( 'div.ak-panel-title' ) . find ( 'a' ) . attr ( 'href' ) ;
3733 var setId = $ ( 'div.ak-container.ak-panel.ak-crafts' ) . next ( 'div.ak-container.ak-panel' ) . find ( 'div.ak-panel-title' ) . find ( 'a' ) . attr ( 'href' ) . replace ( / \D / g, '' ) ;
38- var setName = $ ( 'div.ak-container.ak-panel.ak-crafts' ) . next ( 'div.ak-container.ak-panel' ) . find ( 'div.ak-panel-title' ) . find ( 'a' ) . text ( ) ;
39- item . set = {
40- id : setId ,
41- url : setUrl ,
42- name : setName
43- }
44- } else {
45- item [ "set" ] = [ ] ;
34+ item . set = setId ;
4635 }
47- item [ "characteristic" ] = [ ] ;
48- $ ( 'div.ak-encyclo-detail-right.ak-nocontentpadding' ) . find ( 'div.col-sm-6' ) . eq ( 1 ) . find ( 'div.ak-container.ak-panel.no-padding' ) . eq ( 0 ) . find ( 'div.ak-list-element' ) . each ( function ( i , element ) {
49- var spanTxt = $ ( this ) . find ( "div.ak-title" ) . find ( "span" ) . text ( ) ;
50- $ ( this ) . find ( "div.ak-title" ) . find ( "span" ) . remove ( ) ;
51- var characteristic = $ ( this ) . find ( "div.ak-title" ) . text ( ) . trim ( ) + ' ' + spanTxt ;
52- var element = characteristic . substring ( 0 , characteristic . indexOf ( ":" ) ) . trim ( ) ;
53- var subElement = characteristic . substring ( characteristic . indexOf ( ":" ) + 1 , characteristic . length ) . trim ( ) ;
54- var groupeElement = { [ element ] : subElement } ;
55- item [ "characteristic" ] . push ( groupeElement ) ;
56- } ) ;
5736
58- $ ( 'div.ak-encyclo-detail-right.ak-nocontentpadding' ) . find ( 'div.col-sm-6' ) . eq ( 0 ) . find ( 'div.ak-list-element' ) . each ( function ( i , element ) {
59- var stat = $ ( this ) . find ( "div.ak-title" ) . text ( ) . trim ( ) ;
60- var element = getElement ( stat ) ;
61- element = element . charAt ( 0 ) . toUpperCase ( ) + element . slice ( 1 ) ;
62- var numbers = [ ] ;
63- stat . replace ( / ( - ? \d [ \d \. ] * ) / g, function ( x ) {
64- var n = Number ( x ) ; if ( x == n ) { numbers . push ( x ) ; }
37+ /////// Effects & Condtions & Characteristics parse ///////
38+ var $akContainer = $ ( 'div.ak-encyclo-detail-right.ak-nocontentpadding' ) . find ( 'div.ak-container.ak-panel' ) ;
39+ if ( typeof $akContainer . eq ( 1 ) !== 'undefined' ) {
40+ $akContainer . eq ( 1 ) . find ( 'div.col-sm-6' ) . each ( function ( i , element ) {
41+ if ( $ ( this ) . find ( 'div.ak-container.ak-panel' ) . eq ( 1 ) . html ( ) !== null ) {
42+ categorySwitch ( $ ( this ) . find ( 'div.ak-container.ak-panel' ) . eq ( 1 ) . find ( 'div.ak-panel-title' ) . text ( ) . trim ( ) . toLowerCase ( ) , $ ( this ) . find ( 'div.ak-container.ak-panel' ) . eq ( 1 ) . html ( ) ) ;
43+ }
44+ var infoCategory = $ ( this ) . find ( 'div.ak-container.ak-panel' ) . eq ( 0 ) . find ( 'div.ak-panel-title' ) . text ( ) . trim ( ) . toLowerCase ( ) . normalize ( 'NFD' ) . replace ( / [ \u0300 - \u036f ] / g, "" ) ;
45+ categorySwitch ( infoCategory , $ ( this ) . html ( ) ) ;
6546 } ) ;
66- var groupeElement = { [ element ] : { 'from' : numbers [ 0 ] , 'to' : numbers [ 1 ] } } ;
67- item [ "stats" ] . push ( groupeElement ) ;
68- } ) ;
69-
70- $ ( 'div.ak-encyclo-detail-right.ak-nocontentpadding' ) . find ( 'div.col-sm-6' ) . eq ( 1 ) . find ( 'div.ak-container.ak-panel.no-padding' ) . eq ( 1 ) . find ( 'div.ak-list-element' ) . each ( function ( i , element ) {
71- var condition = $ ( this ) . find ( "div.ak-title" ) . remove ( "br" ) . text ( ) . trim ( ) ;
72- var conditionTab = condition . split ( 'et\n' ) ;
73- item [ "condition" ] = conditionTab ;
74- } ) ;
47+ }
7548
49+ /////// Recipes parse ///////
7650 if ( typeof $ ( 'div.ak-container.ak-panel.ak-crafts' ) !== 'undefined' ) {
77- $ ( 'div.ak-container.ak-panel.ak-crafts' ) . find ( 'div.ak-panel-content' ) . find ( 'div.ak-container.ak-content-list' ) . find ( 'div.ak-column' ) . each ( function ( i , element ) {
78- var setUrl = 'https://www.dofus-touch.com' + $ ( this ) . find ( 'div.ak-title' ) . find ( 'a' ) . attr ( 'href' ) ;
79- var setId = $ ( this ) . find ( 'div.ak-title' ) . find ( 'a' ) . attr ( 'href' ) . replace ( / \D / g, '' ) ;
80- var setImage = $ ( this ) . find ( 'div.ak-image' ) . find ( 'a' ) . find ( 'span.ak-linker' ) . find ( 'img' ) . attr ( 'src' ) . replace ( 'dofus/ng/img/../../../' , '' ) ;
81- var setQuantity = $ ( this ) . find ( 'div.ak-front' ) . text ( ) . replace ( / \x / g, '' ) . trim ( ) ;
82- var setName = $ ( this ) . find ( 'div.ak-content' ) . find ( 'div.ak-title' ) . find ( 'a' ) . find ( 'span.ak-linker' ) . text ( ) . trim ( ) ;
83- var setType = $ ( this ) . find ( 'div.ak-content' ) . find ( 'div.ak-text' ) . text ( ) . trim ( ) ;
84- var setLvl = $ ( this ) . find ( 'div.ak-aside' ) . text ( ) . replace ( / \D / g, '' ) . trim ( ) ;
85-
86- var groupeElement = { [ setName ] : {
87- 'id' : setId ,
88- 'name' : setName ,
89- 'url' : setUrl ,
90- 'imgUrl' : setImage ,
91- 'type' : setType ,
92- 'lvl' : setLvl ,
93- 'quantity' : setQuantity
94- } } ;
95- item [ "recipe" ] . push ( groupeElement ) ;
96- } ) ;
51+ item [ "recipe" ] = recipeParse ( body ) ; ;
9752 }
53+
9854 return item ;
9955 } ) ;
56+ }
57+
58+ function conditionParse ( body ) {
59+ var $ = cheerio . load ( body ) ;
60+ var condition = $ ( 'div.ak-panel-content' ) . find ( 'div.ak-list-element' ) . find ( "div.ak-title" ) . remove ( "br" ) . text ( ) . trim ( ) ;
61+ condition = sanatizer ( condition ) ;
62+ var conditionTab = condition . split ( 'et' ) ;
63+ conditionTab = conditionTab . map ( function ( string ) {
64+ return sanatizer ( string ) . trim ( ) ;
65+ } ) ;
66+ item [ "condition" ] = conditionTab ;
67+ }
68+
69+ function characteristicParse ( body ) {
70+ var $ = cheerio . load ( body ) ;
71+ $ ( 'div.ak-container.ak-panel.no-padding' ) . eq ( 0 ) . find ( 'div.ak-list-element' ) . each ( function ( i , element ) {
72+ var spanTxt = $ ( this ) . find ( "div.ak-title" ) . find ( "span" ) . text ( ) ;
73+ $ ( this ) . find ( "div.ak-title" ) . find ( "span" ) . remove ( ) ;
74+ var characteristic = $ ( this ) . find ( "div.ak-title" ) . text ( ) . trim ( ) + ' ' + spanTxt ;
75+ var element = characteristic . substring ( 0 , characteristic . indexOf ( ":" ) ) . trim ( ) ;
76+ var subElement = characteristic . substring ( characteristic . indexOf ( ":" ) + 1 , characteristic . length ) . trim ( ) ;
77+ var groupeElement = { [ element ] : subElement } ;
78+ item [ "characteristic" ] . push ( groupeElement ) ;
79+ } ) ;
80+ }
81+
82+ function categorySwitch ( infoCategory , body ) {
83+ var $ = cheerio . load ( body ) ;
84+ switch ( infoCategory ) {
85+ case 'effets' :
86+ item [ "stats" ] = effectParse ( body ) ;
87+ break ;
88+ case 'effects' :
89+ item [ "stats" ] = effectParse ( body ) ;
90+ break ;
91+ case 'characteristics' :
92+ characteristicParse ( body ) ;
93+ break ;
94+ case 'caracteristiques' :
95+ characteristicParse ( body ) ;
96+ break ;
97+ case 'conditions' :
98+ conditionParse ( body ) ;
99+ break ;
100+ console . log ( 'Sorry, we are out of ' + infoCategory + '.' ) ;
101+ }
100102}
0 commit comments