Blamiblog

Descàrrega massiva d’exercicis del Moodle

Posted in Avatars tècnics by blami on 7 Octubre 2010

[20120604] Actualització: pots trobar la darrera versió d’aquest script al github

Doncs mira, que estava fins allà d’haver de descarregar un per un els lliuraments al Moodle dels alumnes i m’he fet un petit script en Python per simplificar-m’ho. És una mica d’anar per casa. Per no tenir, no té ni un control d’errors decent.

En tot cas te’l transcric a sota per si el pots usar.

Fa servir mechanize que potser l’hauràs d’instal·lar al teu sistema per què funcioni. Jo només l’he provat al meu Ubuntu 10.04 però confio en que també funcioni a altres SOs

Bé, si trobes alguna errada (que segur que hi ha) o alguna manera de millorar-lo (que encara és més fàcil de trobar), m’encantarà saber-ho.


#! /usr/bin/python
# encoding: utf-8
# Descr:    Descarrega els fitxers d'un exercici de moodle
#           Requereix el número de l'exercici de la url que mostra el moodle
#
import sys, os
import optparse
import mechanize
import getpass
#
def descarrega(exercici, directori, usuari, password):
    """ descarrega els exercicis de la pàgina a la destinació """
    br = mechanize.Browser()
    # login
    br.open('http://url.del.teu.moodle.org/login/index.php')
    br.select_form(nr=1)
    br.form['username']=usuari
    br.form['password']=password
    br.submit()
    # obtenció de la pàgina amb l'exerici
    br.open('http://url.del.teu.moodle.org/mod/assignment/submissions.php?id=%s'%exercici)
    for l in br.links(url_regex='moddata/assignment'):
        nomfitxer = os.path.basename(l.url)
        dirname = os.path.dirname(l.url)
        numlliurament = os.path.basename(dirname)                   # id del lliurament
        numexercici   = os.path.basename(os.path.dirname(dirname))  # id intern de l'exercici
        fitxer = os.path.join(directori, "%s.%s.%s.%s"%(exercici, numexercici, numlliurament, nomfitxer))
        print "Descarregant el fitxer", fitxer
        f = br.retrieve(l.url)
        os.rename(f[0], fitxer)
#
def main():
    p = optparse.OptionParser(description="Descarrega els fitxers d'un exercici de moodle",
        version="1.1")
    p.add_option("-n", "--numexercici", action="store", help=u"Número identificador de l'exercici", nargs=1, dest="numexercici")
    p.add_option("-d", "--destinacio", action="store", help="Directori on deixar els fitxers resultants. Per defecte cwd", nargs=1, dest="destinacio", default=".")
    p.add_option("-u", "--username", action="store", help="Login de l'usuari", nargs=1, dest="username")
    p.add_option("-p", "--password", action="store", help="Password de l'usuari", nargs=1, dest="password")
    opcions, arguments = p.parse_args()
    if not opcions.numexercici:
        print >> sys.stderr, "Error: Cal indicar el número de l'exercici a descarregar"
        return -1
    if not opcions.username:
        username = raw_input("Usuari")
    else:
        username = opcions.username
    if not opcions.password:
        password = getpass.getpass("password: ")
    else:
        password = opcions.password
    descarrega(opcions.numexercici, opcions.destinacio, username, password)
    return 0
#
if __name__=="__main__":
    sys.exit(main())
Anuncis

4 Respostes

Subscribe to comments with RSS.

  1. pakman said, on 8 Octubre 2010 at 19:44

    Per a un ignorant com jo…
    Quin llenguatge de programació és aquest?
    Quan el sàpigui, potser sí que en sabré trobar les errades… :p

    • blami said, on 8 Octubre 2010 at 23:20

      Ops! Tens raó. M’he descuidat el “detall”. El llenguatge és Python :s

  2. cerratis said, on 12 Octubre 2010 at 19:17

    Impresionante!!!

  3. […] ara que ja tinc la descàrrega massiva d’exercicis del Moodle, m’he volgut fer un nou script per a solucionar una altra de les tasques que em fan perdre […]


Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s

%d bloggers like this: