Χρήστης:AtouBot/Μετονομασία παλιών προτύπων

Η διαδικασία:

  • Πήραμε τη λίστα προτύπων που αρχίζουν με παύλες, βγάζαμε από τη λίστα αυτά που ανήκουν στην κατηγορία "Πρότυπα γλωσσών", αφαιρέσαμε μερικά ακόμα με δοκ/dok στο όνομα, και προσθέσαμε λίγα χωρίς παύλες από το fixes του ΝΣ.

Ο κώδικας:

#!/bin/bash

usage() {
  echo "Usage: $0 namespace"
  echo "where namespace is the number of the namespace from which to retrieve titles"
  echo 
  echo "For example:"
  echo "$0 0  for the main namespace";
  echo "$0 1  for the Talk namespace";
  echo "$0 2  for the User namespace";
  echo "$0 3  for the User talk namespace";
  echo "$0 4  for the Βικιλεξικό namespace";
  echo "$0 5  for the Βικιλεξικό talk namespace";
  echo "$0 10  for the Template namespace";
  echo "$0 11  for the Template talk namespace";
  exit 1
}

if [ -z "$1"  ]; then
  usage
fi
namesp=`echo "$1" | sed -e 's/ /_/g;'`
tmp="./namespace_tmp"
today=`date +"%B-%d-%Y"`
ext="$today"
mkdir -p $tmp
titles="$tmp/titles.$ext"
apfrom=""
step=500

rm -f  $titles.*  

count=1
while [ 1 ]; do

    echo getting namespace $namesp titles $count to $count+$step

    # επόμενοι 500 ($step)

echo "$titles.xml.temp"
    if [ -z "$apfrom" ];  then
        curl --retry 10 -H 'Expect:' -f "http://el.wiktionary.org/w/api.php?action=query&list=allpages&apnamespace=$namesp&aplimit=$step&format=xml" | sed -e 's/>/>\n/g;' > $titles.xml.temp
    else
#set -x
        curl --retry 10 -H 'Expect:' -f "http://el.wiktionary.org/w/api.php?action=query&list=allpages&apnamespace=$namesp&apfrom=$apfrom&aplimit=$step&format=xml" | sed -e 's/>/>\n/g;' > $titles.xml.temp
#set +x
    fi
    if [ $? -ne 0 ]; then
        echo "Error $? from curl, unable to get xml pages, bailing"
        exit 1
    fi
    cat $titles.xml.temp >> $titles.xml
    # get continue param
    # format: <allpages apfrom="βήξιμο" />
    apfrom=`grep apfrom $titles.xml.temp`
    if [ -z "$apfrom" ]; then
	break;
    else
        apfrom=`echo $apfrom | awk -F'"' '{ print $2 }' | sed -e 's/ /%20/g; s/&/%26/g; s/\#/%23/g;'`
    fi
    sleep 6
    count=$(( $count+$step ))
done

# format <p pageid="37881" ns="0" title="βέρος" />
cat $titles.xml | grep '<p ' | awk -F'"' '{ print $6 }'  | sed -e 's/^/[[/g; s/$/]]/g;' > $titles.txt
# done!
echo "done!"
exit 0

Η πλήρης λίστα προτύπων:

