#!/bin/bash
configdone=""
reason="κάτι έξυπνο εδώ"
cookiesfile="move-wikt-login-cookies.txt"
wiki="el.wiktionary.org"
#όνομα χρήστη, κωδικός πρόσβασης στο wiki
lgname="xxxxxx"
lgpassword="xxxxxx"
curlargs="-s -S --retry 10 -H 'Expect:' -c $cookiesfile -b $cookiesfile -f"
curlurl="http://$wiki/w/api.php?action="
if [ ! -z "$reason" ]; then
# reason=`echo "$reason" | sed -e 's/ /+/g;'`
reason_urlencode="--data-urlencode"
reason_arg="reason=$reason"
else
reason_urlencode=""
reason_arg=""
fi
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
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 getxmlitem()
{
xmlitemval=`echo $xmltext | tr '>' '\n' | grep ${tokenname}= | awk -F${tokenname}= '{ print $2 }' | awk -F'"' '{ print $2 }'`
}
function doamove() {
newtitle=`echo $oldtitle | sed -e "s/Πρότυπο:/Πρότυπο:παρωχημένα\//"`
# προετοιμασία
title="$oldtitle"
xmltext=`curl $curlargs --data-urlencode "prop=info" --data-urlencode "intoken=move" --data-urlencode "format=xml" --data-urlencode "titles=$oldtitle" "${curlurl}query"`
tokenname=movetoken
getxmlitem
movetoken="$xmlitemval"
if [ -z "$movetoken" ]; then
echo "Η αίτηση για movetoken απέτυχε"
echo " Περισσότερες πληροφορίες:"
echo " $xmltext" | sed -e "s/'/'/g;"
exit 1
continue
fi
# κάνουμε την μετακίνηση
echo "μετακίνηση $oldtitle σε $newtitle"
result=`curl $curlargs --data-urlencode "format=xml" --data-urlencode "token=$movetoken" --data-urlencode "from=$oldtitle" --data-urlencode "to=$newtitle" "$reason_urlencode" "$reason_arg" --data-urlencode "noredirect=1" "${curlurl}move" `
if [ "$?" -ne "0" ]; then
echo "Η μετακίνηση απέτυχε"
return 1
fi
err=`echo $result | grep -i error`
if [ ! -z "$err" ]; then
echo "Η μετακίνηση απέτυχε"
echo " Περισσότερες πληροφορίες:"
echo $result
# echo " $err" | sed -e "s/'/'/g;" | awk -F 'error' '{ print $2 }' | awk -F '/>' '{ print $1 }'
continue
fi
}
function checkconfig() {
if [ -z "$configdone" ]; then
echo "Πρέπει να επεξεργαστείτε το αρχείο αυτό για να ελέγξετε τις ρυθμίσεις"
echo "expiry, reason, κλπ, και μετά να βγάλετε το # από τη γραμμή με το configdone."
exit 1
fi
}
function checksessioncurrent() {
if [ -e "$cookiesfile" ]; then
secs=`cat $cookiesfile | grep 'Token' | awk '{ print $5 }'`
secs=$(( $secs+60 ))
secsnow=`date +%s`
if [ "$secs" -le "$secsnow" ]; then
#για να αναγκαστούμε να συνδεθούμε ξανά
rm -f "$cookiesfile"
fi
fi
}
function checkusage() {
if [ "$1" -eq "0" ]; then
echo "Χρήση: $0 τίτλος1 τίτλος2 ..."
echo "Ο λογαριασμός σας πρέπει να έχει τα σχετικά δικαιώματα."
echo "Προσοχή: κάθε τίτλος πρέπει να περικλείεται σε αποστρόφους αν περιέχει κενό."
echo "Για παράδειγμα:"
echo "$0 'Πρότυπο:μέρος του λόγου' 'Πρότυπο:μπλαμπλαl'"
echo "Εναλλακτικά, μπορείτε να καλέσετε το πρόγραμμα με"
echo "cat αρχείο-με-ονόματα-σελίδων | $0 -"
echo "και θα διαβάσει τον κατάλογο ονομάτων από το stdin."
exit 1
fi
}
##########################
##########################
##
## MAIN
##
checkconfig
checkusage $#
checksessioncurrent
if [ ! -e "$cookiesfile" ]; then
login
fi
if [ "$1" == "-" ]; then
while read oldtitle; do
doamove
sleep 5
done
else
for oldtitle in "$@"; do
doamove
sleep 5
done
fi