Scaricare una immagine dal sito "Cover Art Archive" mediante le funzioni esterne della libreria libcoverart
Cover Art Archive [nota 1] è un progetto congiunto tra "Internet Archive " e "MusicBrainz ", il cui obiettivo è rendere le immagini di copertina disponibili per tutti su Internet in modo organizzato e conveniente. [nota 2]
E' possibile scaricare tali immagini attraverso un programma utilizzando le risorse del API di Coverart. A tal fine è necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa "libcoverart.so.1.0.0".
Mostriamo un semplice esempio pratico.
E' opportuno ricordare che al programma bisognerà passare la stringa identificatrice della foto da scaricare. Così se l'indirizzo dell'immagine è https://archive.org/details/mbid-2da72cb7-16d4-4dca-8818-a355b074a977, va precisato che la stringa identificatrice del rilascio nel sito di Cover Art Archive è quella successiva a "mbid-", ossia nel nostro esempio: 2da72cb7-16d4-4dca-8818-a355b074a977 .
Library "libcoverart" ' CaaCoverArt caa_coverart_new(const char *UserAgent) ' Create a new instance of #CaaCoverArt. Private Extern caa_coverart_new(UserAgent As String) As Pointer ' CaaImageData caa_coverart_fetch_front(CaaCoverArt CoverArt, const char *ReleaseID) ' Request the front image for a release. Private Extern caa_coverart_fetch_front(CoverArt As Pointer, ReleaseID As String) As Pointer ' int caa_imagedata_size(CaaImageData ImageData) ' Return the number of bytes in a #CaaImageData object. Private Extern caa_imagedata_size(ImageData As Pointer) As Integer ' unsigned char *caa_imagedata_data(CaaImageData ImageData) ' Return the data in a #CaaImageData object. Private Extern caa_imagedata_data(ImageData As Pointer) As Pointer ' void caa_imagedata_delete(CaaImageData ImageData) ' Delete a #CaaImageData object. Private Extern caa_imagedata_delete(ImageData As Pointer) ' void caa_coverart_delete(CaaCoverArt CoverArt) ' Delete a #CaaCoverArt object. Private Extern caa_coverart_delete(CoverArt As Pointer) Public Sub Main() Dim ca, ci As Pointer Dim id As String Dim qd As Integer Dim st As Stream Dim bb As Byte[] ' Si imposta la stringa identificatrice del rilascio dell'immagine, prescelta, nel sito di "Cover Art Archive": id = "2da72cb7-16d4-4dca-8818-a355b074a977" ca = caa_coverart_new("esempio") If ca = 0 Then Error.Raise("Errore !") ci = caa_coverart_fetch_front(ca, id) If ci = 0 Then Error.Raise("Errore !") qd = caa_imagedata_size(ci) If qd = 0 Then Error.Raise("Errore !") Print "Dimensione dell'immagine: "; qd; " byte" st = Memory caa_imagedata_data(ci) For Read bb = New Byte[qd] ' Con il Metodo ".Read()" il vettore legge e memorizza i dati presenti nell'area di memoria puntata dal Puntatore sopra restituito: bb.Read(st, 0, bb.Count) ' Salva nella cartella /tmp l'immagine scaricata: File.Save("/tmp" &/ id & ".jpg", bb.ToString(0, bb.Count)) ' Libera la memoria precedentemente occupata: st.Close caa_imagedata_delete(ci) caa_coverart_delete(ca) End
Note
[1] http://coverartarchive.org/
[2] https://archive.org/details/coverartarchive