Workflow semplificato per la cattura di metadati, pagine html (jump off page) e full-text pdf di articoli da journals OJS.
La procedura inizia con un harvesting dei metadati dagli endpoint OAI-PMH. Da ogni singolo record (journal article) vengono estratte le url che lo compongono (jump off page e pdf). Le url vengono successivamente scaricate con wget e salvate in un contenitore WARC. Vengono ulteriormente scaricate anche le pagine interstiziali di ojs per facilitare il ritrovamento dei link ai pdf durante le procedure di replay del warc.
Nota: i journals da archiviare devono essere preventivamente modificati con questa patch per consentire la pubblicazione nei metadati dublincore di ulteriori <dc:identifier>
per ognuno dei full-text dell'articolo. E' una soluzione poco elegante ma necessaria per far fronte alla mancanza di formati di metadati più strutturati in ojs (esempio mpeg21-didl).
Requisiti: python 2.7
, mysql server
, wget-lua
, gnu parallel
.
-
installare le dipendenze python (sickle, sqlalchemy)
$ pip install -r requirements.txt
nota: viene temporaneamente installata una versione patchata del client oaipmh Sickle, in attesa che la modifica venga riportata nel repository ufficiale.
-
creare un database mysql e relativo utente con privilegi
$ mysqladmin create journals $ mysql -e "GRANT ALL PRIVILEGES on journals.* to journals@localhost identified by $PASSWORD"
-
modificare i parametri di connessione al database in
db/connection.py
engine = create_engine('mysql://journals:$PASSWORD@127.0.0.1:3306/journals?charset=utf8')
-
creare le tabelle del database
$ python -c "import db.model"
-
configurare i journals da harvestare
popolare la tabellasites
con i dati dei journals (id del repository, url oaipmh, email di contatto, metadata format, set)esempio:
mysql journals mysql> INSERT INTO sites (name, url, contact, format, sets) VALUES ("unibo.series", "http://series.unibo.it/oai", "email@", "oai_dc", "all");
-
catturare i metadati della rivista
python harvest.py {site.id}
esempio:
$ python harvest.py unibo.series
per lanciare catture multiple in parallelo (es. 10):
$ mysql journals -N -s -e "SELECT name FROM sites" | parallel -j10 python harvest.py {}
-
generare il seed file (viene salvato in
./data/seeds
)python seed.py {site.id}
esempio
$ python seed.py unibo.series
per generarli in parallelo:
$ mysql journals -N -s -e "SELECT name FROM sites" | parallel -j10 python seed.py {}
-
archiviare le url
per la cattura delle pagine web e i relativi full-text pdf è necessario installare wget-lua (istruzioni: linux, osx). lo script
ojs.lua
permette a runtime di aggiungere alle url definite nel seedfile anche le pagine interstiziali di ojs (dove un viewer web visualizza il pdf). Queste pagine sono necessarie per una corretta visualizzazione durante il replay.archive.sh {seedfile}
esempio
$ archive.sh data/seeds/20160504-unibo.series.seeds
in
./data/warc
viene salvato un file WARC contentente le risorse web archiviate.Il file WARC è pronto per essere depositato (ingest) nel sistema di conservazione, dove verrà indicizzato e reso accessibile da un'applicazione di replay di archivi web (openwayback o pywb)