Automatinis didelio kiekio failų siuntimo per Telegram skriptas
Įvadas
Prieš pradedant detaliai nagrinėti šį scenarijų, norėčiau paminėti, kad jau perkėliau savo tinklaraštį iš wordpress.com, nes gavau nusiskundimų dėl pernelyg didelio reklaminių partnerių kiekio mano tinklaraštyje. Taip pat nusprendžiau, kad komentarus skriptuose rašysiu anglų kalba. Tai ne tik pagerins mano anglų kalbos įgūdžius, bet ir padės kitiems programuotojams lengviau suprasti mano kodą.
#!/bin/bash
# Įkelkite konfigūracijos failą (naudokite pilną arba reliatyvų kelią)
# Load the configuration file (use full or relative path)
CONFIG_FILE="$(dirname "$0")/config.sh"
if [ ! -f "$CONFIG_FILE" ]; then
echo "Config failas nerastas: $CONFIG_FILE" # Configuration file not found
exit 1
fi
source "$CONFIG_FILE"
echo "Naudojamas config.sh failas: $CONFIG_FILE" # Using config.sh file
echo "chat_id: $chat_id, bot_token: $bot_token"
chat_id="$group_chat_id"
# Nurodytas katalogas / Specified directory
directory="/home/vaidotak/Archyvuoti/calibre_pdf/"
# Patikrinkite, ar katalogas egzistuoja / Check if the directory exists
if [ ! -d "$directory" ]; then
echo "Katalogas '$directory' neegzistuoja arba nėra katalogas" # Directory does not exist or is not a directory
exit 1
fi
# Siuntimo žurnalo failas / Send log file
log_file="$directory/send_log.txt"
# Patikrinkite, ar siuntimo žurnalo failas egzistuoja, jei ne - sukurkite
# Check if the send log file exists, if not - create it
if [ ! -f "$log_file" ]; then
touch "$log_file"
fi
# Pereikite per visus failus kataloge / Iterate over all files in the directory
for file in "$directory"/*; do
if [ -f "$file" ]; then
# Patikrinkite, ar failas jau buvo išsiųstas
# Check if the file has already been sent
if grep -q "$(basename "$file")" "$log_file"; then
echo "Failas $(basename "$file") jau buvo išsiųstas. Praleidžiama." # File has already been sent. Skipping.
continue
fi
echo "Siunčiamas failas: $file" # Sending file
# Siųskite failą per Telegram / Send the file via Telegram
response=$(curl -F chat_id="${chat_id}" -F document=@"$file" https://api.telegram.org/bot${bot_token}/sendDocument)
if [ $? -ne 0 ]; then
echo "Klaida siunčiant failą: $file" # Error sending file
logger -p user.err "Klaida siunčiant failą per Telegram: $file" # Error sending file via Telegram
# Užregistruokite klaidą žurnale / Register error in log
echo "Failas: $(basename "$file"), Klaida siunčiant, Data: $(date '+%Y-%m-%d %H:%M:%S')" >> "$log_file"
else
# Išsiuntimo data ir laikas / Send date and time
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
# Failo dydis baitais / File size in bytes
filesize=$(stat -c%s "$file")
# Užregistruokite sėkmingą siuntimą žurnale / Register successful send in log
echo "Failas: $(basename "$file"), Data: $timestamp, Dydis: $filesize B" >> "$log_file"
echo "Failas $file sėkmingai išsiųstas ir užregistruotas." # File successfully sent and registered
fi
fi
done
echo "Visi failai sėkmingai išsiųsti arba pažymėti klaidomis" # All files successfully sent or marked with errors
logger -p user.info "Visi failai sėkmingai išsiųsti arba pažymėti klaidomis" # All files successfully sent or marked with errors
Kam skirtas šis scenarijus?
Šis scenarijus skirtas vartotojams, kurie turi daug failų (šiuo metu siunčiu virš 3000 pdf failų, kurių dydis 64GB), kuriuos reikia nusiųsti per Telegram, ir nori tai padaryti efektyviai bei automatiškai. Tai gali būti naudinga:
- Mokytojams, dalinantiems mokymo medžiagą.
- Tyrėjams, skelbiantiems tyrimų rezultatus.
- Verslininkams, dalinantiems dokumentus su klientais ar partneriais.
- Bet kam, kas turi reguliariai siųsti failus per Telegram.
Kaip veikia scenarijus?
Skriptas veikia taip:
- Nuskaito konfigūracijos failą, kuriame yra
chat_id
irbot_token
, reikalingi siuntimui per Telegram. - Patikrina, ar nurodytas katalogas egzistuoja.
- Sukuria (jei dar nėra) arba atnaujina siuntimo žurnalo failą.
- Pereina per visus failus kataloge ir patikrina, ar jie jau buvo išsiųsti (pagal žurnalo įrašus).
- Jei failas dar nebuvo išsiųstas, bando jį išsiųsti per Telegram.
- Jei siuntimas pavyksta, įrašo informaciją apie siuntimą į žurnalą (failo pavadinimas, data, dydis).
- Jei siuntimas nepavyksta, registruoja klaidą žurnale ir pereina prie kito failo.
Kaip naudotis scenarijumi?
Konfigūracijos failas: Įsitikinkite, kad turite konfigūracijos failą config.sh
, kuriame yra:
chat_id="JŪSŲ_CHAT_ID"
bot_token="JŪSŲ_BOT_TOKEN"
Failų katalogas: Įdėkite visus failus į katalogą /home/vaidotak/Archyvuoti/calibre_pdf/
Paleiskite scenarijų: Terminale įveskite:
./siuntimo_scenarijus.sh
Stebėkite siuntimo procesą: Skirtuose kataloguose ir žurnalo faile send_log.txt
bus registruojami išsiųsti failai bei klaidos.
Privalumai
- Automatizacija: Sutaupo laiko, nes failai siunčiami automatiškai be vartotojo įsikišimo.
- Klaidų tvarkymas: Jei siuntimas nepavyksta, klaida registruojama, bet scenarijus tęsia darbą.
- Žurnalo failas: Sekami visi išsiųsti failai, užtikrinant, kad jie nebūtų siunčiami pakartotinai.
- Paprastumas: Skriptas yra paprastas naudoti ir nereikalauja gilių programavimo žinių.
Trūkumai
- Ribotas klaidų tvarkymas: Nors klaidos registruojamos, jų tvarkymas ir atkūrimas nėra automatinis.
- Specifinis katalogas: Šiuo metu katalogas yra fiksuotas
/home/vaidotak/Archyvuoti/calibre_pdf/
, kas gali būti nepatogu kai kuriems vartotojams. - Telegram priklausomybė: Reikalingas
chat_id
irbot_token
, kurie turi būti gauti iš Telegram.
Galimi patobulinimai
- Konfigūruojamas katalogas: Galima pridėti galimybę nurodyti katalogą kaip scenarijaus argumentą.
- Daugiau klaidų tvarkymo: Patobulinti klaidų tvarkymą, kad būtų galima automatiškai bandyti išsiųsti nepavykusius failus vėliau.
- Pranešimai: Pridėti pranešimus apie sėkmingą siuntimą ar klaidas vartotojui, naudojant el. paštą ar kitas komunikacijos priemones.
- GUI: Sukurti grafinę vartotojo sąsają, kad būtų lengviau konfigūruoti ir naudoti scenarijų.
Išvada
Šis scenarijus yra paprastas ir efektyvus būdas automatizuoti failų siuntimą per Telegram. Jis tinka įvairiems vartotojams, kurie nori automatizuoti savo darbo eigą ir užtikrinti, kad visi failai būtų išsiųsti tik vieną kartą. Nors scenarijus turi keletą trūkumų, juos galima lengvai ištaisyti pritaikant scenarijų konkretiems poreikiams.
Atnaujinta: Susidūriau, kad nemažai failų pavadinimų turi įvairių ne kažką simbolių, kaip , ir panašiai. Tai dar vienas skriptukas padeda tą išspręst
#!/bin/bash
# Nurodome katalogą
katalogas="/home/vaidotak/Archyvuoti/calibre_pdf/"
# Einame per visus failus kataloge
for failas in "$katalogas"*; do
if [ -f "$failas" ]; then
# Gauname failo pavadinimą be kelio
pavadinimas=$(basename "$failas")
# Pakeičiame netinkamus simbolius
naujas_pavadinimas=$(echo "$pavadinimas" | tr -d ',:;*?<>|&$!#%^@()')
# Pakeičiame tarpus į pabraukimus
naujas_pavadinimas=${naujas_pavadinimas// /_}
# Jei pavadinimas pasikeitė, pervardijame failą
if [ "$pavadinimas" != "$naujas_pavadinimas" ]; then
mv "$failas" "$katalogas$naujas_pavadinimas"
echo "Pervardinta: $pavadinimas -> $naujas_pavadinimas"
fi
fi
done
Komentarai
Rašyti komentarą