В общем, как-то надоело мне бегать на сайт https://releases.1c.eu/ и скачивать обновления по приходящим сообщениям от сотрудников мол "вышел такой релиз, скачай!" и просматривать RSS новости того же сайта, а потом ещё и вручную скачивать... И принялся автоматизировать процесс:
Роль файлового сервера у меня выполняет Linux Debian. Выход в интернет у него есть. Так пусть он сам и скачивает. Почему нет?
1. задаём константы:
USERNAME=user1cportal
PASSWORD=password1cportal
DIR="/home/myscrypt"
configdir="/storage/1c/1c_typconf/8.3"
b24url=https://work_portal.bitrix24.ua/rest #портал на Б24 где публиковать информацию про обновления
b24API=21/vh2jp50aeelt17k3 #ключ АПИ на Б24
SRC=$(curl -c /tmp/cookies.txt -s -L https://releases.1c.eu)
RSS_URL=https://news.webits.1c.ru/news/updates_ru_eu/rssrm $DIR/rssfile #удаляю рабочие файлы скрипта перед запуском, для возможности отлаки.
rm $DIR/rss
rm $DIR/myproductsACTION=$(echo "$SRC" | grep -oP '(?<=form method="post" id="loginForm" action=")[^"]+(?=")')
EXECUTION=$(echo "$SRC" | grep -oP '(?<=input type="hidden" name="execution" value=")[^"]+(?=")')curl -s -L \
-o /dev/null \
-b /tmp/cookies.txt \
-c /tmp/cookies.txt \
--data-urlencode "inviteCode=" \
--data-urlencode "execution=$EXECUTION" \
--data-urlencode "_eventId=submit" \
--data-urlencode "username=$USERNAME" \
--data-urlencode "password=$PASSWORD" \
https://login.1c.eu"$ACTION"if ! grep -q "TGC" /tmp/cookies.txt ;then
echo "Auth failed"
exit 1
fi#как работает получение cookies файла - до сих порт понять не могу. Но работает.
cd $DIR#формируем список решений, который нас интересует
echo Продукт=Бухгалтерия для Украины > $DIR/myproducts
echo Продукт=Управление производственным предприятием для Украины >> $DIR/myproducts
echo Продукт=Управление торговым предприятием для Украины >> $DIR/myproducts
echo Продукт=Зарплата и Управление Персоналом для Украины >> $DIR/myproducts
echo Продукт=Общепит для Украины >> $DIR/myproducts
echo Продукт=Управление небольшой фирмой для Украины >> $DIR/myproducts
echo Продукт=Управление торговлей для Украины >> $DIR/myproducts
echo Продукт=Бухгалтерія будівельної організації >> $DIR/myproducts
echo Продукт=Бухгалтерия элеватора, мельницы и комбикормового завода для Украины >> $DIR/myproducts
echo Продукт=Бухгалтерия сельскохозяйственного предприятия для Украины >> $DIR/myproducts
echo Продукт=1С:Бухгалтерия сельскохозяйственного предприятия для Украины >> $DIR/myproducts
echo Продукт=1С:Бухгалтерия элеватора, мельницы и комбикормового завода для Украины >> $DIR/myproducts
#echo Продукт=Громадське харчування для України >> $DIR/myproducts
#echo >> $DIR/myproducts
2. Получаем информацию из ленты RSS
wget ${RSS_URL} -o $DIR/rssfile
3. и построчно, с конца, просматриваем и выбираем интересующее нас:
for (( i=40; i > 0; i-- ))
do
guid=$(cat $DIR/rss | xmlstarlet sel -t -v "/rss/channel/item["$i"]/guid")
title=$(cat $DIR/rss | xmlstarlet sel -t -v "/rss/channel/item["$i"]/title" | sed 's/"//' | sed 's/"//g')
body=$(cat $DIR/rss | xmlstarlet sel -t -v "/rss/channel/item["$i"]/description" | sed 's/&amr/&/')
vid=$(cat $DIR/rss | xmlstarlet sel -t -v "/rss/channel/item["$i"]/category[2]")
product=$(cat $DIR/rss | xmlstarlet sel -t -v "/rss/channel/item["$i"]/category[1]")
pubDate=$(cat $DIR/rss | xmlstarlet sel -t -v "/rss/channel/item["$i"]/pubDate")
grep -q $guid "$DIR/rsslog" || (
echo "номер новости = " $i
echo Title is $title
echo Produkt = $productif [[ $product =~ $(echo ^\($(paste -sd'|' $DIR/myproducts)\)$) ]]
then
if [[ $vid = "Вид новости обновлений=Публикация новой версии" ]]
then
echo "i = " $i
echo "Бегом! Качать! " $title
echo "Body = " $body
URL=$(echo $body | cut -f2 -d'"' | sed 's/\&/\&/')
echo "URL is" $URL #(echo $body | cut -f2 -d'"' | sed 's/\&/\&/')
ver=$(echo $body | sed 's/.*ver=//' | cut -f1 -d'"')
echo "ver = " $ver
nick=$(echo $body | cut -f2 -d'"' | sed 's/\&/\&/' | cut -f2 -d'=' | sed 's/\&ver//g')
echo "NIK = " $nick
nicksmal=$(echo $nick | sed 's/[^a-Z]//g')
echo "SmalNick = " $nicksmal..... #тут пропущен сам модуль скачивания чтоб не загромождать описание. В самом файле всё обязательно есть, там полностью рабочий скрипт
#Так же предусмотрено формирование задачи в Б24 на заготовленных ответственных лиц с содержанием информации что нового в релизе.
fi
if [[ $vid = "Вид новости обновлений=Публикация плана версии" ]] # эта информация выводится только в консоль.
then
echo "i = " $i
echo "Скооро вйдет " $title
echo "Body = " $body
echo .fi
fi
4. логируем, чтоб не скачивать и не публиковать уже скачанное.
echo $guid >> $DIR/rsslog
echo $title >> $DIR/rsslog
echo $pubDate >> $DIR/rsslog
echo . >> $DIR/rsslog
)
done
Выставить свои значения констант вверху файла и добавить его в планировщик - файлы начнут скачиваться.
Попытка опубликовать в B24 тоже будет, но нужно указать корректных (нужных, не уволенных) пользователей и группы, в которых публиковать.
Оповещение в Б24 сейчас сделано в виде задач (так попросили сотрудники), можно сделать в виде новости в живой ленте. (да и список пользователей получателей можно будет вынести в константы).