mockba 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MOCKBA +4 -1
- package/changes.md +5 -1
- package/index.js +138 -27
- package/package.json +1 -1
package/MOCKBA
CHANGED
package/changes.md
CHANGED
package/index.js
CHANGED
|
@@ -12,38 +12,22 @@ class MOCKBA extends Moskva {
|
|
|
12
12
|
// printRu = false
|
|
13
13
|
human = void 0
|
|
14
14
|
json = false
|
|
15
|
-
skip=[]
|
|
15
|
+
// skip=['country','region','location']
|
|
16
16
|
период_осреднения=null
|
|
17
17
|
static get emojiMap() {
|
|
18
18
|
return new Map(Object.entries({ // does not have default?
|
|
19
19
|
'страна':'🌍 Страна',
|
|
20
20
|
'регион':'📍 Регион',
|
|
21
21
|
'местоположение':'📌 Местоположение',
|
|
22
|
-
'время_наблюдения':'⏰ Дата и время',
|
|
23
|
-
'
|
|
24
|
-
'температура_°C':'🌡️ Температура (°C)',
|
|
25
|
-
'относительная_влажность_процент':'💧 Влажность (%)',
|
|
26
|
-
'направление_ветра':'🧭 Направление ветра',
|
|
27
|
-
'средняя_скорость_ветра_м_с':'🌬️ Скорость ветра (м/с)',
|
|
28
|
-
'горизонтальная_видимость_км':'👀 Видимость (км)',
|
|
29
|
-
'долгосрочные_наблюдения':'┬ 📈 Долгосрочные наблюдения',
|
|
30
|
-
'мин_температура_°C':'⛄️ Мин. температура (°C)',
|
|
31
|
-
'год_мин_температуры':'☃️ Год мин. температуры',
|
|
32
|
-
'макс_температура_°C':'🥵 Макс. температура (°C)',
|
|
33
|
-
'год_макс_температуры':'🔥 Год макс. температуры',
|
|
34
|
-
'макс_осадки_мм':' 🌧️ Макс. осадки',
|
|
35
|
-
'год_макс_осадков':'🌊 Год макс. осадков',
|
|
36
|
-
'среднемесячные_показатели':'📊 Среднемесячные показатели (январь)',
|
|
37
|
-
'средняя_температура_°C':'🌡️ Средняя температура (°C)',
|
|
38
|
-
'осадки_мм':'🌧️ Осадки (мм)',
|
|
39
|
-
'период_осреднения':'📊 Период осреднения'
|
|
22
|
+
'время_наблюдения':'⏰ Дата и время',
|
|
23
|
+
'observation_time':'⏰',
|
|
40
24
|
}))
|
|
41
25
|
}
|
|
42
26
|
printWeather(obj){
|
|
43
|
-
return this.
|
|
27
|
+
return this.printObj(obj,'')
|
|
44
28
|
}
|
|
45
29
|
printRuWeather(obj){
|
|
46
|
-
this.
|
|
30
|
+
this.printRuObj(obj,'')
|
|
47
31
|
}
|
|
48
32
|
tempEmoji(t){
|
|
49
33
|
if(t<=-20) return '🥶'
|
|
@@ -61,9 +45,124 @@ class MOCKBA extends Moskva {
|
|
|
61
45
|
}
|
|
62
46
|
|
|
63
47
|
printObj(o,prefix){
|
|
48
|
+
// период_осреднения =
|
|
49
|
+
for(var k in o){
|
|
50
|
+
if(this.skip&&this.skip.includes(k)) {
|
|
51
|
+
continue
|
|
52
|
+
}
|
|
53
|
+
var logNl=console.log
|
|
54
|
+
var log=data=>{
|
|
55
|
+
process.stdout.write(data)
|
|
56
|
+
}
|
|
57
|
+
// var log1=process.stdout.write;
|
|
58
|
+
if(typeof o[k]=='object'&&o[k]!=null){
|
|
59
|
+
switch(k){
|
|
60
|
+
case 'monthly_averages':
|
|
61
|
+
logNl('┬ 📊 Monthly averages since '+o[k].averaging_period+':')
|
|
62
|
+
this.printObj(o[k],prefix+' ')
|
|
63
|
+
break
|
|
64
|
+
case 'long_term_obs':
|
|
65
|
+
logNl('┬ 📈 Long term observations:')
|
|
66
|
+
this.printObj(o[k],prefix+' ')
|
|
67
|
+
break
|
|
68
|
+
default:
|
|
69
|
+
logNl(prefix+(MOCKBA.emojiMap.get(k)||k))
|
|
70
|
+
this.printObj(o[k],prefix+' ')
|
|
71
|
+
}
|
|
72
|
+
} else {
|
|
73
|
+
switch(k){
|
|
74
|
+
case 'avg_temperature_C': // monthly averages group
|
|
75
|
+
var v=o[k]
|
|
76
|
+
logNl('├─🌡️ \tTemperature\t'+v+'°C')
|
|
77
|
+
break
|
|
78
|
+
case 'precipitation_mm':
|
|
79
|
+
logNl('└─ 🌧️ \tPrecipitation\t'+o[k]+'mm')
|
|
80
|
+
break
|
|
81
|
+
|
|
82
|
+
case 'atmospheric_pressure_mm':
|
|
83
|
+
// logNl('🌡️ Атм. давление\t\t'+o[k]+' мм рт.ст.')
|
|
84
|
+
logNl('⬇️ Atm. pressure\t'+o[k]+' mm')
|
|
85
|
+
break
|
|
86
|
+
case 'temperature_C':
|
|
87
|
+
var температура=parseFloat(o[k])
|
|
88
|
+
logNl(this.tempEmoji(температура)+' Temperature\t\t'+температура+'°C')
|
|
89
|
+
break
|
|
90
|
+
case 'averaging_period':
|
|
91
|
+
// this.период_осреднения = o[k]
|
|
92
|
+
// logNl(' 💧 Влажность: '+o[k]+'%')
|
|
93
|
+
break
|
|
94
|
+
case 'relative_humidity_percent':
|
|
95
|
+
logNl('💧 Humidity\t\t'+o[k]+'%')
|
|
96
|
+
break
|
|
97
|
+
case 'horizontal_visibility_km':
|
|
98
|
+
logNl('👀 Visibility\t\t'+o[k]+'km')
|
|
99
|
+
break
|
|
100
|
+
case 'wind_speed_m_s':
|
|
101
|
+
// convert english into ru
|
|
102
|
+
logNl('🌬️ Wind speed\t\t'+o[k]+' m/s')
|
|
103
|
+
break
|
|
104
|
+
case 'wind_direction':
|
|
105
|
+
var windMap={
|
|
106
|
+
// N:'северный',
|
|
107
|
+
// NNE:'северо-северо-восточный',
|
|
108
|
+
// NE:'северо-восточный',
|
|
109
|
+
// ENE:'вост.-сев.-восточный',
|
|
110
|
+
// E:'восточный',
|
|
111
|
+
// ESE:'вост.-юго-восточный',
|
|
112
|
+
// SE:'юго-восточный',
|
|
113
|
+
// SSE:'юго-юго-восточный',
|
|
114
|
+
// S:'южный',
|
|
115
|
+
// SSW:'юго-юго-западный',
|
|
116
|
+
// SW:'юго-западный',
|
|
117
|
+
// WSW:'зап.-юго-западный',
|
|
118
|
+
// W:'западный',
|
|
119
|
+
// WNW:'зап.-сев.-западный',
|
|
120
|
+
// NW:'северо-западный',
|
|
121
|
+
// NNW:'сев.-сев.-западный'
|
|
122
|
+
}
|
|
123
|
+
// convert english into ru
|
|
124
|
+
// var V=o[k]
|
|
125
|
+
var V=o[k]
|
|
126
|
+
var ru=windMap[V]||V
|
|
127
|
+
logNl('🧭 Wind\t\t\t'+ru)
|
|
128
|
+
break
|
|
129
|
+
case 'observation_time':
|
|
130
|
+
let d_val=this.parseDate(o[k]) // store date on this
|
|
131
|
+
let val=this.printDate(d_val);
|
|
132
|
+
// logNl(prefix+(MOCKBA.emojiMap.get(k)||k)+'\t\t'+val)
|
|
133
|
+
logNl(prefix+(MOCKBA.emojiMap.get('observation_time')+' Date and time')+'\t'+val)
|
|
134
|
+
break
|
|
135
|
+
case 'max_temperature': // need to see when was min
|
|
136
|
+
// let d_val=this.parseDate(o[k]) // store date on this
|
|
137
|
+
var V=`${o[k]}`.padStart(5,' ')
|
|
138
|
+
log('├─ 🥵\t'+V+'°C')
|
|
139
|
+
break
|
|
140
|
+
case 'max_precipitation_mm':
|
|
141
|
+
var V=`+${o[k]}`.padStart(5,' ')
|
|
142
|
+
log('└─ 🌧️ \t'+V+'mm')
|
|
143
|
+
break
|
|
144
|
+
case 'min_temperature':
|
|
145
|
+
var V=`${o[k]}`.padStart(4,' ')
|
|
146
|
+
log('├─ ⛄️\t'+V+'°C')
|
|
147
|
+
break
|
|
148
|
+
case 'min_temp_year':
|
|
149
|
+
case 'max_temp_year':
|
|
150
|
+
case 'max_precip_year':
|
|
151
|
+
log(' in '+o[k])
|
|
152
|
+
let y_val=this.yearsAgo(o[k])
|
|
153
|
+
logNl(', '+y_val+' years ago')
|
|
154
|
+
break
|
|
155
|
+
default:
|
|
156
|
+
logNl(prefix+(MOCKBA.emojiMap.get(k)||k)+': '+o[k])
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
printRuObj(o,prefix){
|
|
64
163
|
// период_осреднения =
|
|
65
164
|
for(var k in o){
|
|
66
|
-
if(this.skip.includes(k)) {
|
|
165
|
+
if(this.skip&&this.skip.includes(k)) {
|
|
67
166
|
continue
|
|
68
167
|
}
|
|
69
168
|
var logNl=console.log
|
|
@@ -76,11 +175,11 @@ class MOCKBA extends Moskva {
|
|
|
76
175
|
switch(k){
|
|
77
176
|
case 'среднемесячные_показатели':
|
|
78
177
|
logNl('┬ 📊 Среднемесячные показатели с '+o[k].период_осреднения+':')
|
|
79
|
-
this.
|
|
178
|
+
this.printRuObj(o[k],prefix+' ')
|
|
80
179
|
break
|
|
81
180
|
default:
|
|
82
181
|
logNl(prefix+(MOCKBA.emojiMap.get(k)||k))
|
|
83
|
-
this.
|
|
182
|
+
this.printRuObj(o[k],prefix+' ')
|
|
84
183
|
}
|
|
85
184
|
// logNl(prefix+(MOCKBA.emojiMap.get(k)||k)+':')
|
|
86
185
|
}else{
|
|
@@ -178,6 +277,14 @@ class MOCKBA extends Moskva {
|
|
|
178
277
|
}
|
|
179
278
|
|
|
180
279
|
/** --- @arg {Date} _val */
|
|
280
|
+
printDate(_val){
|
|
281
|
+
var val=_val?_val.toLocaleString('en',{
|
|
282
|
+
year:'numeric',month:'short',day:'2-digit',hour:'numeric',
|
|
283
|
+
hour12:true,
|
|
284
|
+
}):_val
|
|
285
|
+
val=val.replace(',','')
|
|
286
|
+
return val
|
|
287
|
+
}
|
|
181
288
|
printDateRu(_val){
|
|
182
289
|
var val=_val?_val.toLocaleString('ru',{
|
|
183
290
|
year:'numeric',month:'short',day:'2-digit',hour:'2-digit',minute:'2-digit',
|
|
@@ -198,7 +305,11 @@ class MOCKBA extends Moskva {
|
|
|
198
305
|
super._log=true
|
|
199
306
|
}
|
|
200
307
|
if(!this.disableIndicator) {
|
|
201
|
-
|
|
308
|
+
if(this.translate=='ru') {
|
|
309
|
+
var t = await indicatrix('Загружаем данные по Москве',super.fetchMoscow())
|
|
310
|
+
}else {
|
|
311
|
+
var t = await indicatrix('Loading data for Moscow',super.fetchMoscow())
|
|
312
|
+
}
|
|
202
313
|
}else {
|
|
203
314
|
var t = await super.fetchMoscow()
|
|
204
315
|
}
|
|
@@ -293,7 +404,7 @@ class MOCKBA extends Moskva {
|
|
|
293
404
|
}
|
|
294
405
|
|
|
295
406
|
var monthly_averages = {
|
|
296
|
-
|
|
407
|
+
avg_temperature_C: parseFloat(matchSingle(/<td>Temperature<\/td><td[^>]*>([^&]+)/i, html)),
|
|
297
408
|
precipitation_mm: parseFloat(matchSingle(/<td>Amount of precipitation<\/td><td[^>]*>([^ ]+)/i, html)),
|
|
298
409
|
averaging_period: matchSingle(/The averaging period: ([^<]+)/i, html)
|
|
299
410
|
}
|
|
@@ -332,7 +443,7 @@ class MOCKBA extends Moskva {
|
|
|
332
443
|
max_precip_year:'год_макс_осадков'
|
|
333
444
|
},
|
|
334
445
|
monthly_averages:{
|
|
335
|
-
|
|
446
|
+
avg_temperature_C:'средняя_температура_°C',
|
|
336
447
|
precipitation_mm:'осадки_мм',
|
|
337
448
|
averaging_period:'период_осреднения'
|
|
338
449
|
}
|