Πρότυπο:-adj-
Πρότυπο:-adv-
Πρότυπο:-anagr-
Πρότυπο:-ant-
Πρότυπο:-drv-
Πρότυπο:-exp-
Πρότυπο:-flex-verb-
Πρότυπο:-hanja-
Πρότυπο:-homo-
Πρότυπο:-hyper-
Πρότυπο:-nom-
Πρότυπο:-ortho-alt-
Πρότυπο:-pron-
Πρότυπο:-prép-
Πρότυπο:-réf-
Πρότυπο:-syn-
Πρότυπο:-étym-
Πρότυπο:-αναγρ-
Πρότυπο:-αναφ-
Πρότυπο:-αντ-
Πρότυπο:-αντων-
Πρότυπο:-αντων-/οδηγίες
Πρότυπο:-αορ-
Πρότυπο:-αρθρ-
Πρότυπο:-αριθ-
Πρότυπο:-βλεπ-
Πρότυπο:-γραφ-
Πρότυπο:-εκφ-
Πρότυπο:-εκφρ-
Πρότυπο:-επι-
Πρότυπο:-επιθ-
Πρότυπο:-επιθ-/οδηγίες
Πρότυπο:-επιθ-εκφρ-
Πρότυπο:-επιρ-
Πρότυπο:-επιρ-/οδηγίες
Πρότυπο:-επιρ-εκφρ-
Πρότυπο:-επιφ-
Πρότυπο:-επιφ-/οδηγίες
Πρότυπο:-ετυμ-
Πρότυπο:-θεμ-
Πρότυπο:-καταλ-
Πρότυπο:-καταλ-α-επιθ-
Πρότυπο:-καταλ-α-ουσ-
Πρότυπο:-καταλ-αθ-ουσ-
Πρότυπο:-καταλ-επιρ-
Πρότυπο:-καταλ-θ-ουσ-
Πρότυπο:-καταλ-ο-ουσ-
Πρότυπο:-καταλ-ρημ-
Πρότυπο:-κλίσ-
Πρότυπο:-κλισ-
Πρότυπο:-κοιτ-
Πρότυπο:-κυρ-
Πρότυπο:-κυρ-/Οδηγίες
Πρότυπο:-μορ-
Πρότυπο:-μορ-/οδηγίες
Πρότυπο:-μορφ-αντων-
Πρότυπο:-μορφ-αρθρ-
Πρότυπο:-μορφ-επιθ-
Πρότυπο:-μορφ-κυρ-
Πρότυπο:-μορφ-μτχ-
Πρότυπο:-μορφ-ουσ-
Πρότυπο:-μορφ-ρημ-
Πρότυπο:-μτφ-
Πρότυπο:-μτχ-
Πρότυπο:-ομων-
Πρότυπο:-ουσ-
Πρότυπο:-ουσ-/Βοήθεια
Πρότυπο:-ουσ-/οδηγίες
Πρότυπο:-παθ-μτχ-
Πρότυπο:-παραγ-
Πρότυπο:-παροιμ-
Πρότυπο:-παρων-
Πρότυπο:-πολυ-ουσ-
Πρότυπο:-προ-
Πρότυπο:-προθ-
Πρότυπο:-προθ-/οδηγίες
Πρότυπο:-προσδ-
Πρότυπο:-προφ-
Πρότυπο:-ρημ-
Πρότυπο:-ρημ-/Βοήθεια
Πρότυπο:-ρημ-/οδηγίες
Πρότυπο:-σημ-
Πρότυπο:-σμμ-
Πρότυπο:-συγγ-
Πρότυπο:-συμβ-
Πρότυπο:-συνδ-
Πρότυπο:-συνδ-/οδηγίες
Πρότυπο:-συνθ-
Πρότυπο:-συντμ-
Πρότυπο:-συνων-
Πρότυπο:-ταυτ-
Πρότυπο:-υπερ-
Πρότυπο:-υπο κατ-
Πρότυπο:-υποκ-
Πρότυπο:-υπων-
Πρότυπο:-χαρ-
Πρότυπο:-χαρ-/Οδηγίες
Πρότυπο:=aa=
Πρότυπο:=ab=
Πρότυπο:=ady=
Πρότυπο:=af=
Πρότυπο:=alq=
Πρότυπο:=als=
Πρότυπο:=am=
Πρότυπο:=an=
Πρότυπο:=ang=
Πρότυπο:=ar=
Πρότυπο:=arc=
Πρότυπο:=ast=
Πρότυπο:=ay=
Πρότυπο:=az=
Πρότυπο:=ba=
Πρότυπο:=bar=
Πρότυπο:=bat-smg=
Πρότυπο:=be=
Πρότυπο:=bem=
Πρότυπο:=bg=
Πρότυπο:=bi=
Πρότυπο:=bm=
Πρότυπο:=bn=
Πρότυπο:=bo=
Πρότυπο:=br=
Πρότυπο:=bs=
Πρότυπο:=ca=
Πρότυπο:=ceb=
Πρότυπο:=ch=
Πρότυπο:=chr=
Πρότυπο:=co=
Πρότυπο:=cr=
Πρότυπο:=cs=
Πρότυπο:=csb=
Πρότυπο:=cv=
Πρότυπο:=cy=
Πρότυπο:=da=
Πρότυπο:=de=
Πρότυπο:=diq=
Πρότυπο:=dog=
Πρότυπο:=dum=
Πρότυπο:=dv=
Πρότυπο:=ee=
Πρότυπο:=el=
Πρότυπο:=eldok=
Πρότυπο:=elx=
Πρότυπο:=en=
Πρότυπο:=eo=
Πρότυπο:=es=
Πρότυπο:=et=
Πρότυπο:=ett=
Πρότυπο:=eu=
Πρότυπο:=fa=
Πρότυπο:=fi=
Πρότυπο:=fj=
Πρότυπο:=fo=
Πρότυπο:=fr=
Πρότυπο:=frp=
Πρότυπο:=fur=
Πρότυπο:=fy=
Πρότυπο:=ga=
Πρότυπο:=gal=
Πρότυπο:=gd=
Πρότυπο:=gl=
Πρότυπο:=glv=
Πρότυπο:=gn=
Πρότυπο:=got=
Πρότυπο:=grc=
Πρότυπο:=gsw-FR=
Πρότυπο:=gu=
Πρότυπο:=gv=
Πρότυπο:=ha=
Πρότυπο:=hanja=
Πρότυπο:=haw=
Πρότυπο:=hbo=
Πρότυπο:=he=
Πρότυπο:=hi=
Πρότυπο:=hr=
Πρότυπο:=ht=
Πρότυπο:=hu=
Πρότυπο:=hy=
Πρότυπο:=hz=
Πρότυπο:=ia=
Πρότυπο:=id=
Πρότυπο:=ie=
Πρότυπο:=ilo=
Πρότυπο:=io=
Πρότυπο:=is=
Πρότυπο:=it=
Πρότυπο:=iu=
Πρότυπο:=ja=
Πρότυπο:=jbo=
Πρότυπο:=jv=
Πρότυπο:=ka=
Πρότυπο:=kat=
Πρότυπο:=kg=
Πρότυπο:=kk=
Πρότυπο:=km=
Πρότυπο:=kn=
Πρότυπο:=ko=
Πρότυπο:=ks=
Πρότυπο:=ku=
Πρότυπο:=kw=
Πρότυπο:=ky=
Πρότυπο:=la=
Πρότυπο:=lad=
Πρότυπο:=lb=
Πρότυπο:=li=
Πρότυπο:=liv=
Πρότυπο:=lld=
Πρότυπο:=ln=
Πρότυπο:=lo=
Πρότυπο:=lt=
Πρότυπο:=lv=
Πρότυπο:=mal=
Πρότυπο:=mdf=
Πρότυπο:=mg=
Πρότυπο:=mi=
Πρότυπο:=mk=
Πρότυπο:=ml=
Πρότυπο:=mn=
Πρότυπο:=mo=
Πρότυπο:=mr=
Πρότυπο:=ms=
Πρότυπο:=mt=
Πρότυπο:=nah=
Πρότυπο:=nai=
Πρότυπο:=nap=
Πρότυπο:=nds-nl=
Πρότυπο:=nds=
Πρότυπο:=ne=
Πρότυπο:=new=
Πρότυπο:=nl=
Πρότυπο:=nn=
Πρότυπο:=no=
Πρότυπο:=nrm=
Πρότυπο:=nso=
Πρότυπο:=nv=
Πρότυπο:=oc=
Πρότυπο:=or=
Πρότυπο:=os=
Πρότυπο:=pa=
Πρότυπο:=pam=
Πρότυπο:=pap=
Πρότυπο:=pdc=
Πρότυπο:=pl=
Πρότυπο:=pms=
Πρότυπο:=prv=
Πρότυπο:=ps=
Πρότυπο:=pt=
Πρότυπο:=qu=
Πρότυπο:=rap=
Πρότυπο:=rm=
Πρότυπο:=rn=
Πρότυπο:=ro=
Πρότυπο:=roa-rup=
Πρότυπο:=rom=
Πρότυπο:=ru=
Πρότυπο:=rw=
Πρότυπο:=sa=
Πρότυπο:=sai=
Πρότυπο:=sc=
Πρότυπο:=scn=
Πρότυπο:=sco=
Πρότυπο:=se=
Πρότυπο:=sh=
Πρότυπο:=sk=
Πρότυπο:=sl=
Πρότυπο:=sm=
Πρότυπο:=smi=
Πρότυπο:=sn=
Πρότυπο:=so=
Πρότυπο:=sq=
Πρότυπο:=sr=
Πρότυπο:=srn=
Πρότυπο:=ss=
Πρότυπο:=st=
Πρότυπο:=su=
Πρότυπο:=sv=
Πρότυπο:=sw=
Πρότυπο:=syc=
Πρότυπο:=ta=
Πρότυπο:=te=
Πρότυπο:=tet=
Πρότυπο:=tg=
Πρότυπο:=th=
Πρότυπο:=tk=
Πρότυπο:=tl=
Πρότυπο:=tlh=
Πρότυπο:=tn=
Πρότυπο:=to=
Πρότυπο:=tpi=
Πρότυπο:=tpw=
Πρότυπο:=tr=
Πρότυπο:=ts=
Πρότυπο:=tt=
Πρότυπο:=ty=
Πρότυπο:=ug=
Πρότυπο:=uk=
Πρότυπο:=ur=
Πρότυπο:=uz=
Πρότυπο:=ve=
Πρότυπο:=vec=
Πρότυπο:=vep=
Πρότυπο:=vi=
Πρότυπο:=vls=
Πρότυπο:=vo=
Πρότυπο:=wa=
Πρότυπο:=wen=
Πρότυπο:=wo=
Πρότυπο:=xh=
Πρότυπο:=yi=
Πρότυπο:=yo=
Πρότυπο:=yua=
Πρότυπο:=za=
Πρότυπο:=zh-min-nan=
Πρότυπο:=zh-yue=
Πρότυπο:=zh=
Πρότυπο:=zu=
Πρότυπο:=ΓΛΩΣΣΑ=
Πρότυπο:=αρχ=
Πρότυπο:=γλώσσα=
Πρότυπο:=διεθ=
Πρότυπο:=μσν=
Πρότυπο:=μτγ=
Πρότυπο:=χαρ=
Πρότυπο:πολυ-ουσ
Πρότυπο:προσχέδιο-ετυμ
Πρότυπο:προσχέδιο-ορισμ
  • Βρήκαμε τους τίτλους των σελίδων που συνδέονται σε αυτά. Ο κώδικας:
