Προσοχή: δεν έχουν γίνει εξαντλητικές δοκιμές!

#!/bin/bash

cookiesfile="elwikt-login-cookies.txt"
wiki="el.wiktionary.org"
#όνομα χρήστη, κωδικός πρόσβασης στο wiki
lgname=""
lgpassword=""
reason1='old redirect from conversion script'
reason1=`echo $reason1 | sed 's: :\\ :g '`

curlargs="-s -S --retry 10 -H 'Expect:' -c $cookiesfile -b $cookiesfile -f"
curlurl="http://$wiki/w/api.php?action="
if [ ! -z "$reason1" ]; then
  reason_option="--data-urlencode"
  reason_arg="reason=$reason1"
else
  reason_option=""
  reason_arg=""
fi

function getxmlitem() 
{
  xmlitemval=`echo $xmltext | tr '>' '\n' | grep ${tokenname}= | awk -F${tokenname}= '{ print $2 }' | awk -F'"' '{ print $2 }'` 
}

function loginerrcheck() {
    if [ $loginresult -ne "0" ]; then 
	echo "Η σύνδεση απέτυχε, μάλλον λάθος κώδικας πρόσβασης"
	if [ -e "$cookiesfile" ]; then
	        rm -f $cookiesfile
		fi
	exit 1
    fi
    loginerr=`echo $login | grep Illegal`
    if [ ! -z "$loginerr" ]; then
	echo "Η σύνδεση απέτυχε, μάλλον λάθος κώδικας πρόσβασης"
	echo "   Περισσότερες πληροφορίες:"
	echo "   $loginerr" | sed -e "s/'/'/g;"
	if [ -e "$cookiesfile" ]; then
	        rm -f $cookiesfile
		fi
	exit 1
    fi
    return 
}

function login() {
    if [ -z "$lgname" -o -z "$lgpassword" ]; then
	echo "Πρέπει να επεξεργαστείτε το αρχείο αυτό και να ελέγξετε τις ρυθμίσεις"
	echo "lgname και lgpassword."
	exit 1
    fi
    lgname=`echo $lgname | sed 's: :\\ :g '`
    lgpassword=`echo $lgpassword | sed 's: :\\ :g '`
    login=`curl -s -S  --retry 10 -H 'Expect:' -c $cookiesfile -f --data-urlencode "lgname=$lgname" --data-urlencode "lgpassword=$lgpassword" --data-urlencode "format=xml"  "${curlurl}login"`
    loginresult=$?
    loginerrcheck
    loginneedtoken=`echo $login | grep NeedToken`
    if [ ! -z "$loginneedtoken" ]; then
	tokenname=token
	xmltext="$login"
	getxmlitem
	lgtoken="$xmlitemval"
	login=`curl -s -S  --retry 10 -H 'Expect:' -c $cookiesfile -b $cookiesfile -f --data-urlencode "lgname=$lgname" --data-urlencode "lgpassword=$lgpassword" --data-urlencode "lgtoken=$lgtoken" --data-urlencode "format=xml"  "${curlurl}login"`
	loginresult=$?
        loginerrcheck
	loginneedtoken=`echo $login | grep NeedToken`
	if [ ! -z "$loginneedtoken" ]; then
	        echo "Η σύνδεση απέτυχε (NeedToken μετά από δεύτερη προσπάθεια)"
		    if [ -e "$cookiesfile" ]; then
			rm -f $cookiesfile
			    fi
		        exit 1
			fi
    fi
    echo "Συνδεθήκατε ως $lgname"
}

function deletepagefromtitle() {
    title=`echo $title | sed 's: :\\ :g '`
    xmltext=`curl $curlargs --data-urlencode "prop=info" --data-urlencode "intoken=delete" --data-urlencode "format=xml" --data-urlencode "titles=$title"  "${curlurl}query"`
    tokenname=deletetoken
    getxmlitem
    deltoken="$xmlitemval"
    if [ -z "$deltoken" ]; then 
	echo "Η αίτηση για deltoken απέτυχε, μάλλον δεν έχετε το σχετικό δικαίωμα"
	echo "   Περισσότερες πληροφορίες:"
	echo "   $xmltext" | sed -e "s/'/'/g;"
	return 1
    fi
    echo curl $curlargs --data-urlencode "format=xml" --data-urlencode "token=$deltoken" --data-urlencode "title=$title" $reason_option "$reason_arg" "${curlurl}delete" 
    result=`curl $curlargs --data-urlencode "format=xml" --data-urlencode "token=$deltoken" --data-urlencode "title=$title" $reason_option "$reason_arg" "${curlurl}delete" `
    if [ "$?" -ne "0" ]; then 
	echo "Η διαγραφή απέτυχε"
	return 1
    fi
    err=`echo $result | grep -i error`
    if [ ! -z "$err" ]; then
	echo "Η διαγραφή απέτυχε... ή μας πρόλαβε άλλος"
	echo "   Περισσότερες πληροφορίες:"
	echo "   $err" | sed -e "s/'/'/g;" | awk -F 'error' '{ print $2 }' | awk -F '/>' '{ print $1 }'
    fi	
}

function checkusage() {
    if [ "$1" -eq "0" ]; then
	echo "Χρήση: $0 1η-λέξη 2η-λέξη 3η..."
	echo "Ο λογαριασμός σας πρέπει να έχει τα σχετικά δικαιώματα."
	echo "Προσοχή: κάθε λέξη πρέπει να περικλείεται σε αποστρόφους αν περιέχει κενό."
	echo "Για παράδειγμα:"
	echo "$0 'mean vandal'   'super mean vandal'   'boring editwar type'"
	echo "Εναλλακτικά, μπορείτε να καλέσετε το πρόγραμμα με"
	echo "cat αρχείο-με-λέξεις | $0 -" 
	echo "και θα διαβάσει τον κατάλογο λέξεων από το stdin."
	exit 1
    fi
}


## MAIN
##

checkusage $#
if [ ! -e "$cookiesfile" ]; then
    login
fi

if [ "$1" == "-" ]; then
    while read title; do
	deletepagefromtitle
    done
else 
    for title in "$@"; do
	deletepagefromtitle
    done
fi