Per maggiori dettagli
Transcript
Per maggiori dettagli
G2Music Gestione Avanzata dei Dati Giuseppe Pietravalle, Giuseppe Santaniello, Marco Mannara IL PROBLEMA Spesso capita di ascoltare una canzone, di volerne leggere il testo e di volerne conoscere maggiori dettagli (album di appartenenza, copertina, anno di pubblicazione) oppure avere informazioni sulla discografia di un artista o semplicemente ascoltare la propria canzone preferita. 2 G2MUSIC L’applicazione consente di effettuare vari tipi di ricerche: • per artista, in questo caso viene mostrata la discografia in ordine cronologico e la lista delle canzoni più popolari; • per canzone, viene mostrata una lista di canzoni con il titolo inserito; • per artista e canzone, viene visualizzato il testo, il video e le informazioni relative alla canzone. 3 ARCHITETTURA MEDIATOR User Mediator Wrapper MusixMatch Wrapper LastFm Wrapper LyricWikia Wrapper YouTube Wrapper GoogleImage FONTI Fonte Tipo Grado Volatilità Musixmatch SitoWeb Con cambi periodici YouTube API Con cambi periodici Google Image API Con cambi periodici LastFm API Con cambi periodici Lyric Wikia API Con cambi periodici 5 SCHEMA DATALOG • MusixMatch (Artista, Canzone, Testo, ListaCanzoni) • YouTube (Artista, Canzone, Video) • LastFm (Artista, Canzone, TitoloAlbum, Copertina, Durata,CanzoniAlbum) • LyricWikia (Artista, Discografia) • GoogleImage (Artista, Foto) 6 WRAPPERS I wrappers necessari per lo sviluppo del progetto sono cinque: • Wrapper MusixMatch • Wrapper LastFm • Wrapper LyricWikia • Wrapper YouTube • Wrapper GoogleImage 7 WRAPPER MUSIXMATCH Viene utilizzato per recuperare: il testo di una canzone, la lista delle canzoni popolari di un artista e delle canzoni nel cui titolo appare una determinata parola scelta dall’utente. Si accede a queste informazioni con la tecnica dello scraping. XPath Risultato //div[@id=‘lyrics’] Testo canzone //ul[@class='tracks list’]//h2/a //ul[@class='tracks list’]//h3 Lista delle canzoni popolari di un determinato artista //ul[@class='tracks list’]//h2/a //ul[@class='tracks list’]//h3 Lista delle canzoni nel cui titolo compare una determinata parola 8 SCRAPING • file_get_contents(): permette di acquisire e memorizzare in una variabile l'intero sorgente di una pagina web. • DOMDocument(): Rappresenta un intero documento HTML o XML; serve come radice dell'albero del documento. • loadHTML($var): carica l'HTML da una stringa • Per valutare un'espressione XPath viene definito un oggetto DOMXPath e utilizzato il metodo query() con l'espressione desiderata. 9 WRAPPER LASTFM Viene utilizzato per recuperare le informazioni relative ad una determinata canzone (durata, titolo e copertina dell’album) e per visualizzare la lista delle canzoni di un album. • Per ottenere i dati relativi alla canzone cercata, viene effettuata una richiesta alle API di LastFm, in particolare si utilizza il metodo track.getInfo: track.getInfo&api_key=YOUR_API_KEY&artist=ARTIST_NAME&track=TRACK_NAME • Per ottenere la lista delle canzoni di un album, si è utilizzato il metodo album.getInfo: album.getInfo&api_key=YOUR_API_KEY&artist=ARTIST_NAME&album=ALBUM_NAME 10 WRAPPER LASTFM Entrambi i metodi restituiscono un documento XML dal quale estrarre le informazioni di interesse utilizzando il linguaggio XPath. XPath Risultato //album/title Titolo di un album //album/image[@size='medium'] Copertina album //track/duration Durata canzone //album/tracks/track/name Lista canzoni di un album 11 WRAPPER LYRICWIKIA Viene utilizzato per recuperare la discografia di un artista. Si effettua una richiesta alle API nel seguente modo: http://lyrics.wikia.com/api.php?artist=ARTIST_NAME&fmt=xml Il risultato è un documento XML da cui vengono estratte informazioni utilizzando il linguaggio XPath. XPath Risultato //albums//album Titolo di un album //albums//songs Lista canzoni di un album //albums//year Anno di pubblicazione album 12 WRAPPER YOUTUBE Viene utilizzato per visualizzare il video di una canzone. In particolare, si sfruttano le YouTube Data API per ottenere l’id del video relativo alla canzone che si sta cercando e le YouTube Player API per la visualizzazione del video. YouTube Data API 13 YOUTUBE PLAYER API Il codice JavaScript mostrato serve per la creazione, la gestione delle funzionalità e per impostare la dimensione del player YouTube. 14 WRAPPER GOOGLEIMAGE Viene utilizzato per visualizzare la foto di un artista interrogando le Google Image API. https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=ARTIST_NAME Il risultato è un file JSON da cui si ottiene il link alla foto dell’artista. 15 SCHEMA GLOBALE • Canzone (A, T, Testo,Video,TitoloAlbum, Copertina, Durata): Testo, Video, Titolo_album, Copertina e Durata della canzone dal titolo T scritta dall’artista A • Discografia (A, ListaAlbum,Foto): ListaAlbum e Foto dell’artista A • Canzoni (T, ListaCanzoni): ListaCanzoni dal titolo T 16 QUERY SULLO SCHEMA GLOBALE • q1(Testo,Video,TitoloAlbum, Copertina, Durata): Canzone(X,Y,Testo,Video,TitoloAlbum, Copertina, Durata) • q2(ListaAlbum,Foto): Discografia(X,ListaAlbum,Foto) • q3(ListaCanzoni): Canzoni(Titolo,ListaCanzoni) 17 GAV mapping GLOBAL-AS-VIEW Canzone(A, T, Testo,Video,TitoloAlbum, Copertina, Durata) ⊇ MusixMatch (A, T, Testo, ListaCanzoni), YouTube (A, T, Video), LastFm (A, T, TitoloAlbum, Copertina, Durata,CanzoniAlbum) Riformulazione query q1 q’1(Testo,Video, TitoloAlbum,Copertina,Durata): MusixMatch( X, Y, Testo, _ ), YouTube (X, Y, Video), LastFm (X, Y, TitoloAlbum, Copertina, Durata) 18 GLOBAL-AS-VIEW GAV mapping Discografia (A, Discografia,Foto) LyricWikia ⊇ (A, Discografia), GoogleImage (A, Foto) Riformulazione query q2 q’2(Discografia,Foto): LyricWikia (A, Discografia), GoogleImage (A, Foto) 19 GLOBAL-AS-VIEW GAV mapping Canzoni(T,ListaCanzoni) ⊇ MusixMatch (Artista, T, Testo, ListaCanzoni) Riformulazione query q3 q’3(T,ListaCanzoni): MusixMatch ( _ , T, _ , ListaCanzoni) 20 LOCAL-AS-VIEW • MusixMatch (A, T, Testo, ListaCanzoni) ⊆ Canzone(A, T, Testo,Video,TitoloAlbum, Copertina, Durata), Canzoni(T, ListaCanzoni) • YouTube (A, T, Video) ⊆ Canzone(A, T, Testo,Video,TitoloAlbum, Copertina, Durata) • LastFm (A, T, TitoloAlbum, Copertina, Durata) ⊆ Canzone(A, T, Testo,Video,TitoloAlbum, Copertina, Durata) • LyricWikia (A, Discografia) ⊆ Discografia (A, Discografia, Foto) • GoogleImage (A, Foto) ⊆ Discografia (A, Discografia, Foto) 21 • • BUCKET E RIFORMULAZIONE Q1 q1(Testo,Video,TitoloAlbum, Copertina, Durata): Canzone(X,Y,Testo,Video,TitoloAlbum, Copertina, Durata) X=Artista Y=Titolo Bucket ( Canzone(X, Y, Testo,Video,TitoloAlbum, Copertina, Durata))= { MusixMatch (X, Y, Testo, ListaCanzoni), YouTube (X, Y, Video), LastFm (X, Y, TitoloAlbum, Copertina, Durata) } • r1(Testo,Video,TitoloAlbum, Copertina, Durata): MusixMatch (X, Y, Testo, ListaCanzoni) • Exp(r1(Testo,Video,TitoloAlbum, Copertina, Durata))= Canzone(X, Y, Testo, Video, TitoloAlbum, Copertina, Durata) Exp(r1) ⊆ q1 BUCKET E RIFORMULAZIONE Q2 • q2(ListaAlbum,Foto): Discografia(X,ListaAlbum,Foto) • Bucket ( Discografia(X, ListaAlbum, Foto))= { LyricWikia (X, ListaAlbum), GoogleImage (X, Foto) } • r2(ListaAlbum, Foto): LyricWikia (X, ListaAlbum) • Exp(r2(ListaAlbum, Foto))= Discografia(X, ListaAlbum, Foto) Exp(r2) ⊆ q2 23 BUCKET E RIFORMULAZIONE Q3 • q3(ListaCanzoni): Canzoni(Titolo,ListaCanzoni) • Bucket ( Canzoni(Titolo,ListaCanzoni))= { MusixMatch (Artista, Titolo, Testo, ListaCanzoni) } • r3(ListaCanzoni): MusixMatch (Artista, Titolo, Testo, ListaCanzoni) • Exp(r3(ListaCanzoni))= Canzoni(Titolo,ListaCanzoni) Exp(r3) ⊆ q3 24 TECNOLOGIE UTILIZZATE • Eclipse Luna IDE è un ambiente di sviluppo integrato multi-linguaggio e multipiattaforma. • PHP è un linguaggio di programmazione interpretato, originariamente concepito per la programmazione di pagine web dinamiche. Attualmente è utilizzato soprattutto per sviluppare applicazioni web lato server. Con il rilascio della versione 5, PHP dispone di un solido modello OOP. • GitHub è un servizio web di hosting per lo sviluppo di progetti software. Può essere utilizzato anche per la condivisione e la modifica di file. 25 TECNOLOGIE UTILIZZATE • JavaScript è un linguaggio di scripting orientato agli oggetti e agli eventi utilizzato nella programmazione Web lato client. • jQuery è una libreria di funzioni Javascript per le applicazioni web, che si propone come obiettivo quello di semplificare la manipolazione, la gestione degli eventi e l'animazione delle pagine HTML. • HTML5 è un linguaggio di markup per la strutturazione delle pagine web. • CSS è un linguaggio usato per definire la formattazione di documenti HTML. 26 TECNOLOGIE UTILIZZATE • XPath è un linguaggio parte della famiglia XML che permette di individuare i nodi all'interno di un documento XML. • XML è un linguaggio di markup, ovvero un linguaggio marcatore basato su un meccanismo sintattico che consente di definire e controllare il significato degli elementi contenuti in un documento o in un testo. • JSON è un formato adatto per lo scambio dei dati in applicazioni clientserver. 27