#!/bin/bash
# dagens-bilde.sh  --  Last ned «dagens bilde» frå Wikipedia og liknande stadar.
#
# Inndata: Ingenting, eller ei mellomromsdelt liste med datoar på forma ÅÅÅÅ-MM-DD.

# Mappe bildene skal leggast i.
mappe=~/dagens-bilde

# Nedlastingsstadar.
stadar="commons enwiki"

start=2004-11-01
slutt=$(date +%Y-%m-%d)

mkdir -p "$mappe"
mkdir -p "$mappe"/info
mkdir -p "$mappe"/nedlasta

cd "$mappe"

function commons { # Hent filer frå Wikimedia Commons.
wget --quiet --wait=1 --random-wait -O $tmpfil http://commons.wikimedia.org/wiki/Template:Potd/$dato

# Malfila har enten ei lenkja til bildet eller ikkje. Prøv begge variantane.
# Etter 2008-10-17
bildenamn=$(fgrep 'File:' $tmpfil | head -1 | sed -nr '/File:/s/.+"\/wiki\/File:([^"]+).*/\1/p' )

if [ -z "$bildenamn" ]
then
# Før 2008-10-17
  bildenamn=$(sed -nr '/jpe?g/s/[^>]+>([^<]+)<.*/\1/p' $tmpfil)
fi

# Byt ut mellomrom med nedestrekar
bildenamn=$(echo "$bildenamn" | sed 's/\s/_/g')

echo $bildenamn

wget --convert-links --quiet -O $detalj http://commons.wikimedia.org/wiki/Image:$bildenamn
url=$(sed -n 's/.*href=\"\([^"]*\)\">Full resolution<.*/\1/gp' $detalj)
echo $url

wget --quiet -O $filnamn $url
}

function enwiki { # Hent filer frå Wikipedia.
wget --convert-links --quiet --wait=1 --random-wait -O $kort http://en.wikipedia.org/wiki/Template:POTD_protected/$dato
bildenamn=$(sed -n 's/.*wiki\/File:\([^\"]*\).*/\1/p' $kort)
echo $bildenamn

wget --convert-links --quiet -O $detalj http://en.wikipedia.org/wiki/Image:$bildenamn
url=$(sed -n 's/.*href=\"\([^"]*\)\">Full resolution<.*/\1/gp' $detalj)
echo $url

wget --quiet -O $filnamn $url
}


function metasjekk { # Sjekk at metadata er OK, og eventuelt slett fila.
# Hent ut metadata.
info=$(identify $filnamn)
type=$(echo $info | cut -d" " -f2)
storleik=$(echo $info | cut -d" " -f3)
ok=$(echo $storleik | awk -Fx '{print ($1/$2 >= 1.2) && ($1 > 1024)}') # Forkast bilde som har for lågt breidd/høgd-forhold.
if [[ $type != "JPEG" || $ok == 0 ]]
then
  rm -f $filnamn $detalj
  echo -e "$filnamn vart sletta (feil format eller breidd/høgd-forhold).\n"
fi
rm -f $tmpfil
}

# For alle datoar frå $start til $slutt:
dato=$start
until [ $dato = $slutt ]
do
finst=$(fgrep -l $dato "$mappe"/nedlasta/oversikt.txt)
if [ -z "$finst" ]
then
echo -e "$dato\n"

# Hent bilde for alle prefiks.
for prefiks in $stadar
do
echo -e "\n$prefiks"
tmpfil=$(mktemp)
detalj=info/$dato-$prefiks-detaljar.html
kort=info/$dato-$prefiks-kortinfo.html
filnamn=$dato-$prefiks.jpg
if [ -s "$filnamn" ]
then
  echo "Fila finst alt."
else
  $prefiks
  metasjekk
fi

done # Ferdig «for prefiks».

echo $dato >> "$mappe"/nedlasta/oversikt.txt # Registrer at dagen er lasta ned.
fi # Ferdig for test om dagen alt er lasta ned.
dato=$(date -d "$dato 1 day" +"%Y-%m-%d") # Hopp til neste dag.
done # Ferdig «for dato».

# I tilfelle bildet finst frå før, slett éin av versjonane.
echo -e "\nFjernar duplikatbilde.\n"
OUTF=rem-duplicates.sh;
echo "#! /bin/sh" > $OUTF;
find . -type f -print0 \
| xargs -0 -n1 md5sum \
| sort --key=1,32 \
| uniq -w 32 -d --all-repeated=prepend \
| sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/rm \1/' >> $OUTF;

perl -p000e 's{\n\n}{\n\n# }g' rem-duplicates.sh > rem-dups.sh
rm -f rem-duplicates.sh
sh rem-dups.sh
rm rem-dups.sh


# Fjernar bildeinfo for filer som ikkje eksisterer.
echo -e "\nFjernar bildeinfo for filer som ikkje eksisterer.\n"
cd $mappe/info
for fil in *.html
do
  fornamn=${fil%-*.html}
  if [ ! -s "../$fornamn.jpg" ]
  then
    echo -e "Fjernar infofila «$fil», sidan bildefila ikkje eksisterer."
    rm -f $fil
  fi
done


