Michael Grote
c5c4a94cf9
API-Calls erstellt wip wip funktioniert doku while true, sleep todo todo2 test filterdatei test filterdatei test entries nciht leer logging delimiter output filter header shellcheck doku + zeilenlaenge doku aufgeräumt + filter hinzugefugt gesamtzahl check varsgesetzt vars export shellcheck alles als funktioin check curl dockerfile buld script compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose compose debug filterlist filterlist filter eingebaut doku doku doku checks aufgertäumt doku debug doku debug debug doku doku doku Create LICENSE doku doku doku
133 lines
4.5 KiB
Bash
133 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
|