Système de notifications pour le site d’annonces radioamateur.org

Article en date du et modifié le
Catégorie : Bidouille Tags : ,

Notification nouvelle annonce radioamateur.org
Notification nouvelle annonce 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.

Capture d'écran de la petite page
Capture d’écran de la petite page

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.

Flow dans Node-RED
Flow dans Node-RED

Tout est libre d’accès ! 🙂