Χρήστης: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