Apps Script Tutorial: automatizzare lo scraping di una pagina web

Di - 12 January 2013 - in

Nella quotidiana attività redazionale di Googlab/Amazer, abbiamo spesso necessità di automatizzare compiti noiosi e così, col tempo, è andata a formarsi una base di codice intorno agli spreadsheet che utilizziamo per coordinarci su Google Docs. Oggi pubblichiamo una semplice funzione che pur essendo un caso molto particolare, può fare da template per implementazioni più complesse e specifiche per le vostre necessità.

Questo codice è da utilizzare dentro un trigger e farà fondamentalmente una cosa: prendendo un url da una cella a nostra scelta (nel nostro caso, una cella qualsiasi della colonna 2), accederà alla pagina, ne recupererà informazioni (nel nostro caso il titolo) e le scriverà in un’altra casella, nel nostro caso la prima cella della colonna corrispondente. Questo meccanismo può tornare utile in una marea di contesti: nel nostro caso permette, con un cltr+c/ctrl+v dell’url di una pagina, di aggiungere al documento anche il titolo, che presumibilmente darà un’indicazione dell’argomento della pagina.

Per far eseguire questo codice però dovremo prima creare un trigger e associarlo alla nostra funzione. Nell’editor di Apps Script andiamo quindi al menù Risorse->Tutti i trigger e facciamo Aggiungi nuovo trigger.  Successivamente configuriamolo con le stesse opzioni di onEdit. In questo modo lo script verrà eseguito ad ogni modifica di ogni cella.

 

 

function urlEdit(event){

 var s=SpreadsheetApp.getActiveSheet()
 var r = event.range;
  //Se l'evento è sul foglio che mi interessa e sulla colonna che mi interessa
   if(r.getColumn()==2&&s.getName()=="Mio Foglio")
   {
     //recupero la pagina dal link
    var text=UrlFetchApp.fetch(event.value).getContentText();
     //la parso
     var doc = Xml.parse(text, true);
     //ne recupero il titolo
    var title= doc.html.head.title.getText();

    //e la scrivo a fianco
    s.getRange(r.getRow(),1).setValue(title)

   }
}

Il codice è abbastanza semplice: prima controllo di essere nella colonna che mi interessa, leggo l’url, recupero la pagina e scrivo i dati che mi interessano. Nel nostro caso ci basta il titolo a cui accediamo tramite

doc.html.head.title.getText()

e di conseguenza non abbiamo necessità di implementare una logica per navigare nell’xml. Nel caso di applicazioni più complesse invece, potrebbe rivelarsi necessario dover esplorare il documento, salvato appunto nella variabile doc. Abbiamo pubblicato un esempio semplice in parte per tenerci vicino ad un caso reale e concreto, e in parte per non complicare la vita ai non-programmatori che ptorebbero voler smanettare un po’ con questo esempio senza dover per forza saper programmare.

Leave a Reply

Simone Robutti Articolo scritto da

Laureato in Informatica, specializzato in sviluppo web e comunità virtuali, hardcore gamer, flamer per passione.

Contatta l'autore

Previous post:

Next post: