mockba 0.2.2 → 0.3.0
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/changes.md +8 -0
- package/index.js +180 -98
- package/package.json +3 -2
package/changes.md
ADDED
package/index.js
CHANGED
|
@@ -1,65 +1,185 @@
|
|
|
1
|
-
// var Moskva = require('moskva')
|
|
2
1
|
var Moskva=require('moskva')
|
|
2
|
+
var indicatrix=require('indicatrix')
|
|
3
3
|
var{error,log}=console
|
|
4
4
|
|
|
5
5
|
class MOCKBA extends Moskva {
|
|
6
6
|
/** @type {'ru'} */
|
|
7
7
|
translate = ''
|
|
8
|
+
/** Do not print interacitve indicator of data loading */
|
|
9
|
+
disableIndicator = false
|
|
8
10
|
/** @type {boolean} */
|
|
9
11
|
logFetch = false
|
|
10
12
|
printRu = false
|
|
11
|
-
|
|
12
13
|
skip=[]
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
период_осреднения=null
|
|
15
|
+
static get emojiMap() {
|
|
16
|
+
return new Map(Object.entries({ // does not have default?
|
|
16
17
|
'страна':'🌍 Страна',
|
|
17
18
|
'регион':'📍 Регион',
|
|
18
19
|
'местоположение':'📌 Местоположение',
|
|
19
|
-
'время_наблюдения':'⏰
|
|
20
|
+
'время_наблюдения':'⏰ Дата и время', // units map also?
|
|
20
21
|
'атмосферное_давление_мм_рт_ст':'🌡️ Атм. давление (мм рт.ст.)',
|
|
21
22
|
'температура_°C':'🌡️ Температура (°C)',
|
|
22
23
|
'относительная_влажность_процент':'💧 Влажность (%)',
|
|
23
24
|
'направление_ветра':'🧭 Направление ветра',
|
|
24
25
|
'средняя_скорость_ветра_м_с':'🌬️ Скорость ветра (м/с)',
|
|
25
26
|
'горизонтальная_видимость_км':'👀 Видимость (км)',
|
|
26
|
-
'долгосрочные_наблюдения':'
|
|
27
|
-
'мин_температура_°C':'
|
|
28
|
-
'год_мин_температуры':'
|
|
29
|
-
'макс_температура_°C':'
|
|
30
|
-
'год_макс_температуры':'
|
|
31
|
-
'макс_осадки_мм':'🌧️ Макс. осадки
|
|
32
|
-
'год_макс_осадков':'
|
|
33
|
-
'среднемесячные_показатели
|
|
27
|
+
'долгосрочные_наблюдения':'┬ 📈 Долгосрочные наблюдения',
|
|
28
|
+
'мин_температура_°C':'⛄️ Мин. температура (°C)',
|
|
29
|
+
'год_мин_температуры':'☃️ Год мин. температуры',
|
|
30
|
+
'макс_температура_°C':'🥵 Макс. температура (°C)',
|
|
31
|
+
'год_макс_температуры':'🔥 Год макс. температуры',
|
|
32
|
+
'макс_осадки_мм':' 🌧️ Макс. осадки',
|
|
33
|
+
'год_макс_осадков':'🌊 Год макс. осадков',
|
|
34
|
+
'среднемесячные_показатели':'📊 Среднемесячные показатели (январь)',
|
|
34
35
|
'средняя_температура_°C':'🌡️ Средняя температура (°C)',
|
|
35
36
|
'осадки_мм':'🌧️ Осадки (мм)',
|
|
36
|
-
'период_осреднения':'
|
|
37
|
-
|
|
37
|
+
'период_осреднения':'📊 Период осреднения'
|
|
38
|
+
}))
|
|
39
|
+
}
|
|
40
|
+
// skip=['страна','регион','местоположение']
|
|
41
|
+
printRuWeather(obj){
|
|
42
|
+
this.printObj(obj,'')
|
|
43
|
+
}
|
|
44
|
+
tempEmoji(t){
|
|
45
|
+
if(t<=-20) return '🥶'
|
|
46
|
+
if(t<=-10) return '🧊'
|
|
47
|
+
if(t<=0) return '😨'
|
|
48
|
+
if(t<=5) return '🧥'
|
|
49
|
+
if(t<=10) return '🌫️'
|
|
50
|
+
if(t<=15) return '🌥️'
|
|
51
|
+
if(t<=18) return '🌤️'
|
|
52
|
+
if(t<=22) return '🙂'
|
|
53
|
+
if(t<=25) return '😎'
|
|
54
|
+
if(t<=28) return '😅'
|
|
55
|
+
if(t<=32) return '🔥'
|
|
56
|
+
return '🥵'
|
|
57
|
+
}
|
|
38
58
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
printObj(o,prefix){
|
|
60
|
+
// период_осреднения =
|
|
61
|
+
for(var k in o){
|
|
62
|
+
if(this.skip.includes(k)) {
|
|
63
|
+
continue
|
|
64
|
+
}
|
|
65
|
+
var logNl=console.log
|
|
66
|
+
var log=data=>{
|
|
67
|
+
process.stdout.write(data)
|
|
68
|
+
}
|
|
69
|
+
// var log1=process.stdout.write;
|
|
70
|
+
if(typeof o[k]=='object'&&o[k]!=null){
|
|
71
|
+
// console.log(321,k)
|
|
72
|
+
switch(k){
|
|
73
|
+
case 'среднемесячные_показатели':
|
|
74
|
+
logNl('┬ 📊 Среднемесячные показатели с '+o[k].период_осреднения+':')
|
|
75
|
+
this.printObj(o[k],prefix+' ')
|
|
76
|
+
break
|
|
77
|
+
default:
|
|
78
|
+
logNl(prefix+(MOCKBA.emojiMap.get(k)||k))
|
|
79
|
+
this.printObj(o[k],prefix+' ')
|
|
80
|
+
}
|
|
81
|
+
// logNl(prefix+(MOCKBA.emojiMap.get(k)||k)+':')
|
|
82
|
+
}else{
|
|
83
|
+
// console.log(123,k)
|
|
84
|
+
switch(k){
|
|
85
|
+
case 'средняя_температура_°C':
|
|
86
|
+
var v=o[k]
|
|
87
|
+
logNl('├─🌡️ \tТемпература\t'+v+'°C')
|
|
88
|
+
break
|
|
89
|
+
case 'осадки_мм':
|
|
90
|
+
logNl('└─ 🌧️ \tОсадки\t\t'+o[k]+'мм')
|
|
91
|
+
break
|
|
92
|
+
case 'атмосферное_давление_мм_рт_ст':
|
|
93
|
+
// logNl('🌡️ Атм. давление\t\t'+o[k]+' мм рт.ст.')
|
|
94
|
+
logNl('⬇️ Атм. давление\t'+o[k]+' мм рт.ст.')
|
|
95
|
+
break
|
|
96
|
+
case 'температура_°C':
|
|
97
|
+
var температура=parseFloat(o[k])
|
|
98
|
+
logNl(this.tempEmoji(температура)+' Температура\t\t'+температура+'°C')
|
|
99
|
+
break
|
|
100
|
+
case 'период_осреднения':
|
|
101
|
+
// this.период_осреднения = o[k]
|
|
102
|
+
// logNl(' 💧 Влажность: '+o[k]+'%')
|
|
103
|
+
break
|
|
104
|
+
case 'относительная_влажность_процент':
|
|
105
|
+
logNl('💧 Влажность\t\t'+o[k]+'%')
|
|
106
|
+
break
|
|
107
|
+
case 'горизонтальная_видимость_км':
|
|
108
|
+
logNl('👀 Видимость\t\t'+o[k]+'км')
|
|
109
|
+
break
|
|
110
|
+
case 'средняя_скорость_ветра_м_с':
|
|
111
|
+
// convert english into ru
|
|
112
|
+
logNl('🌬️ Скорость ветра\t'+o[k]+' м/с')
|
|
113
|
+
break
|
|
114
|
+
case 'направление_ветра':
|
|
115
|
+
var windMap={
|
|
116
|
+
N:'северный',
|
|
117
|
+
NNE:'северо-северо-восточный',
|
|
118
|
+
NE:'северо-восточный',
|
|
119
|
+
ENE:'вост.-сев.-восточный',
|
|
120
|
+
E:'восточный',
|
|
121
|
+
ESE:'вост.-юго-восточный',
|
|
122
|
+
SE:'юго-восточный',
|
|
123
|
+
SSE:'юго-юго-восточный',
|
|
124
|
+
S:'южный',
|
|
125
|
+
SSW:'юго-юго-западный',
|
|
126
|
+
SW:'юго-западный',
|
|
127
|
+
WSW:'зап.-юго-западный',
|
|
128
|
+
W:'западный',
|
|
129
|
+
WNW:'зап.-сев.-западный',
|
|
130
|
+
NW:'северо-западный',
|
|
131
|
+
NNW:'сев.-сев.-западный'
|
|
132
|
+
}
|
|
133
|
+
// convert english into ru
|
|
134
|
+
// var V=o[k]
|
|
135
|
+
var V=o[k]
|
|
136
|
+
var ru=windMap[V]||V
|
|
137
|
+
logNl('🧭 Ветер\t\t'+ru)
|
|
138
|
+
break
|
|
139
|
+
case 'время_наблюдения':
|
|
140
|
+
let d_val=this.parseDate(o[k]) // store date on this
|
|
141
|
+
let val=this.printDateRu(d_val);
|
|
142
|
+
logNl(prefix+(MOCKBA.emojiMap.get(k)||k)+'\t\t'+val)
|
|
143
|
+
break
|
|
144
|
+
case 'макс_температура_°C': // need to see when was min
|
|
145
|
+
// let d_val=this.parseDate(o[k]) // store date on this
|
|
146
|
+
var V=`${o[k]}`.padStart(5,' ')
|
|
147
|
+
log('├─ 🥵\t'+V+'°C')
|
|
148
|
+
break
|
|
149
|
+
case 'макс_осадки_мм':
|
|
150
|
+
var V=`+${o[k]}`.padStart(5,' ')
|
|
151
|
+
log('└─ 🌧️ \t'+V+'мм')
|
|
152
|
+
break
|
|
153
|
+
case 'мин_температура_°C':
|
|
154
|
+
var V=`${o[k]}`.padStart(4,' ')
|
|
155
|
+
log('├─ ⛄️\t'+V+'°C')
|
|
156
|
+
break
|
|
157
|
+
case 'год_мин_температуры':
|
|
158
|
+
case 'год_макс_температуры':
|
|
159
|
+
case 'год_макс_осадков':
|
|
160
|
+
log(' в '+o[k])
|
|
161
|
+
let y_val=this.yearsAgo(o[k])
|
|
162
|
+
logNl(', '+y_val+' лет назад')
|
|
163
|
+
break
|
|
164
|
+
default:
|
|
165
|
+
logNl(prefix+(MOCKBA.emojiMap.get(k)||k)+': '+o[k])
|
|
54
166
|
}
|
|
55
167
|
}
|
|
56
168
|
}
|
|
57
|
-
|
|
58
|
-
printObj(obj,'')
|
|
59
169
|
}
|
|
170
|
+
yearsAgo(year){
|
|
171
|
+
if(!year) return null
|
|
172
|
+
var now=new Date().getFullYear()
|
|
173
|
+
return now-parseInt(year)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** --- @arg {Date} _val */
|
|
60
177
|
printDateRu(_val){
|
|
61
|
-
var val=_val?_val.toLocaleString('ru',{
|
|
62
|
-
|
|
178
|
+
var val=_val?_val.toLocaleString('ru',{
|
|
179
|
+
year:'numeric',month:'short',day:'2-digit',hour:'2-digit',minute:'2-digit',
|
|
180
|
+
hour12:false,
|
|
181
|
+
}):_val
|
|
182
|
+
val=val.replace(',','')
|
|
63
183
|
return val
|
|
64
184
|
}
|
|
65
185
|
|
|
@@ -73,7 +193,11 @@ class MOCKBA extends Moskva {
|
|
|
73
193
|
if(this.logFetch) {
|
|
74
194
|
super._log=true
|
|
75
195
|
}
|
|
76
|
-
|
|
196
|
+
if(!this.disableIndicator) {
|
|
197
|
+
var t = await indicatrix('Загружаем данные по Москве',super.fetchMoscow())
|
|
198
|
+
}else {
|
|
199
|
+
var t = await super.fetchMoscow()
|
|
200
|
+
}
|
|
77
201
|
}finally {
|
|
78
202
|
super._log = false
|
|
79
203
|
}
|
|
@@ -144,8 +268,8 @@ class MOCKBA extends Moskva {
|
|
|
144
268
|
}
|
|
145
269
|
|
|
146
270
|
var monthly_averages = {
|
|
147
|
-
temperature_C: parseFloat(matchSingle(
|
|
148
|
-
precipitation_mm: parseFloat(matchSingle(
|
|
271
|
+
temperature_C: parseFloat(matchSingle(/<td>Temperature<\/td><td[^>]*>([^&]+)/i, html)),
|
|
272
|
+
precipitation_mm: parseFloat(matchSingle(/<td>Amount of precipitation<\/td><td[^>]*>([^ ]+)/i, html)),
|
|
149
273
|
averaging_period: matchSingle(/The averaging period: ([^<]+)/i, html)
|
|
150
274
|
}
|
|
151
275
|
|
|
@@ -156,8 +280,6 @@ class MOCKBA extends Moskva {
|
|
|
156
280
|
long_term_obs, monthly_averages
|
|
157
281
|
}
|
|
158
282
|
return result
|
|
159
|
-
// console.log(JSON.stringify(data, null, 2))
|
|
160
|
-
|
|
161
283
|
}
|
|
162
284
|
convertToRussianFull(eng){
|
|
163
285
|
var dict={
|
|
@@ -172,7 +294,7 @@ class MOCKBA extends Moskva {
|
|
|
172
294
|
wind_speed_m_s:'средняя_скорость_ветра_м_с',
|
|
173
295
|
horizontal_visibility_km:'горизонтальная_видимость_км',
|
|
174
296
|
long_term_obs:'долгосрочные_наблюдения',
|
|
175
|
-
monthly_averages:'среднемесячные_показатели
|
|
297
|
+
monthly_averages:'среднемесячные_показатели'
|
|
176
298
|
}
|
|
177
299
|
|
|
178
300
|
var innerDicts={
|
|
@@ -191,67 +313,30 @@ class MOCKBA extends Moskva {
|
|
|
191
313
|
}
|
|
192
314
|
}
|
|
193
315
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
out[d[key]]=obj[key]
|
|
316
|
+
|
|
317
|
+
return this.$translate(eng,dict,innerDicts)
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
$translate(obj,d,innerDicts){
|
|
321
|
+
var out={}
|
|
322
|
+
for(var key in d){
|
|
323
|
+
if(obj[key]!=null){
|
|
324
|
+
if(typeof obj[key]=='object'&&!Array.isArray(obj[key])&&innerDicts[key]!=null){
|
|
325
|
+
out[d[key]]={}
|
|
326
|
+
for(var sub in obj[key]){
|
|
327
|
+
if(innerDicts[key][sub]!=null) out[d[key]][innerDicts[key][sub]]=obj[key][sub]
|
|
328
|
+
else out[d[key]][sub]=obj[key][sub]
|
|
206
329
|
}
|
|
330
|
+
}else{
|
|
331
|
+
out[d[key]]=obj[key]
|
|
207
332
|
}
|
|
208
333
|
}
|
|
209
|
-
return out
|
|
210
334
|
}
|
|
211
|
-
|
|
212
|
-
return translate(eng,dict)
|
|
335
|
+
return out
|
|
213
336
|
}
|
|
214
|
-
// convertToRu(eng) {
|
|
215
|
-
// var dict = {
|
|
216
|
-
// country: 'страна',
|
|
217
|
-
// region: 'регион',
|
|
218
|
-
// location: 'местоположение',
|
|
219
|
-
// observation_time: 'время_наблюдения',
|
|
220
|
-
// atmospheric_pressure_mm: 'атмосферное_давление_мм_рт_ст',
|
|
221
|
-
// temperature_C: 'температура_°C',
|
|
222
|
-
// relative_humidity_percent: 'относительная_влажность_процент',
|
|
223
|
-
// wind_direction: 'направление_ветра',
|
|
224
|
-
// wind_speed_m_s: 'средняя_скорость_ветра_м_с',
|
|
225
|
-
// horizontal_visibility_km: 'горизонтальная_видимость_км',
|
|
226
|
-
// long_term_obs: 'долгосрочные_наблюдения',
|
|
227
|
-
// monthly_averages: 'среднемесячные_показатели_январь'
|
|
228
|
-
// }
|
|
229
|
-
|
|
230
|
-
// var ru = {}
|
|
231
|
-
// for (var key in dict) {
|
|
232
|
-
// if (eng[key] != null) {
|
|
233
|
-
// if (typeof eng[key] == 'object' && !Array.isArray(eng[key])) {
|
|
234
|
-
// ru[dict[key]] = {}
|
|
235
|
-
// for (var sub in eng[key]) {
|
|
236
|
-
// ru[dict[key]][sub] = eng[key][sub]
|
|
237
|
-
// }
|
|
238
|
-
// } else {
|
|
239
|
-
// ru[dict[key]] = eng[key]
|
|
240
|
-
// }
|
|
241
|
-
// }
|
|
242
|
-
// }
|
|
243
|
-
// return ru
|
|
244
|
-
// }
|
|
245
|
-
// #convertToRu(engWeather) {
|
|
246
|
-
// // пример использования
|
|
247
|
-
// var ruWeather = this.convertToRussianAuto(engWeather)
|
|
248
|
-
// return ruWeather
|
|
249
|
-
// }
|
|
250
|
-
// перевод(engWeather){
|
|
251
|
-
// return this.#convertToRu(engWeather)
|
|
252
|
-
// }
|
|
253
337
|
}
|
|
254
338
|
|
|
339
|
+
|
|
255
340
|
module.exports = MOCKBA
|
|
256
341
|
|
|
257
342
|
Object.defineProperties(module.exports,{
|
|
@@ -264,6 +349,3 @@ Object.defineProperties(module.exports,{
|
|
|
264
349
|
}
|
|
265
350
|
}
|
|
266
351
|
})
|
|
267
|
-
|
|
268
|
-
// // i thought the proxy was smarter?
|
|
269
|
-
// москва()
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mockba",
|
|
3
3
|
"homepage": "https://рантайм.москва",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"license": "CC-BY-ND-4.0",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"
|
|
7
|
+
"indicatrix": "^1.4.1",
|
|
8
|
+
"moskva": "^0.1.4"
|
|
8
9
|
},
|
|
9
10
|
"bin": {
|
|
10
11
|
"MOCKBA": "MOCKBA"
|