Système de notifications pour le site d’annonces radioamateur.org
Depuis un moment, je recherche un poste radio HF, V/UHF pour ma voiture. Je suis donc les annonces sur Le Bon Coin ainsi que sur radioamateur.org. Le Bon Coin a un système de notifications grâce à son application mais pas radioamateur.org. Une seule chose à faire pour ne pas louper de bonnes affaires : le faire !
Utiliser des flux RSS
Le meilleur système selon moi est d’avoir un flux RSS des annonces.
Les flux RSS sont des flux XML générés automatiquement pour refléter des mises à jour d’un site. Les blogs les utilisent beaucoup. En exemple, voici le mien ici et celui de Google Actualités ici.
Exemple d’un item dans un flux RSS
Voici comment se présente un item :
- Un titre (important)
- Un lien (encore plus !)
- Une description
- Une image
- Un auteur, une catégorie, etc.
<item>
<title>
<![CDATA[ Câble donnés Yaesu SCU-17 / Kenwood TS-950 CW inclus ]]>
</title>
<link>https://radioamateur.org/annonce/Vente/cable-donnes-yaesu-scu-17-kenwood-ts-950-cw-inclus?4065211d58a0264669cc99c68f228b4c</link>
<guid>344471</guid>
<pubDate>Sat, 31 Jul 2021 00:00:00 GMT</pubDate>
<description>
<![CDATA[ Câble données Yaesu SCU-17 / Kenwood TS-950 CW inclus. Peut convenir aux autres radios Kenwood, prière de me demander. 30,00 euro+ 10,00 eur ]]>
</description>
<content:encoded>
<![CDATA[ Câble données Yaesu SCU-17 / Kenwood TS-950 CW inclus. Peut convenir aux autres radios Kenwood, prière de me demander. 30,00 euro+ 10,00 euro courrier recommandé de l'Italie. Paypal, 73, Crispino i5xww P.S. tapez SVP "i5xww" dans la recherche pour mes autres objects. merci. ]]>
</content:encoded>
<category>Accessoires</category>
<enclosure url="https://radioamateur.org/photos/cable-donnes-yaesu-scu-17-kenwood-ts-950-cw-inclus-b32fbb384c72dbe0f18c1c10e414d12b.jpg" length="0" type="image/jpg"/>
</item>
Le script
Je n’ai pas trouvé de flux RSS ou quelque chose du même style sur le site. J’ai donc codé un petit script en Javascript pour récupérer le contenu des pages (scraping).
J’utilise la bibliothèque Cheerio qui permet d’avoir une sorte de jQuery en NodeJS. Avec ça, je peux me balader dans le DOM assez facilement pour récupérer ce qui m’intéresse et l’enregistrer dans un fichier JSON et XML (pour le RSS avec la bibliothèque Feed) :
- Le titre de l’annonce
- Son texte
- Son lien
- Ses photos
- L’indicatif du vendeur
- Son prix
- Son département
- Sa date de publication
- Et enfin son identifiant
Le code est trouvable ici : https://github.com/valentintintin/annonces-radioamateur-org.
J’ai ajouté une petite page listant toutes les annonces ici : https://pixel-server.ovh/annonces-radioamateur-org/, le JSON et le flux RSS.
Le script tourne sur mon serveur toutes les heures.
Les notifications
Pour envoyer des notifications sur mon téléphone j’utilise l’application FireNotify. Voici son GitHub et sa page sur le Play Store.
L’application utilise l’API Firebase de Google pour recevoir les notifications. Elle génère les 2 clés nécessaires (API et token) qu’il faut utiliser dans la requête.
Les notifications Android peuvent avoir un titre, un texte, des images et des boutons (pour ouvrir un lien par exemple).
Voici le corps de la requête que j’envoie (JSONata) :
{
"data":
{
"title": article.title,
"text": article.description,
"image": $count(article.enclosures) > 0 ? article.enclosures[0].url : null,
"actions": [
{
"title": "Ouvrir",
"dismiss": true,
"url": article.link
}
]
},
"to":"TOKEN"
}
Gérer le tout avec Node-RED
Pour récupérer les annonces depuis le RSS et envoyer les notifications, j’utilise Node-Red.
4 blocs sont utilisés : récupération, filtre sur la catégorie « Émetteur-Récepteur », mise en forme de la requête à Firebase, log et appel de l’API.
Tout est libre d’accès ! 🙂