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

Da Gambas-it.org - Wikipedia.
Versione del 3 lug 2024 alle 14:52 di Vuott (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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