Ne_znay_ka
скачал Linux. Подскажите какая программа для сравнения кодов.
Тут же написано. Программа diff. А в Linux нет расширений .exe у программ. Все программы лежат там в директории /usr/bin и других подобных директориях (/bin, /sbin, /usr/sbin, /usr/local/bin). Но можно и свою директорию подключить со своими программами и скриптами.
Программой ls можно просмотреть директорию.
Вот у меня скрипты лежат в своей скриптовой директории ~/.env/scripts
Я её сам сделал, чтобы бэкапить свои скрипты быстро, чтобы не искать их по всем директориям.
[guest@localhost ~]$ ls ~/.env/scripts/
mplt.sh pl_build_install.sh pl_build_test.sh pl_test.sh rusmail-bandana.sh
mp.py pl_build_reinstall.sh pl_general.sh pl_uninstall.sh rusmail-x.sh
mulptch.sh pl_build.sh pl_install.sh pml_load.sh
[guest@localhost ~]$
Вот там скрипт для слежения за посылкой почтовой rusmail-x.sh
Я его сделал наскоряк (у него даже репозитория нет и версии), чтобы он ходил и проверял посылку. Заказал посылку, она идёт по городам, но лежит там по несколько суток. Если город сменился там на странице, скрипт создаёт файл на рабочем столе мне. Я в этот файл заглядываю и вижу три последние точки, которые посылка прошла. Так я в курсе событий и мне не надо ничего проверять ходить.
[guest@localhost ~]$ cat ~/.env/scripts/rusmail-x.sh
#!/bin/bash
check_track_number()
{
local barcode="x"
local fname_config="/usr/local/etc/rusmail-x.conf"
local fname_report="$HOME/Desktop/rusmail-x"
local oldhash newhash
local text
oldhash=`cat "$fname_config"`
text=`rusmail.sh check "$barcode"`
[ $? -eq 0 ] || return 1
newhash=`echo "$text" | md5sum | awk '{print $1}'`
[ "$oldhash" != "$newhash" ] && {
echo "$text" | head -3 > "$fname_report"
echo "$newhash" > "$fname_config"
}
return 0
}
main()
{
check_track_number || return 1
echo "Ok"
return 0
}
main "$@" || exit 1
exit 0
[guest@localhost ~]$
Так вот этот скрипт просто работает с рабочим столом только. Но проверку он выполняет с помощью программы, которая помассивнее немного. Программа rusmail.sh .
Мы запускаем программу which, чтобы узнать, где лежит моя программа rusmail.sh
[guest@localhost ~]$ which rusmail.sh
/usr/local/bin/rusmail.sh
[guest@localhost ~]$
Видим, что она лежит в директории /usr/local/bin
Читаем её
[guest@localhost ~]$ cat /usr/local/bin/rusmail.sh
#!/bin/bash
# rusmail v0.0.1
# Checks tracking information for barcode on https://pochta.ru
# Copyright (C) 2022 py.user.next mail@mail
progname=`basename $0`
# Print an error message to stderr
# error(str)
error()
{
echo "error: $progname: $1" >&2
}
# Print an message to stdout
# msg(str)
msg()
{
echo "$progname: $1"
}
# Print program usage to stderr
# usage()
usage()
{
echo "usage: $progname check barcode " >&2
}
check()
{
local barcode="$1"
local data
data=`load_data "$barcode"`
[ $? -eq 0 ] || return 1
echo "$data" | filter_data
[ $? -eq 0 ] || return 1
return 0
}
load_data()
{
local barcode="$1"
local url="https://www.pochta.ru/tracking?p_p_id=trackingPortlet_WAR_portalportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=tracking.get-by-barcodes&p_p_cacheability=cacheLevelPage&p_p_col_id=column-1&p_p_col_count=1"
curl -s -X POST --data "barcodes=$barcode" "$url" || return 1
return 0
}
filter_data()
{
python3 -c '
import sys
import json
import re
def format_date(text):
pat = r"^(.{4})-(.{2})-(.{2})T(.{2}):(.{2}):(.{2}).{4}(.{6})$"
parts = re.search(pat, text).groups()
parts_sorted = (parts[2], format_month(parts[1]),
parts[0], parts[3], parts[4], parts[6])
out = "{} {} {} {}:{} {}".format(*parts_sorted)
return out
def format_month(text):
dct = {
"01": "Янв",
"02": "Фев",
"03": "Мар",
"04": "Апр",
"05": "Мая",
"06": "Июн",
"07": "Июл",
"08": "Авг",
"09": "Сен",
"10": "Окт",
"11": "Ноя",
"12": "Дек"
}
out = dct[text]
return out
def format_city(text):
if text is not None:
out = text
else:
out = "Неопр"
return out
def main():
doc = json.loads(sys.stdin.read())
track_lst = doc["response"][0]["trackingItem"]["trackingHistoryItemList"]
track_res = []
for point in track_lst:
date = format_date(point["date"])
index = point["index"]
city = format_city(point["cityName"])
status = point["humanStatus"]
trackresfmt = "{} [{} {:20}] {}"
track_res.append(trackresfmt.format(date, index, city, status))
out = "\n".join(track_res)
print(out)
try:
main()
except KeyError as exc:
print("error: " + str(exc))
sys.exit(1)
' || return 1
return 0
}
main()
{
case $# in
0|1) usage; return 1;;
2)
if [ "$1" = "check" ]; then
check "$2" || return 1
else
error "invalid command: $1"
return 1
fi
;;
*) error "unknown arglist: \"$*\""; return 1;;
esac
}
main "$@" || exit 1
exit 0
[guest@localhost ~]$
Тут уже строк побольше и даже версия есть. Эту я целых три часа писал, наверное. Она и делает всю основную работу по добыванию содержимого со страницы Почты России. Там есть API ещё у почтового сайта, но API мне не нужен. Настоящее мастерство - это работа без API (замещение живого человека).
Так вот в этой программе скрипт написан на Shell (встроенный язык в командную оболочку Linux, которому тоже уже несколько десятков лет). А в скрипте на Shell внутри вставлен скрипт на Python без какого либо файла. Это как по принципу, когда в программу на языке C вставляются вставки на языке Assembler.
Вот так она работает (штрихкод какой-то нашёл на Яндекс-картинках)
[guest@localhost ~]$ rusmail.sh
usage: rusmail.sh check barcode
[guest@localhost ~]$
[guest@localhost ~]$ rusmail.sh check 11172005104871
09 Янв 2017 11:03 +03:00 [105005 Москва ] Получено отправителем
05 Янв 2017 08:10 +03:00 [105005 Москва ] Прибыло в место вручения
03 Янв 2017 01:16 +03:00 [111981 Москва ] Покинуло сортировочный центр
01 Янв 2017 22:20 +03:00 [140980 Львовский ] Покинуло сортировочный центр
01 Янв 2017 16:37 +03:00 [140983 Львовский ] Сортировка
30 Дек 2016 09:42 +04:00 [443960 Самара ] Покинуло сортировочный центр
28 Дек 2016 10:23 +04:00 [443028 Мехзавод ] Выслано обратно отправителю
30 Ноя 2016 09:47 +04:00 [443028 Мехзавод ] Неудачная попытка вручения
28 Ноя 2016 13:29 +04:00 [443028 Мехзавод ] Прибыло в место вручения
28 Ноя 2016 06:08 +04:00 [443960 Самара ] Покинуло сортировочный центр
27 Ноя 2016 10:38 +04:00 [443960 Самара ] Прибыло в сортировочный центр
26 Ноя 2016 07:50 +03:00 [140980 Львовский ] Покинуло сортировочный центр
25 Ноя 2016 19:17 +03:00 [140983 Львовский ] Сортировка
23 Ноя 2016 20:04 +03:00 [111537 Москва ] Покинуло место приема
23 Ноя 2016 14:51 +03:00 [111726 Неопр ] Принято в отделении связи
[guest@localhost ~]$
Ещё пример (штрихкод какой-то нашёл на Яндекс-картинках)
[guest@localhost ~]$ rusmail.sh check 39790202014043
08 Янв 2019 15:58 +10:00 [690089 Владивосток ] Получено адресатом
03 Янв 2019 18:27 +10:00 [690089 Владивосток ] Прибыло в место вручения
03 Янв 2019 08:16 +10:00 [690960 Владивосток ] Покинуло сортировочный центр
01 Янв 2019 15:08 +10:00 [690960 Владивосток ] Сортировка
01 Янв 2019 13:58 +10:00 [690960 Владивосток ] Прибыло в сортировочный центр
22 Дек 2018 23:10 +03:00 [102000 Москва ] Покинуло сортировочный центр
22 Дек 2018 22:05 +03:00 [102004 Москва ] Сортировка
22 Дек 2018 17:52 +03:00 [102000 Москва ] Прибыло в сортировочный центр
22 Дек 2018 14:20 +03:00 [102150 Москва ] Покинуло сортировочный центр
22 Дек 2018 05:40 +03:00 [102152 Москва ] Сортировка
22 Дек 2018 05:40 +03:00 [102150 Москва ] Прибыло в сортировочный центр
21 Дек 2018 14:36 +03:00 [394960 Воронеж ] Покинуло сортировочный центр
20 Дек 2018 10:47 +03:00 [394963 Воронеж ] Сортировка
20 Дек 2018 10:47 +03:00 [394960 Воронеж ] Прибыло в сортировочный центр
19 Дек 2018 20:36 +03:00 [397979 Лиски ] Покинуло сортировочный центр
19 Дек 2018 20:10 +03:00 [397979 Лиски ] Сортировка
19 Дек 2018 20:10 +03:00 [397979 Лиски ] Прибыло в сортировочный центр
19 Дек 2018 19:33 +03:00 [397902 Лиски ] Покинуло место приема
19 Дек 2018 12:52 +03:00 [397902 Лиски ] Принято в отделении связи
[guest@localhost ~]$
Ну и, соответственно, можно их в цикле запустить
[guest@localhost ~]$ for i in 11172005104871 39790202014043; do echo "Посылка"; rusmail.sh check $i; done
Посылка
09 Янв 2017 11:03 +03:00 [105005 Москва ] Получено отправителем
05 Янв 2017 08:10 +03:00 [105005 Москва ] Прибыло в место вручения
03 Янв 2017 01:16 +03:00 [111981 Москва ] Покинуло сортировочный центр
01 Янв 2017 22:20 +03:00 [140980 Львовский ] Покинуло сортировочный центр
01 Янв 2017 16:37 +03:00 [140983 Львовский ] Сортировка
30 Дек 2016 09:42 +04:00 [443960 Самара ] Покинуло сортировочный центр
28 Дек 2016 10:23 +04:00 [443028 Мехзавод ] Выслано обратно отправителю
30 Ноя 2016 09:47 +04:00 [443028 Мехзавод ] Неудачная попытка вручения
28 Ноя 2016 13:29 +04:00 [443028 Мехзавод ] Прибыло в место вручения
28 Ноя 2016 06:08 +04:00 [443960 Самара ] Покинуло сортировочный центр
27 Ноя 2016 10:38 +04:00 [443960 Самара ] Прибыло в сортировочный центр
26 Ноя 2016 07:50 +03:00 [140980 Львовский ] Покинуло сортировочный центр
25 Ноя 2016 19:17 +03:00 [140983 Львовский ] Сортировка
23 Ноя 2016 20:04 +03:00 [111537 Москва ] Покинуло место приема
23 Ноя 2016 14:51 +03:00 [111726 Неопр ] Принято в отделении связи
Посылка
08 Янв 2019 15:58 +10:00 [690089 Владивосток ] Получено адресатом
03 Янв 2019 18:27 +10:00 [690089 Владивосток ] Прибыло в место вручения
03 Янв 2019 08:16 +10:00 [690960 Владивосток ] Покинуло сортировочный центр
01 Янв 2019 15:08 +10:00 [690960 Владивосток ] Сортировка
01 Янв 2019 13:58 +10:00 [690960 Владивосток ] Прибыло в сортировочный центр
22 Дек 2018 23:10 +03:00 [102000 Москва ] Покинуло сортировочный центр
22 Дек 2018 22:05 +03:00 [102004 Москва ] Сортировка
22 Дек 2018 17:52 +03:00 [102000 Москва ] Прибыло в сортировочный центр
22 Дек 2018 14:20 +03:00 [102150 Москва ] Покинуло сортировочный центр
22 Дек 2018 05:40 +03:00 [102152 Москва ] Сортировка
22 Дек 2018 05:40 +03:00 [102150 Москва ] Прибыло в сортировочный центр
21 Дек 2018 14:36 +03:00 [394960 Воронеж ] Покинуло сортировочный центр
20 Дек 2018 10:47 +03:00 [394963 Воронеж ] Сортировка
20 Дек 2018 10:47 +03:00 [394960 Воронеж ] Прибыло в сортировочный центр
19 Дек 2018 20:36 +03:00 [397979 Лиски ] Покинуло сортировочный центр
19 Дек 2018 20:10 +03:00 [397979 Лиски ] Сортировка
19 Дек 2018 20:10 +03:00 [397979 Лиски ] Прибыло в сортировочный центр
19 Дек 2018 19:33 +03:00 [397902 Лиски ] Покинуло место приема
19 Дек 2018 12:52 +03:00 [397902 Лиски ] Принято в отделении связи
[guest@localhost ~]$
Потому что когда у тебя скрипт, ты можешь его встраивать в другие скрипты. Это я тебе показываю разницу между тем, как сидеть это и на сайте вручную смотреть через браузер, и между тем, как это смотреть скриптом через консоль. Это похоже на одно и то же, но это не одно и то же. На сайте ты сотню посылок не просмотришь руками, а через скрипт ты можешь просто подать сотню номеров и не только это просмотреть глазами (всё, что он выкачает), но и просто это взять и перенаправить в текстовый файл, чтобы просмотреть это потом по частям (или пустить этот файл уже в другую программу, которая вместо тебя его просмотрит и выберет оттуда всё, что надо).
Короче, это два скрипта. Один скрипт запускается по расписанию каждый час и кладёт на рабочий стол файл, если это надо (если там что-то изменилось), а в этот файл пишет только необходимую информацию (последние три точки, в которых была посылка). Второй скрипт выполняет саму процедуру добывания этой информации с сайта; он не знает ни про какой рабочий стол, ни про какое планирование. Во втором скрипте вставлен в виде текста третий скрипт, который выполняет раскалывание JSON-данных с сайта и их форматирование для чтения человеком. Эти два скрипта, которые в файлах своих лежат, работают в паре (такая спарка). Вот эта спарка у меня следит за каждой из посылок. Мне не нужно какое-то там приложение в смартфоне запускать, проверять его каждый день и думать “а не поменялось ли там что-нибудь? а посылка дальше пошла или так и лежит там где-нибудь?”. Вот я их написал часа за три, подключил, всё проверил, что всё работает и что в случае ошибок тоже всё работает. И теперь я практически не пользуюсь этим приложением в смартфоне от Почты России, потому что оно мне резко стало не нужно. И на сайт Почты России я тоже не хожу. Я просто знаю, где посылка, и я уверен, что как только она придёт, я сразу об этом узнаю. Потому что мои скрипты - я их сам писал, я знаю, как они работают, - никто не может поменять.
Короче, вот это пример скриптов в Linux. В Windows ты такое не сделаешь. Там якобы есть то, якобы есть это, но это всё нихуя не работает. Ты убьёшь несколько дней на просто разработку, а потом поймёшь, что оно нихуя не работает вообще. То есть ты убьёшь время впустую. Очень печально становится в такие моменты. В Linux'е же, наоборот, ты будешь получать одно удовольствие, потому что разработка идёт быстро, при этом ты всё можешь набросать (запретных тем нет), а работает оно потом месяцами и ты думаёшь “блять, я эту прогу даже не дописал, а она приносит пользу уже хуй знает сколько времени”. Вот она разница.
Так что не надо пользоваться Windows, если ты хочешь программировать.