#!/usr/bin/perl

binmode(STDOUT, ":utf8");
binmode(STDIN, ":utf8");

use encoding(UTF8);
use utf8;

$result=`rm -rf embed_tmp`;
while (<STDIN>) { 
    $page=$_;
    chomp($page);
    print "doing $page\n";
    $resiult=`./getembeddedinallns.sh $page`;
    $result=`cat embed_tmp/*txt  >> all_links.txt`;
    $result=`rm -rf embed_tmp`;
}

print "done!\n";

και

#!/bin/bash

usage() {
  echo "Usage: $0 title"
  echo "where title is the title of the page for which to find transclusions"
  echo 
  echo "For example:"
  echo "$0 'Πρότυπο:ξεν-'";
  exit 1
}

if [ -z "$1"  ]; then
  usage
fi
eititle=`echo "$1" | sed -e 's/ /_/g;'`
tmp="./embed_tmp"
today=`date +"%B-%d-%Y"`
ext="$today"
mkdir -p $tmp
titles="$tmp/titles.$ext"
eicontinue=""

rm -f  $titles.*  

count=1
while [ 1 ]; do

    echo getting embedded titles $count to $count+500

    # επόμενοι 500

    if [ -z "$eicontinue" ];  then
        curl --retry 10 -H 'Expect:' -f "http://el.wiktionary.org/w/api.php?action=query&list=embeddedin&eititle=$eititle&eilimit=500&format=xml&einamespace=0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|100|101" | sed -e 's/>/>\n/g;' > $titles.xml.temp
    else
        curl --retry 10 -H 'Expect:' -f "http://el.wiktionary.org/w/api.php?action=query&list=embeddedin&eititle=$eititle&eicontinue=$eicontinue&eilimit=500&format=xml&einamespace=0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|100|101" | sed -e 's/>/>\n/g;' > $titles.xml.temp
    fi
    if [ $? -ne 0 ]; then
        echo "Error $? from curl, unable to get xml pages, bailing"
        exit 1
    fi
    cat $titles.xml.temp >> $titles.xml
    # get continue param
    # format: <embeddedin eicontinue="500" />
    eicontinue=`grep eicontinue $titles.xml.temp`
    if [ -z "$eicontinue" ]; then
	break;
    else
        eicontinue=`echo $eicontinue | awk -F'"' '{ print $2 }'`
    fi
    sleep 6
    count=$(( $count+500 ))
done

# format <embeddedin ns="0" title="μερικοί" />
cat $titles.xml | grep '<ei page' | awk -F'"' '{ print $6 }'  | sed -e 's/^/[[/g; s/$/]]/g;' > $titles.txt
# done!
echo "done!"
exit 0
  • Ελέγξαμε τις σελίδες και κάναμε τις απαιτούμενες επεξεργασίες.
  • Τελικά, κάναμε την μετακίνηση των προτύπων, χρησιμοποιώντας την παραπάνω λίστα για μετακίνηση. Δεν αφήσαμε ανακατεύθυνση μετά από την μετακίνηση.

Ο κώδικας:


#!/bin/bash

# αλλάξτε τις παρακάτω ρυθμίσεις
#configdone="yes"
reason="μετακίνηση μετά από εφαρμογή του νέου συστήματος"
cookiesfile="elwt-login-cookies.txt"
wiki="el.wiktionary.org"
#όνομα χρήστη, κωδικός πρόσβασης στο wiki
lgname="---"
lgpassword="---"

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 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"`
    if [ "$?" -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
    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