Outils pour utilisateurs

Outils du site


Panneau latéral

dev:scripts:flux_rss_developpez

flux rss complet developpez

#!/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

dev/scripts/flux_rss_developpez.txt · Dernière modification: 2017/02/11 13:38 (modification externe)