mockba 0.3.2 → 0.3.4
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 +3 -0
- package/changes.md +5 -1
- package/index.js +137 -26
- package/package.json +1 -1
- package/readme.md +56 -4
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,6 +45,121 @@ 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
165
|
if(this.skip&&this.skip.includes(k)) {
|
|
@@ -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
|
}
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -4,12 +4,40 @@
|
|
|
4
4
|
<img src="https://рантайм.москва/img/MOCKBA-npm.jpg">
|
|
5
5
|
</a>
|
|
6
6
|
|
|
7
|
+
Aims to provide access to Moscow services via unified city runtime
|
|
8
|
+
https://рантайм.москва.
|
|
9
|
+
|
|
7
10
|
```sh
|
|
8
11
|
yarn add mockba
|
|
9
|
-
yarn MOCKBA # use
|
|
12
|
+
yarn MOCKBA # use global binary
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Capabilities
|
|
16
|
+
|
|
17
|
+
### Weather
|
|
18
|
+
|
|
19
|
+
Currently displays data from Hydrometcenter for Moscow.
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
⏰ Date and time Jan 30 2026, 9 PM
|
|
23
|
+
⬇️ Atm. pressure 752 mm
|
|
24
|
+
🧊 Temperature -15.9°C
|
|
25
|
+
💧 Humidity 75%
|
|
26
|
+
🧭 Wind N
|
|
27
|
+
🌬️ Wind speed 1 m/s
|
|
28
|
+
👀 Visibility 20km
|
|
29
|
+
┬ 📈 Long term observations:
|
|
30
|
+
├─ ⛄️ -35.7°C in 1956, 70 years ago
|
|
31
|
+
├─ 🥵 3°C in 2016, 10 years ago
|
|
32
|
+
└─ 🌧️ 10mm in 1983, 43 years ago
|
|
33
|
+
┬ 📊 Monthly averages since 1981-2010:
|
|
34
|
+
├─🌡️ Temperature -6.5°C
|
|
35
|
+
└─ 🌧️ Precipitation 52mm
|
|
10
36
|
```
|
|
11
37
|
|
|
12
|
-
|
|
38
|
+
<!-- http://wis2box.mecom.ru/oapi?f=json -->
|
|
39
|
+
|
|
40
|
+
### API
|
|
13
41
|
|
|
14
42
|
The package can be imported directly and run with configuration:
|
|
15
43
|
|
|
@@ -32,7 +60,7 @@ equivalent to invoking the API example above.
|
|
|
32
60
|
|
|
33
61
|
```sh
|
|
34
62
|
⏰ Дата и время 30 янв. 2026 г. 21:00
|
|
35
|
-
⬇️
|
|
63
|
+
⬇️ Атм. давление 752 мм рт.ст.
|
|
36
64
|
🧊 Температура -15.8°C
|
|
37
65
|
💧 Влажность 76.4%
|
|
38
66
|
🧭 Ветер северный
|
|
@@ -41,13 +69,22 @@ equivalent to invoking the API example above.
|
|
|
41
69
|
┬ 📈 Долгосрочные наблюдения
|
|
42
70
|
├─ ⛄️ -35.7°C в 1956, 70 лет назад
|
|
43
71
|
├─ 🥵 3°C в 2016, 10 лет назад
|
|
44
|
-
└─ 🌧️
|
|
72
|
+
└─ 🌧️ 10мм в 1983, 43 лет назад
|
|
45
73
|
┬ 📊 Среднемесячные показатели с 1981-2010:
|
|
46
74
|
├─🌡️ Температура -6.5°C
|
|
47
75
|
└─ 🌧️ Осадки 52мм
|
|
48
76
|
```
|
|
49
77
|
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
The package can work in either json/js mode or in human-readable mode (default).
|
|
81
|
+
To support printing in a translation, pass target language like `-ru`.
|
|
82
|
+
|
|
83
|
+
<details>
|
|
84
|
+
<summary>
|
|
85
|
+
|
|
50
86
|
### MOCKBA -json
|
|
87
|
+
</summary>
|
|
51
88
|
|
|
52
89
|
```json
|
|
53
90
|
{
|
|
@@ -76,8 +113,13 @@ equivalent to invoking the API example above.
|
|
|
76
113
|
}
|
|
77
114
|
}
|
|
78
115
|
```
|
|
116
|
+
</details>
|
|
117
|
+
|
|
118
|
+
<details>
|
|
119
|
+
<summary>
|
|
79
120
|
|
|
80
121
|
### MOCKBA -json -ru
|
|
122
|
+
</summary>
|
|
81
123
|
|
|
82
124
|
```json
|
|
83
125
|
{
|
|
@@ -106,8 +148,13 @@ equivalent to invoking the API example above.
|
|
|
106
148
|
}
|
|
107
149
|
}
|
|
108
150
|
```
|
|
151
|
+
</details>
|
|
152
|
+
|
|
153
|
+
<details>
|
|
154
|
+
<summary>
|
|
109
155
|
|
|
110
156
|
### MOCKBA -js
|
|
157
|
+
</summary>
|
|
111
158
|
|
|
112
159
|
```js
|
|
113
160
|
{
|
|
@@ -136,8 +183,12 @@ equivalent to invoking the API example above.
|
|
|
136
183
|
}
|
|
137
184
|
}
|
|
138
185
|
```
|
|
186
|
+
</details>
|
|
187
|
+
<details>
|
|
188
|
+
<summary>
|
|
139
189
|
|
|
140
190
|
### MOCKBA -js -ru
|
|
191
|
+
</summary>
|
|
141
192
|
|
|
142
193
|
```js
|
|
143
194
|
{
|
|
@@ -166,5 +217,6 @@ equivalent to invoking the API example above.
|
|
|
166
217
|
}
|
|
167
218
|
}
|
|
168
219
|
```
|
|
220
|
+
</details>
|
|
169
221
|
|
|
170
222
|
<!-- https://xn--80aa1amcqq.xn--80adxhks/img/MOCKBA-npm.jpg -->
|