Χρήστης:AtouBot/μετακίνηση.sh
Μετάβαση στην πλοήγηση
Πήδηση στην αναζήτηση
#!/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