Εϊμαστε σε έναν καθαρό φάκελο, πχ apibot. Εκεί θα δημιουργηθεί το cookie μας που το ονομάζω τώρα 'myselfblah'. Δίνουμε

curl -f -c myselfblah -d 'action=login' -d 'lgname=Flyax' -d 'lgpassword=topasswordpouexw' -d 'format=xml' 'http://el.wiktionary.org/w/api.php'

Στην απάντηση από το διακομιστή θα βρούμε ένα token (κουπόνι, που λέει και ο Αριελ :P). Πχ. 13459i9 κλπ κλπ. Αυτό το χρησιμοποιούμε στην επόμενη εντολή:

curl -f -c myselfblah -b myselfblah -d 'action=login' -d 'lgname=Flyax' -d 'lgpassword=topasswordpouexw' -d 'format=xml' -d 'lgtoken=13459i9' 'http://el.wiktionary.org/w/api.php'

Διαγραφή σελίδας

επεξεργασία

Πρέπει πάλι να πάρουμε ένα deletetoken. Γι' αυτό πρώτα δίνουμε, αν η σελίδα προς διαγραφή είναι η Infirme,

curl -f -c myselfblah -b myselfblah -d 'action=query' -d 'prop=info' -d 'intoken=delete' -d 'titles=Infirme' -d 'format=xml' 'http://el.wiktionary.org/w/api.php'

Μας δίνει ένα delete token, πχ 12345i9+\. Επειδή οι 2 τελευταίοι χαρακτήρες πρέπει να μετατραπούν σε 16αδικό, αντί για -d χρησιμοποιούμε το --data-urlencode

curl -f -c myselfblah -b myselfblah -d 'action=delete' --data-urlencode  'token=12345i9+\' -d 'title=Infirme' -d 'reason=old redirect from conversion script'  -d 'format=xml' 'http://el.wiktionary.org/w/api.php'

Και οι δύο ενέργειες μαζί (script)

επεξεργασία

To script που ακολουθεί είναι εξ ολοκλήρου κλεμμένο από τον Ariel Glenn (βλέπε εδώ. Η σύνοψη της επεξεργασίας δίνεται με τη μεταβλητή reason, η οποία καλό είναι να μην περιέχει κενά αλλά παύλες (_) για να μην έχουμε προβλήματα.

Αν το όνομα του αρχείου είναι delete.sh, το τρέχουμε με την εντολή:

./delete.sh λέξη1 λέξη2 (κλπ)

Αν κάποια από τις "λέξεις" περιέχει κενά, πρέπει να την κλείσουμε σε αποστρόφους:

./delete.sh λέξη1 'λέξη2 λέξη' λέξη3 (κλπ)

#!/bin/bash

cookiesfile="elwikt-login-cookies.txt"
wiki="el.wiktionary.org"
#όνομα χρήστη, κωδικός πρόσβασης στο wiki
lgname="Flyax"
lgpassword="ΧΧΧΧΧΧΧ"
reason1="άχρηστη_ανακατεύθυνση"

curlargs="-s -S --retry 10 -H 'Expect:' -c $cookiesfile -b $cookiesfile -f"
curlurl="http://$wiki/w/api.php?action="
if [ ! -z "$reason1" ]; then
  reason_arg="--data-urlencode reason=$reason1"
  #summary_arg="--data-urlencode 'summary=$reason1'"
else
  reason_arg=""
  #summary_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
    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() {
    xmltext=`curl $curlargs -d "prop=info" -d "format=xml" --data-urlencode "titles=$title" "${curlurl}query"`
    redir=`echo $xmltext | grep 'redirect' -c`
    if [ "$redir" -ne "0" ]; then
        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
    	result=`curl $curlargs --data-urlencode "format=xml" --data-urlencode "token=$deltoken" --data-urlencode "title=$title" $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
    else
	echo "$title" " : δεν είναι ανακατεύθυνση, δεν διαγράφτηκε"
	return 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

Οι τελευταίες 500 νέες σελίδες

επεξεργασία

Εντολή

./newpages.sh > new.pages.500
#!/bin/bash

curl --retry 10 -f "http://el.wiktionary.org/w/api.php?action=query&format=xml&list=recentchanges&rclimit=500&rcnamespace=0&rctype=new" | sed -e 's/>/>\n/g' > new.temp1
if [ $? -ne 0 ]; then
      echo "Error $? from curl, bailing"
      exit 1
fi
grep title new.temp1 > info1
cat info1|
while read tt; do
    echo $tt | awk -F 'title="' '{ print $2 }' | awk -F '"' '{ print $1 }'
done

Συνεισφορές χρήστη

επεξεργασία

https://el.wiktionary.org/w/api.php?action=query&meta=siteinfo&siprop=statistics