Tips en Trucs 2016

Afbeelding van de dag

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.
Afbeelding van de dag weergeven