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 ' void caa_imagedata_delete(CaaImageData ImageData) ' Delete a #CaaImageData object. Private Extern caa_imagedata_delete(ImageData 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_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