Op het internet is zeer veel nuttige informatie te vinden. En soms wil je die informatie automatisch verwerken in een script. Dit kan gaan van het automatisch controleren van de winnende LOTTO cijfers, over het volgen van het weerbericht tot het instellen van een achtergrondafbeelding op basis van de Afbeelding van de dag (Picture Of The Day) op Wikipedia.
Verandert de webpagina, dan moet je ook het script om informatie van de webpagina te halen aanpassen. Logisch en het enige nadeel van scripts die informatie van webpagina's halen (scrapen of scraping).
Het volgende script toont hoe je met behulp van wget informatie op webpagina's kunt gebruiken in scripts. In het voorbeeldscript achterhalen we de koppeling naar de oorspronkelijke afbeelding die als Picture of the Day (POTD) werd gekozen. Deze afbeelding van de dag downloaden we daarna om er deze met behulp van ImageMagick om te vormen tot een geschikte Bureaubladachtergrond. Het script bevat overdadig veel commentaarregels met uitleg.
#!/bin/bash # Achterhaal de datum van vandaag in het voor POTD geschikte formaat TD=`date +%F` #YYYY-MM-DD # Wikipedia specifieke informatie SITE=en.wikipedia.org PAGE=$SITE/wiki/Template:POTD/$TD # De echo opdracht kan helpen bij het opsporen van fouten en de ontwikkeling van het script #echo $PAGE # Controleer of wikipedia bereikbaar is if ! ping -c 1 -q -W 2 -w 2 $SITE ; then printf '\033[1;31;40mWikipidia is niet bereikbaar, script afgebroken. \033[0m\n' # Rode letters op een zwarte actergrond exit 1 fi # Controleer of de opdracht wget geïnstalleerd is. if ! command -v wget; then printf '\033[1;31;40mDit script gebruikt de niet aanwezige opdracht wget. Installeer wget en probeer opnieuw. \033[0m\n' # Rode letters exit 1 fi # Achterhaal de koppeling naar de picture of the day POTD=`wget -qO - $PAGE | grep File: | sed -e "s,.*href=\",," -e "s,\",," | cut -d ' ' -f 1` #echo $POTD # Schakel bij het vergelijken de hoodlettergevoeligheid uit, sommige afbeeldingen gebruiken de extensie .jpg, andere .JPG shopt -s nocasematch # Soms is een picture of the day helemaal geen afbeelding, maar een video. # Met andere woorden ga alleen verder als de picture of the day een JPG afbeelding is. if [[ $POTD =~ \.jpg$ ]]; then # Controleer of python geïnstalleerd is. if ! command -v python; then printf '\033[1;31;40mDit script gebruikt de niet aanwezige opdracht python programmeertaal. Installeer python en probeer opnieuw. \033[0m\n' # Rode letters exit 1 fi # Haal uit de koppeling de bestandnaam van de afbeelding FILENAME=`python -c "import sys, urllib as ul; print ul.unquote_plus(\"$POTD\")" | cut -d: -f2` # echo $FILENAME # Stel de koppeling naar de picture of the day webpagina samen POTMP=$SITE POTDURL=$POTMP$POTD # echo $POTDURL # Haal uit de picture of the day webpagina de koppeling naar de originele afbeelding PICURL=`wget -qO - $POTDURL | grep fullImageLink | sed -e "s,.*href=\",," -e "s,\",," | cut -d ' ' -f 1 | head -1` # Maak indien nodig een map aan om de originele afbeelding in op te slaan if [ ! -d $HOME/Afbeeldingen/Picture\ Off\ The\ Day ]; then mkdir -p $HOME/Afbeeldingen/Picture\ Off\ The\ Day fi # Download de originele afbeelding van de dag wget -O ~/Afbeeldingen/Picture\ Off\ The\ Day/$FILENAME https:$PICURL # Controleer of ImageImagick geïnstalleerd is. if ! command -v identify; then printf '\033[1;31;40mDit script gebruikt het niet aanwezige ImageImagick pakket. Installeer ImageImagick en probeer opnieuw. \033[0m\n' # Rode letters exit 1 fi # Bepaal met identify uit het ImageImagick pakket de afmetingen van de dedownloade afbeelding picHeight=`identify -format "%[fx:h]" Afbeeldingen/Picture\ Off\ The\ Day/$FILENAME` picWidth=`identify -format "%[fx:w]" Afbeeldingen/Picture\ Off\ The\ Day/$FILENAME` # Indien de afbeelding liggend is, komt deze in aanmerking voor een breedbeeld bureaubladachtergrond if (( picHeight < picWidth )); then # Met behulp van convert uit het ImageImagick pakket snijden we een geschikte bureaubladachtergrond uit # In het voorbeeld voor een HD (1920x1080) scherm convert ~/Afbeeldingen/Picture\ Off\ The\ Day/$FILENAME -resize 1920x1080^ -gravity center -extent 1920x1080 ~/Afbeeldingen/Achtergrond.jpg printf '\033[1;32;40mDe Nieuwe achtergrond: \033[0m' # Groene letters op zwarte achtergrond # Met behulp van display uit het ImageImagick pakket, wordt de volgende bureaubladachtergrond weergeven. display ~/Afbeeldingen/Achtergrond.jpg else printf '\033[1;32;40mAfbeelding van de dag: \033[0m' # Groene letters op zwarte achtergrond # Met behulp van display uit het ImageImagick pakket, wordt de gedownloade afbeelding weergeven. display ~/Afbeeldingen/Picture\ Off\ The\ Day/$FILENAME fi else printf '\033[1;31;40mVandaag geen afbeelding van de dag: \033[0;33;40m' # Rode letters fi echo $POTD
Na het uitvoeren van dit script, moet je eenmalig de achtergrondafbeelding van uw systeem instellen om ~/Afbeeldingen/Achtergrond.jpg als achtergrondafbeelding te gebruiken.