Scaricare una immagine dal sito "Cover Art Archive" mediante le funzioni esterne della libreria libcoverart

Da Gambas-it.org - Wikipedia.

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


Riferimenti