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