134 lines
4.5 KiB
Bash
134 lines
4.5 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
printf "miniflux-filter - git.mgrote.net/mg/miniflux-filter\n"
|
||
|
|
||
|
## Beispiel-Variablen
|
||
|
### werden in jedem durchlauf neu eingelesen, script muss also nicht neugestartet werden fur filteraenderungen
|
||
|
### miniflux api key
|
||
|
### export mf_auth_token="XN2klsvvDUKf[...]dcHPaeQ="
|
||
|
### minuflux url
|
||
|
### export mf_api_url="https://miniflux.[...].net/v1"
|
||
|
### datei mit filter ausdruecken
|
||
|
mf_filterlist_file="${mf_filterlist_file:=/data/filter.txt}"
|
||
|
### wartezeit zwischen durchlaeufen
|
||
|
mf_sleep="${mf_sleep:=30}"
|
||
|
### mf_debug_output output
|
||
|
# standardmäßig 0 = aus
|
||
|
mf_debug_output="${mf_debug_output:=0}"
|
||
|
### zaehlvariable
|
||
|
n=1
|
||
|
anzahl="0"
|
||
|
|
||
|
function debug_output {
|
||
|
echo Filterlist-File: $mf_filterlist_file
|
||
|
echo Sleep-Intervall: $mf_sleep
|
||
|
echo Auth-Token: $mf_auth_token
|
||
|
echo MF-Url: $mf_api_url
|
||
|
echo Anzahl Filter: $(wc -l $mf_filterlist_file)
|
||
|
}
|
||
|
|
||
|
function check_vars {
|
||
|
# pruefe ob alle vars gesetzt sind
|
||
|
if [[ -z "${mf_auth_token}" ]]; then
|
||
|
echo '"$mf_auth_token"' not set.
|
||
|
exit 2
|
||
|
fi
|
||
|
if [[ -z "${mf_api_url}" ]]; then
|
||
|
echo '"$mf_api_url"' not set.
|
||
|
exit 3
|
||
|
fi
|
||
|
# pruefe ob filter-datei NICHT existiert
|
||
|
if [ ! -e "$mf_filterlist_file" ]; then
|
||
|
echo "$mf_filterlist_file" not readable!
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
function filter_entries {
|
||
|
echo "Checking filters..."
|
||
|
# fuer jede Zeile in $mf_filterlist_file
|
||
|
while read -r line; do
|
||
|
# setze $url auf den Wert vor dem Trennzeichen/Delimiter, ersetze alle Grossschreibungen durch Kleinschreibung
|
||
|
url=$(echo "$line" | tr '[:upper:]' '[:lower:]' | cut --delimiter=: --field=1)
|
||
|
# setze $suchbegriff auf den Wert vor dem Trennzeichen/Delimiter, ersetze alle Grossschreibungen durch Kleinschreibung
|
||
|
suchbegriff=$(echo "$line" | tr '[:upper:]' '[:lower:]' | cut --delimiter=: --field=2)
|
||
|
# hole alle ungelesenen eintraege von miniflux, pipe an jq
|
||
|
# in jq uebergebe shell-variablen an jq selber
|
||
|
# entferne die erste ebene
|
||
|
# suche jeden eintrag wo die feed_url == $url, konvertiere in kleinschreibung, das selbe fur den title
|
||
|
# gebe dann nur die id aus
|
||
|
# die id, wird dann an die variable marked_entries angehangen
|
||
|
# z.B. 53443 52332 48787 [...]
|
||
|
if [[ -n "$url" ]]; then
|
||
|
# abfangen der letzten zeile die leer ist; sonst wird alles gefiltert
|
||
|
if [[ -n "$suchbegriff" ]]; then
|
||
|
# abfangen der letzten zeile die leer ist; sonst wird alles gefiltert
|
||
|
if [[ $mf_debug_output -eq 1 ]]; then
|
||
|
echo URL "$url" - Suchbegriff: "$suchbegriff"
|
||
|
fi
|
||
|
marked_entries+=" $(curl --silent --header "X-Auth-Token: $mf_auth_token" "$mf_api_url/entries?status=unread&limit=0" | jq --arg url "$url" --arg suchbegriff "$suchbegriff" '.entries[] | select(.feed.site_url | ascii_downcase | contains($url)) | select(.title | ascii_downcase | contains($suchbegriff)) | .id' )"
|
||
|
fi
|
||
|
fi
|
||
|
# erhoehe die zaehlvariable
|
||
|
n=$((n+1))
|
||
|
done < "$mf_filterlist_file"
|
||
|
}
|
||
|
function mark_as_read {
|
||
|
# fuer jede zahl(leerzeichen-getrennt) in $marked_entries
|
||
|
# sende in put request mit curl
|
||
|
# der wert muss escaped werden, aber NICHT die variable die uebergeben wird
|
||
|
for i in $marked_entries; do
|
||
|
anzahl=$((anzahl+1))
|
||
|
curl --request PUT --silent --header "X-Auth-Token: $mf_auth_token" --header "Content-Type: application/json" --data "{\"entry_ids\": [$i], \"status\": \"unread\"}" "$mf_api_url/entries" # XXXXXXXX AUNREAD WIEDER RAUS, zu read andern
|
||
|
# gebe aus welcher eintrag gefilter wurde, cur begrenzt die maximale laenge auf 40 zeichen
|
||
|
echo Filtered entry "$i" - "$(curl --silent --header "X-Auth-Token: $mf_auth_token" $mf_api_url/entries/"$i" | jq .title | cut -c -70)".
|
||
|
done
|
||
|
# gebe gesamzzahl gefilterter item aus
|
||
|
if [ "$anzahl" -eq "1" ]; then
|
||
|
echo "$anzahl" entry got filtered.
|
||
|
fi
|
||
|
if [ "$anzahl" -gt "1" ]; then
|
||
|
echo "$anzahl" entries got filtered.
|
||
|
fi
|
||
|
# setze variablen auf leer
|
||
|
marked_entries=""
|
||
|
anzahl="0"
|
||
|
}
|
||
|
function check_dependencies {
|
||
|
# pruefe ob jq installiert ist
|
||
|
# https://stackoverflow.com/questions/592620/how-can-i-check-if-a-program-exists-from-a-bash-script
|
||
|
if ! command -v jq &> /dev/null
|
||
|
then
|
||
|
echo "jq could not be found!"
|
||
|
exit 5
|
||
|
fi
|
||
|
if ! command -v curl &> /dev/null
|
||
|
then
|
||
|
echo "curl could not be found!"
|
||
|
exit 6
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
|
||
|
# fuehre script durchgaengig aus
|
||
|
check_dependencies
|
||
|
while true; do
|
||
|
check_vars
|
||
|
if [[ $mf_debug_output -eq 1 ]]; then
|
||
|
debug_output
|
||
|
fi
|
||
|
filter_entries
|
||
|
mark_as_read
|
||
|
# warte zeit x
|
||
|
sleep $mf_sleep
|
||
|
done
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
# Exit-Code
|
||
|
# 1 - Filter-Datei nicht gefunden
|
||
|
# 2 - mf_auth_token nicht gesetzt
|
||
|
# 3 - mf_api_url nicht gesetzt
|
||
|
# 5 - jq ist nicht installiert
|
||
|
# 6 - curl ist nicht installiert
|