#!/bin/bash
url="http://www.developpez.com/index/rss"
ua="Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"
he="'Content-type: text/html; charset=UTF-8'"
# recuperation flux rss
wget \
--quiet \
--user-agent="$ua" \
--referer="$url" \
"$url" \
--output-document=rss_developpez.xml
input="rss_developpez.xml"
output="rss_developpez_minitest.xml"
# suppression espaces debut lignes & lignes vides
sed -i 's/^[[:space:]]*// ; /^\s*$/d' "$input"
# test fichier
if [[ -f "$output" ]] ; then
truncate -s 0 "$output"
else
touch "$output"
fi
# parcourt xml du flux et on copie chaqueligne dans un nouveau fichier
while read -r line ; do
# chaque article est dans une balise item
if [[ $line = \<item\> ]] ; then
while read -r line ; do
# en fonction des balises que l'on repère
case "$line" in
# on a besoin du lien de l'article pour récupérer l'ensemble du contenu
*\<link\>*)
link=$(echo "$line" | sed 's/<link>// ; s/<\/link>// ; s/^[[:space:]]*//')
;;
# le résumé de l'article est dans la balise CDATA description
*\<description\>*)
# on va télécharger l'article complet via le lien et le garder en mémoire
article="$(wget \
--quiet \
--header="$he" \
--user-agent="$ua" \
--referer="$url" \
"$link" \
-qO- | iconv -f ISO-8859-1 -t UTF-8 )"
# on garde l'essentiel
article=$(echo "$article" | awk '/<h1 class="actuTitle"/ { show=1 } show; /Et vous ?/ { show=0 }')
# merci l'encodage d'un autre age... on convertit
article=$(echo "$article" | sed 's//'\''/g ; s/
/…/g ; s//œ/g')
# on échappe les slashes
article_formate=$(echo "$article" | sed -e 's/[\/&]/\\&/g')
# et on insert dans les balises
echo "<description>[CDATA[" >> "$output"
echo "$article_formate" >> "$output"
echo "]]></description>" >> "$output"
;;
# pour ne pas refermer encore la balise, on ne copie pas la ligne
*\</description\>*)
;;
# on sort de la boucle item
*\</item\>*)
echo "$line" >> "$output"
break
;;
# sinon on copie tout simplement
*)
echo "$line" >> "$output"
;;
esac
done
fi
# copie de la ligne
echo "$line" >> "$output"
done < "$input"
exit 0