Flux rss script¶
Je cherche à créer un fichier .xml visant à collecter et renvoyer des notifications d'un site.
Je prends comme site www.arkhane-asylum.com.
Je cherche en premier lieux les informations que je souhaite récupérer. ici les news.
J'utilise alors cette commande :
> wget -qO- https://www.arkhane-asylum.com | grep -A 257 "<div id=\"news\"" > linkfile.txt
J'obtiens alors un fichier contenant une partie de la page html du site.
Le wget envoie une requête de téléchargement sur le site et q0 permet de ne pas l'enregistrer dans un fichier.
grep -A 257 va lire les 257 lignes après l'occurrence trouvée.
> linkfile.txt lui va enregistrer le contenue dans le fichier linkfile.txt.
Je crée alors un code autour de cette commandes.
Dans un premier temps je crée 3 fichiers vide :
*linkfile.txt
*sparseline.txt
*sortlink.txt
Ensuite j'exécute la commande citée plus haut.
Dans une boucle while je lis le fichier ligne par ligne et chaque occurrences valable sont enregistrées dans un fichier :
while read line
do
grep -oP '(?)https://.*?(?=")' <<< "$line" >> sparseline.txt
done < linkfile.txt
Le grep -oP va alors repérer et afficher la chaîne se trouvant entre les deux caractères " et qui commence par https:// et l'enregistrera dans sparseline.txt.
Je relis alors le nouveau fichier en cherchant les occurrences "/en/20", et je l'enregistre dans un fichier temporaire qui remplacera le nouveau fichier.
grep "/en/20" sparseline.txt >> sparseline.tmp
mv sparseline.tmp sparseline.txt
Je viens alors trier le fichier et supprimer les doublons en écrivant dans un autres fichier.
sort sparseline.tmp | uniq >> sortline.txt
Enfin je supprime la première ligne du fichier. en effet lorsque je vide le fichier il créait un saut de ligne ce qui sera problématique par la suite.
tail -n +2 sortlink.txt > sortlink.tmp && mv sortlink.tmp sortlink.txt
Le script m'écrit alors un fichier contenant les liens des dernières nouvelles du site.
Je crée en suite un second script lequel va créer le fichier xml.
Je commence par vider et supprimer la première ligne du fichier xml.
Je fait ensuite une succession d'*echo* et une boucle while qui remplira le fichier xml.
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" >> rss.xml
echo "<rss version=\"2.0\">" >> rss.xml
echo " <channel>" >> rss.xml
echo " <title>le flux</title>" >> rss.xml
while read line
do
echo " <item>" >> rss.xml
echo " <title>$line</title>" >> rss.xml
echo " <link>$line</link>" >> rss.xml
echo " </item>" >> rss.xml
done < sortlink.txt
echo " </channel>" >> rss.xml
echo "</rss>" >> rss.xml
j'utilise ensuite un backeur pour avoir le flux
enfin j'utilise cron pour ré-exécuter les scripts tout les jours.