Χρήστης:AtouBot/getfromtitles.sh
Εμφάνιση
Όνομα εργαλείου: getfromtitles.sh
Περιγραφή:
Αυτό το εργαλείο κατεβάζει σελίδες των οποίων οι τίτλοι βρίσκονται σε αρχείο που έχει ετοιμάσει ο χρήστης. Οι τίτλοι στον κατάλογο μπορούν να έχουν τετράγωνες αγκύλες ( [[ ... ]] ) ή να είναι σκέτο κείμενο. Το αρχείο σελίδων αποθηκεύεται στο "titles_tmp/pages.<ημερομηνία>.xml". Αν ξανατρέξετε το ίδιο εργαλείο την ίδια μέρα, θα διαγραφεί το αρχείο σελίδων και θα δημιουργηθεί καινούριο. Αρχεία που δημιουργήθηκαν άλλες μέρες δεν θα διαγραφούν.
Παράμετροι:
- το όνομα του αρχείου από την οποία το εργαλείο θα διαβάσει τους τίτλους σελίδων
Προϋποθέσεις:
- περιβάλλον unix/linux ή περιβάλλον με τις εντολές date, sed, cat
- η εντολή curl
Σημειώσεις χρήσης:
- Η παράμετρος πρέπει να μπει μέσα σε αποστρόφους στην περίπτωση που το όνομα του αρχείου περιέχει κενό
- Παράδειγμα χρήσης:
bash ./getfromtitles.sh etym_embedded.txt
→ Πίσω στα Εργαλεία |
getfromtitles.sh
[επεξεργασία]#!/bin/bash
usage() {
echo "Usage: $0 listoftitles"
echo "where listoftitles is a file containing the titles of"
echo "the pages you want to retrieve, either with [[ ]] or without."
echo
echo "For example:"
echo "$0 bot-titles.txt"
exit 1
}
if [ -z "$1" ]; then
usage
fi
titlefile="$1"
ext=`date +%m-%d-%Y`
me=`basename $0`
tmp="./titles_tmp"
mkdir -p $tmp
pages="$tmp/pages.$ext"
titles="$tmp/titles.$ext"
updated="$tmp/updated.$ext"
rm -f $titles.* $pages.*
# σελίδες με τους ορισμένους τίτλους
cat $titlefile | sed -e 's/\[\[//g; s/\]\]//g;' > $titles.txt
count=1
while [ 1 ]; do
echo getting pages $count to $count+500
# επόμενες 500
tail -n +$count $titles.txt | head -n 500 > $titles.500.txt
left=`cat $titles.500.txt | wc -l`
if [ $left == "0" ]; then
break;
fi
count=$(( $count+500 ))
curl --retry 10 -H 'Expect:' -f -F "curonly=1" -F "wpDownload=1" -F "pages=<$titles.500.txt" "http://el.wiktionary.org/w/index.php?title=Special:Export&action=submit" > $pages.xml-temp
if [ $? -ne 0 ]; then
echo "Error $? from curl, unable to get xml pages, bailing"
exit 1
fi
if [ -e "$pages.xml" ]; then
mv $pages.xml $pages.xml-old
fi
# put it in front of the older batch, and back into the same filename
# (so most recent revs are at the beginning)
if [ -e "$pages.xml-old" ]; then
cat $pages.xml-temp $pages.xml-old > $pages.xml
else
cat $pages.xml-temp > $pages.xml
fi
sleep 6
done
echo "new pages are in $pages.xml"
echo "done"
exit 0