~strahinja/strahinja.srht.site

ref: a1bdc8f28beb6be015c9d41f1d86de79597f0a5c strahinja.srht.site/blog/2021-04/20210422.gmi -rw-r--r-- 4.5 KiB
a1bdc8f2Страхиња Радић Added .q/.a > ul formatting 9 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# „Уради сам“ обавештења

Пре пар дана ме је изненадио нестанак воде. Увидом у страницу са објавама планираних радова, видео сам да је искључење планирано, и да би требало да траје од 02:00-22:00. Проблем је у томе што не пратим вести, а „developer“-и који одржавају сајт БВК нису на видно место поставили везу ка RSS току (што је логично и ефикасно решење за праћење новости), па чак ни најобичније обавештавање преко мејла. На срећу, ја користим ГНУ са Линуксом, а ово је одлична прилика за демонстрацију тога шта се може постићи његовим програмима који користе командну линију.

=> https://www.bvk.rs/planirani-radovi/	страницу

Главна идеја је да користимо curl(1) да преузмемо страницу БВК-а:

=> https://curl.se	curl

```
$ curl -s https://www.bvk.rs/planirani-radovi/ > radovi.html
```

Затим употребимо grep(1) да бисмо издвојили само оне делове странице који нас интересују:

=> https://www.gnu.org/software/grep	grep

```
$ grep Раковица radovi.html > rakovica.html
```

И на крају скинемо све HTML ознаке и избацимо сувишне размаке, а <p> претворимо у нове пасусе:

```
$ sed -e's/<p>/\n\n/g' < rakovica.html | 
	 sed -e's/<[^>]\+>//g' -e's/\s\+/ /g' -e's/^\s\+//g' > rakovica.txt
```

Све ове наредбе можемо да искомбинујемо у једну:

```
$ curl -s https://www.bvk.rs/planirani-radovi/ | grep Раковица | 
	sed -e's/<p>/\n\n/g' | sed -e's/<[^>]+>//g' -e's/\s\+/ /g' 
		-e's/^\s\+//g' > rakovica.txt
```

Овим смо сачували податак о новом искључењу, који можемо сачувати за каснију проверу. Следећи пут када проверавамо страницу, само преконтролишемо да ли се нови ред појавио у листи већ виђених, и ако није, додајемо га и обавештавамо корисника:

```
$ if grep -v -f sacuvano.txt rakovica.txt; then 
	cat rakovica.txt >> sacuvano.txt; fi
```

Како можемо обавестити корисника? Постоји више начина, али онај који се мени учинио најкориснијим јесте аутоматско слање мејла. Ово се може постићи, рецимо, програмом neomutt(1):

=> https://neomutt.org	neomutt

```
$ neomutt -s "БВК: Нови радови" pera@peric.com < rakovica.txt
```

Ово је, у суштини, основа мог скрипта pagecheck. Он се позива, рецимо, на следећи начин:

=> https://git.sr.ht/~strahinja/dotfiles/tree/master/item/bin/pagecheck	pagecheck

```
$ pagecheck Раковица https://www.bvk.rs/planirani-radovi/ pera@peric.com
```

Ако је било новости, pagecheck ће их исписати на стандардном излазу, што је и подразумевано ако не задамо ниједан параметар. Новости можемо да „seen-ујемо“ позивом уз параметар -s:

```
$ pagecheck -s
```

Ипак, најкорисније је да pagecheck позивамо програмом cron(8). Рецимо:

=> https://en.wikipedia.org/wiki/Cron	cron

```
$ crontab -e
```

и унесемо следећи ред у crontab:

```
0 */5 * * *	pagecheck Раковица https://www.bvk.rs/planirani-radovi/ pera@peric.com
```

Тако ће се на сваких 5 сати у позадини извршити програм pagecheck, и ако је дошло до промена на страници које укључују тражени израз, биће послато обавештење. Наравно, у овом случају се подразумева да је рачунар континуирано покренут сваки дан тако да обухвати макар један такав интервал.