Le message de @rozy (Une autre routine de script pour être prévenu·e quand EDF Tempo est cher (ᗒᗜᗕ)՛̵̖ ! #299) viens de me rappeler que je n’avais pas partagé, ni archivé quelque-part un script qui permet de naviguer vite-fait sur le forum de club1.
Pour rappel, on utilise le logiciel Flarum, dont l’interface (client Web) est tout en Javascript, qui fait des appels au serveur en PHP. C’est donc un détournement de ces échanges qui permet au script de fonctionner. Malheureusement il n’est pas basé sur une véritable API, ce qui aurait été plus confortable. C’est aussi pour ça que je n’ai pas fait de partie permettant de lire les fils de discussions, car c’était trop peu confortable à détourner.
Il produit une liste des discussions, que l’on peut filtrer par tag et trier. Par exemple, les discussions contentant « énorme », les plus récentes en premier :
$ flum -s -createdAt énorme
id titre création msg lien
228 Un atelier sur le thème du jeu vidéo ! 15/01/2025 6 https://forum.club1.fr/d/228
223 siteweb inaccessible sur certains navigateurs/téléphones 10/12/2024 9 https://forum.club1.fr/d/223
200 Aider les utilisateurs de club1.fr à créer des favicons 05/08/2024 3 https://forum.club1.fr/d/200
137 LiquidSoap 12/11/2023 5 https://forum.club1.fr/d/137
113 La base de données de Synapse est ÉNORME 06/08/2023 21 https://forum.club1.fr/d/113
59 Counter Cloud Action Day 09/02/2023 38 https://forum.club1.fr/d/59
52 Rendre le serveur Matrix sur invitation 14/01/2023 15 https://forum.club1.fr/d/52
24 Présentez vous ! 23/11/2022 35 https://forum.club1.fr/d/24
On obtient un lien qui peut être cliquable (c’est le cas sur mon terminal) nous permettant d’accéder à la discussion.
Les dépendance sont curl et jq, ainsi que getops et column.
Voici le petit code :
#!/bin/bash
usage () {
cat <<'EOF'
_______ ___ ___ ___ ___ ___
| _ | | | Y | Y |
|. 1___|. | |. | |. |
|. __) |. |___|. | |. \_/ |
|: | |: 1 |: 1 |: | |
|::.| |::.. . |::.. . |::.|:. |
`---' `-------`-------`--- ---'
A way to browse club1's forum through CLI
Usage:
flum [-s SORTBY] [-t TAG] SEARCH
-s SORTBY options are: 'createdAt' or 'commentCount' with
an optionnal minus sign before '-' to revert order.
-t TAG type a tag slug. example: 'cafet'
Limitations:
Tag and Search filtering cannot be used at the same time.
EOF
}
sort=''
sortBy=''
tag=''
while getopts 's:t:h!' opt
do
case $opt in
s)
if [ "$OPTARG" = 'createdAt' ] || [ "$OPTARG" = '-createdAt' ] || [ "$OPTARG" = 'commentCount' ] || [ "$OPTARG" = '-commentCount' ]
then
sortBy="$OPTARG"
else
echo "invalid sort option '${OPTARG}'"
echo "valid options are: createdAt|commentCount with optionnal minus sign before '-' to revert order"
exit 1
fi
;;
t)
tag="?filter\[tag\]=$OPTARG"
;;
h)
usage
exit
;;
?)
usage
exit 1
;;
esac
done
shift "$(($OPTIND -1))"
# FILTERING
if test -n "$tag"
then
filter="$tag"
if test -n "$1"
then
echo '✖ search and tag filtering cannot be combined'
exit 1
fi
else
filter="?filter\[q\]=$1"
fi
# SORTING
if test -n "$sortBy"
then
sort="&sort=$sortBy"
fi
url="https://forum.club1.fr/api/discussions$filter$sort"
curl -s "${url}" | jq -r '.data[] | [.id, .attributes.title, (.attributes.createdAt|strptime("%Y-%m-%dT%H:%M:%S%z")|strftime("%d/%m/%Y")), .attributes.commentCount, @uri "https://forum.club1.fr/d/\(.id)"] | @tsv' | column -N id,titre,création,msg,lien -T titre -ts $'\t'
C’était une bonne occasion pour moi de creuser un peu la configuration de jq, qui est assez intéressante ! Ça serait fun de le partager à la communauté Flarum, mais je ne l’ai pas encore fait.