Discogs (API use)
Posted: Fri Aug 29, 2025 1:09 am
Copy of a source code I did not test, and I do not understand.
Author : boddhi
Source : https://www.purebasic.fr/french/viewtopic.php?t=19011
Source code split in 5 parts :
Author : boddhi
Source : https://www.purebasic.fr/french/viewtopic.php?t=19011
Source code split in 5 parts :
Code: Select all
EnableExplicit
; ╔═════════════════════════════════════════════════════════════════════════════╗
; ║ STRUCTURES - ENUMERATIONS - CONSTANTES - MACROS - MAPS - VARIABLES GLOBALES ║
; ╚═════════════════════════════════════════════════════════════════════════════╝
;{ ════ PLUGINS ════
;- ════ PLUGINS
UseJPEGImageDecoder()
UsePNGImageDecoder()
;}
;{ ════ STRUCTURES ════
;- ════ STRUCTURES ════
; Structures JSON DISCOGS globales/récurrentes
Structure JSONDISCOGS_URLSPAGINATION ;{
first.s
prev.s
Next.s
last.s
EndStructure ;}
Structure JSONDISCOGS_DONNEESPAGINATION ;{
pages.u
per_page.u
items.u
page.u
urls.JSONDISCOGS_URLSPAGINATION
EndStructure ;}
Structure JSONDISCOGS_PAGINATION ;{
pagination.JSONDISCOGS_DONNEESPAGINATION
EndStructure ;}
Structure JSONDISCOGS_ARTIST ;{
id.l
name.s
anv.s
join.s
role.s
tracks.s
resource_url.s
EndStructure ;}
Structure JSONDISCOGS_TRACK ;{
position.s
type_.s
title.s
duration.s
EndStructure ;}
Structure JSONDISCOGS_IMAGE ;{
type.s
uri.s
resource_url.s
uri150.s
width.u
height.u
EndStructure ;}
Structure JSONDISCOGS_VIDEO ;{
uri.s
title.s
description.s
duration.u
embed.s
EndStructure ;}
Structure JSONDISCOGS_SUBMITTERCONTRIBUTOR ;{
username.s
resource_url.s
EndStructure ;}
Structure JSONDISCOGS_IDENTIFIER ;{
type.s
value.s
description.s
EndStructure ;}
Structure JSONDISCOGS_RATING ;{
count.l
average.f
EndStructure ;}
Structure JSONDISCOGS_COMMUNITY ;{
have.l
want.l
data_quality.s
status.s
submitter.JSONDISCOGS_SUBMITTERCONTRIBUTOR
rating.JSONDISCOGS_RATING
List contributors.JSONDISCOGS_SUBMITTERCONTRIBUTOR()
EndStructure ;}
Structure JSONDISCOGS_STAT ;{
in_wantlist.l
in_collection.l
EndStructure ;}
Structure JSONDISCOGS_STATS ;{
user.JSONDISCOGS_STAT
community.JSONDISCOGS_STAT
EndStructure ;}
Structure JSONDISCOGS_FILTERVALUE ;{
title.s
value.s
count.l
EndStructure ;}
Structure JSONDISCOGS_FILTER ;{
title.s
id.s
allows_multiple_values.a
List values.JSONDISCOGS_FILTERVALUE()
EndStructure ;}
; Structures JSON DISCOGS liées aux recherches
Structure JSONDISCOGS_ARTIST2 ;{ inutilisée
;master_url.s
;master_id.s
uri.s
cover_image.s
thumb.s
title.s
;type.s
id.l
resource_url.s
EndStructure ;}
Structure JSONDISCOGS_ARTISTS ;{ inutilisée
List results.JSONDISCOGS_ARTIST()
EndStructure ;}
;
Structure JSONDISCOGS_GROUPSARTISTBYID ;{
id.l
name.s
resource_url.s
active.s
EndStructure ;}
Structure JSONDISCOGS_ARTISTBYID ;{
id.l
name.s
realname.s
resource_url.s
uri.s
releases_url.s
profile.s
cover_image.s
thumb.s
title.s
data_quality.s
List images.JSONDISCOGS_IMAGE()
List urls.s()
List namevariations.s()
List aliases.JSONDISCOGS_GROUPSARTISTBYID()
List groups.JSONDISCOGS_GROUPSARTISTBYID()
List members.JSONDISCOGS_GROUPSARTISTBYID()
EndStructure ;}
Structure JSONDISCOGS_ARTISTRELEASEBYID ;{
id.l
title.s
type.s
main_release.l
artist.s
role.s
resource_url.s
year.u
thumb.s
status.s
label.s
format.s
;stats()/community()/in_wantlist.l
;stats()/community()/in_collection.l
EndStructure ;}
Structure JSONDISCOGS_ARTISTRELEASESBYID ;{
List releases.JSONDISCOGS_ARTISTRELEASEBYID()
EndStructure
;}
Structure JSONDISCOGS_RELEASELABELCOMPANY ;{
id.l
name.s
catno.s
entity_type.s
entity_type_name.s
resource_url.s
;list series.?
EndStructure ;}
Structure JSONDISCOGS_RELEASEFORMAT ;{
name.s
qty.s
List descriptions.s()
EndStructure ;}
Structure JSONDISCOGS_RELEASEBYID ;{
id.l
status.s
year.u
resource_url.s
uri.s
title.s
artists_sort.s
country.s
released.s
released_formatted.s
notes.s
thumb.s
format_quantity.l
date_added.s
date_changed.s
num_for_sale.l
lowest_price.f
estimated_weight.u
blocked_from_sale.s
community.JSONDISCOGS_COMMUNITY
List genres.s()
List styles.s()
List artists.JSONDISCOGS_ARTIST()
List extraartists.JSONDISCOGS_ARTIST()
List formats.JSONDISCOGS_RELEASEFORMAT()
List labels.JSONDISCOGS_RELEASELABELCOMPANY()
List companies.JSONDISCOGS_RELEASELABELCOMPANY()
List identifiers.JSONDISCOGS_IDENTIFIER()
List videos.JSONDISCOGS_VIDEO()
List tracklist.JSONDISCOGS_TRACK()
List images.JSONDISCOGS_IMAGE()
EndStructure ;}
Structure JSONDISCOGS_MASTERBYID ;{
id.l
title.s
main_release.l
most_recent_release.l
resource_url.s
uri.s
versions_url.s
main_release_url.s
most_recent_release_url.s
num_for_sale.l
lowest_price.f
year.u
data_quality.s
List genres.s()
List styles.s()
List artists.JSONDISCOGS_ARTIST()
List images.JSONDISCOGS_IMAGE()
List tracklist.JSONDISCOGS_TRACK()
List videos.JSONDISCOGS_VIDEO()
EndStructure ;}
Structure JSONDISCOGS_FILTERS ;{
Map format.s()
Map label.u()
Map country.u()
Map released.u()
EndStructure ;}
Structure JSONDISCOGS_AVAILABLEFILTERS ;{
applied.JSONDISCOGS_FILTERS
available.JSONDISCOGS_FILTERS
EndStructure ;}
Structure JSONDISCOGS_MASTERVERSION ;{
id.l
label.s
country.s
title.s
format.s
catno.s
released.s
status.s
resource_url.s
thumb.s
stats.JSONDISCOGS_STATS
List major_formats.s()
EndStructure ;}
Structure JSONDISCOGS_MASTERVERSIONSBYID ;{
filters.JSONDISCOGS_AVAILABLEFILTERS
List filter_facets.JSONDISCOGS_FILTER()
List versions.JSONDISCOGS_MASTERVERSION()
EndStructure ;}
Structure JSONDISCOGS_SEARCHRESULTS ;{
id.l
type.s
title.s
year.s
country.s
master_id.l
master_url.s
catno.s
uri.s
thumb.s
cover_image.s
resource_url.s
List format.s()
List label.s()
List genre.s()
List style.s()
List barcode.s()
;Map community.l()
;format_quantity.l
EndStructure ;}
Structure JSONDISCOGS_SEARCH ;{
List results.JSONDISCOGS_SEARCHRESULTS()
EndStructure ;}
;}
;{ ════ ENUMERATIONS ════
;- ════ ENUMERATIONS ════
Runtime Enumeration Fenetres ;{
#FEN_RECHERCHEDB
#FEN_RESULTATS
EndEnumeration ;}
Runtime Enumeration Gadgets ;{ Gadgets fenêtre principale
#GAD_FP_CD_TYPERECHERCHE
#GAD_FP_LS_TYPESRECHERCHE
#GAD_FP_CD_PARAMETRESRECHERCHE
#GAD_FP_BM_PARAMETRES
#GAD_FP_CT_PARAMETRESARTISTE
#GAD_FP_BG_PARAMETRESARTISTE
#GAD_FP_LIB_PARAMARTISTE_IDARTISTE
#GAD_FP_CP_PARAMARTISTE_IDARTISTE
#GAD_FP_CT_PARAMETRESPARUTIONSARTISTE
#GAD_FP_BG_PARAMETRESPARUTIONSARTISTE
#GAD_FP_LIB_PARAMPARUTIONSARTISTE_IDARTISTE
#GAD_FP_CP_PARAMPARUTIONSARTISTE_IDARTISTE
#GAD_FP_LIB_PARAMPARUTIONSARTISTE_TRI
#GAD_FP_LS_PARAMPARUTIONSARTISTE_TRI
#GAD_FP_LIB_PARAMPARUTIONSARTISTE_ORDRETRI
#GAD_FP_LS_PARAMPARUTIONSARTISTE_ORDRETRI
#GAD_FP_LIB_PARAMPARUTIONSARTISTE_ITEMSPAGE
#GAD_FP_LS_PARAMPARUTIONSARTISTE_ITEMSPAGE
#GAD_FP_CT_PARAMETRESPARUTION
#GAD_FP_BG_PARAMETRESPARUTION
#GAD_FP_LIB_PARAMPARUTION_IDPARUTION
#GAD_FP_CP_PARAMPARUTION_IDPARUTION
#GAD_FP_LIB_PARAMPARUTION_MONNAIE
#GAD_FP_LS_PARAMPARUTION_MONNAIE
#GAD_FP_CT_PARAMETRESMASTER
#GAD_FP_BG_PARAMETRESMASTER
#GAD_FP_LIB_PARAMMASTER_IDMASTER
#GAD_FP_CP_PARAMMASTER_IDMASTER
#GAD_FP_CT_PARAMETRESVERSIONSMASTER
#GAD_FP_BG_PARAMETRESVERSIONSMASTER
#GAD_FP_LIB_PARAMVERSIONSMASTER_IDMASTER
#GAD_FP_CP_PARAMVERSIONSMASTER_IDMASTER
#GAD_FP_LIB_PARAMVERSIONSMASTER_FORMAT
#GAD_FP_CP_PARAMVERSIONSMASTER_FORMAT
#GAD_FP_LIB_PARAMVERSIONSMASTER_ANNEE
#GAD_FP_CP_PARAMVERSIONSMASTER_ANNEE
#GAD_FP_LIB_PARAMVERSIONSMASTER_LABEL
#GAD_FP_CP_PARAMVERSIONSMASTER_LABEL
#GAD_FP_LIB_PARAMVERSIONSMASTER_PAYS
#GAD_FP_CP_PARAMVERSIONSMASTER_PAYS
#GAD_FP_LIB_PARAMVERSIONSMASTER_TRI
#GAD_FP_LS_PARAMVERSIONSMASTER_TRI
#GAD_FP_LIB_PARAMVERSIONSMASTER_ORDRETRI
#GAD_FP_LS_PARAMVERSIONSMASTER_ORDRETRI
#GAD_FP_LIB_PARAMVERSIONSMASTER_ITEMSPAGE
#GAD_FP_LS_PARAMVERSIONSMASTER_ITEMSPAGE
#GAD_FP_CT_PARAMETRESRECHERCHEGENERALE
#GAD_FP_BG_PARAMETRESRECHERCHEGENERALE
#GAD_FP_LIB_PARAMRECHERCHEGALE_TEXTE
#GAD_FP_CP_PARAMRECHERCHEGALE_TEXTE
#GAD_FP_LIB_PARAMRECHERCHEGALE_TYPE
#GAD_FP_LS_PARAMRECHERCHEGALE_TYPE
#GAD_FP_LIB_PARAMRECHERCHEGALE_ARTISTETITRE
#GAD_FP_CP_PARAMRECHERCHEGALE_ARTISTETITRE
#GAD_FP_LIB_PARAMRECHERCHEGALE_TITREPARUTION
#GAD_FP_CP_PARAMRECHERCHEGALE_TITREPARUTION
#GAD_FP_LIB_PARAMRECHERCHEGALE_ARTISTE
#GAD_FP_CP_PARAMRECHERCHEGALE_ARTISTE
#GAD_FP_LIB_PARAMRECHERCHEGALE_ARTISTEVARIATION
#GAD_FP_CP_PARAMRECHERCHEGALE_ARTISTEVARIATION
#GAD_FP_LIB_PARAMRECHERCHEGALE_TITREPISTE
#GAD_FP_CP_PARAMRECHERCHEGALE_TITREPISTE
#GAD_FP_LIB_PARAMRECHERCHEGALE_CREDIT
#GAD_FP_CP_PARAMRECHERCHEGALE_CREDIT
#GAD_FP_LIB_PARAMRECHERCHEGALE_FORMAT
#GAD_FP_CP_PARAMRECHERCHEGALE_FORMAT
#GAD_FP_LIB_PARAMRECHERCHEGALE_ANNEE
#GAD_FP_CP_PARAMRECHERCHEGALE_ANNEE
#GAD_FP_LIB_PARAMRECHERCHEGALE_GENRE
#GAD_FP_CP_PARAMRECHERCHEGALE_GENRE
#GAD_FP_LIB_PARAMRECHERCHEGALE_STYLE
#GAD_FP_CP_PARAMRECHERCHEGALE_STYLE
#GAD_FP_LIB_PARAMRECHERCHEGALE_LABEL
#GAD_FP_CP_PARAMRECHERCHEGALE_LABEL
#GAD_FP_LIB_PARAMRECHERCHEGALE_PAYS
#GAD_FP_CP_PARAMRECHERCHEGALE_PAYS
#GAD_FP_LIB_PARAMRECHERCHEGALE_NOCATALOGUE
#GAD_FP_CP_PARAMRECHERCHEGALE_NOCATALOGUE
#GAD_FP_LIB_PARAMRECHERCHEGALE_CODEBARRE
#GAD_FP_CP_PARAMRECHERCHEGALE_CODEBARRE
#GAD_FP_LIB_PARAMRECHERCHEGALE_DEPOSANT
#GAD_FP_CP_PARAMRECHERCHEGALE_DEPOSANT
#GAD_FP_LIB_PARAMRECHERCHEGALE_CONTRIBUTEUR
#GAD_FP_CP_PARAMRECHERCHEGALE_CONTRIBUTEUR
#GAD_FR_CC_RECHERCHEEXACTE
#GAD_FP_LIB_PARAMRECHERCHEGALE_ITEMSPAGE
#GAD_FP_LS_PARAMRECHERCHEGALE_ITEMSPAGE
#GAD_FP_LIB_ELEMENTS
#GAD_FP_LIB_NBELEMENTS
#GAD_FP_LIB_PAGE
#GAD_FP_LIB_NBPAGES
#GAD_FP_BT_RECHERCHER
#GAD_FP_BP_JAUGE
EndEnumeration ;}
Runtime Enumeration Gadgets ;{ Gadgets fenêtre résultats
#GAD_FR_BG_RESULTATS
#GAD_FR_BG_GRILLE1
#GAD_FR_BG_GRILLE2
#GAD_FR_BG_GRILLE3
#GAD_FR_LIB_IDOBJET
#GAD_FR_CP_IDOBJET
#GAD_FR_LIB_LIENURI
#GAD_FR_CP_LIENURI
#GAD_FR_BT_LIENURI
#GAD_FR_LIB_LIENURL
#GAD_FR_CP_LIENURL
#GAD_FR_BT_LIENURL
#GAD_FR_LS_IMAGES
#GAD_FR_BT_LIENIMAGE
#GAD_FR_LIB_LIBELLE01
#GAD_FR_LIB_LIBELLE02
#GAD_FR_LIB_LIBELLE03
#GAD_FR_LIB_LIBELLE04
#GAD_FR_LIB_LIBELLE05
#GAD_FR_LIB_LIBELLE06
#GAD_FR_LIB_LIBELLE07
#GAD_FR_LIB_LIBELLE08
#GAD_FR_LIB_LIBELLE09
#GAD_FR_LIB_LIBELLE10
#GAD_FR_LIB_LIBELLE11
#GAD_FR_LIB_LIBELLE12
#GAD_FR_LIB_LIBELLE13
#GAD_FR_LIB_LIBELLE14
#GAD_FR_LIB_LIBELLE15
#GAD_FR_LIB_LIBELLE16
#GAD_FR_LIB_LIBELLE17
#GAD_FR_LIB_LIBELLE18
#GAD_FR_LIB_LIBELLE19
#GAD_FR_LIB_LIBELLE20
#GAD_FR_CP_CHAMP01
#GAD_FR_CP_CHAMP02
#GAD_FR_CP_CHAMP03
#GAD_FR_CP_CHAMP04
#GAD_FR_CP_CHAMP05
#GAD_FR_CP_CHAMP06
#GAD_FR_CP_CHAMP07
#GAD_FR_CP_CHAMP08
#GAD_FR_CP_CHAMP09
#GAD_FR_CP_CHAMP10
#GAD_FR_BT_BOUTON01
#GAD_FR_BT_BOUTON02
#GAD_FR_BT_BOUTON03
#GAD_FR_BT_BOUTON04
#GAD_FR_BT_BOUTON05
#GAD_FR_BT_BOUTON06
#GAD_FR_LS_LISTEVUE01
#GAD_FR_LS_LISTEVUE02
#GAD_FR_LS_LISTEVUE03
#GAD_FR_LS_LISTEVUE04
#GAD_FR_LS_LISTEVUE05
#GAD_FR_LS_LISTEICONES01
#GAD_FR_LS_LISTEICONES02
#GAD_FR_LS_LISTEICONES03
#GAD_FR_LS_LISTEICONES04
#GAD_FR_LS_LISTEICONES05
#GAD_FR_LS_LISTEICONES06
#GAD_FR_LS_LISTEICONES07
#GAD_FR_LS_LISTEICONES08
#GAD_FR_ED_EDITEUR01
#GAD_FR_IMG_IMAGE01
#GAD_FR_IMG_IMAGE02
EndEnumeration ;}
Enumeration XML ;{
#ARBRE_XML
EndEnumeration ;}
Enumeration DialoguesXML ;{
#XML_FENPRINCIPALE
#XML_FENRESULTATS
EndEnumeration ;}
Enumeration JSON ;{
#JSON
EndEnumeration ;}
Enumeration Images ;{
#IMG_MINIATURE
#IMG_POCHETTE
#IMG_DISCOGS
#IMG_LECTUREVIDEO
EndEnumeration ;}
;}
;{ ════ CONSTANTES ════
;- ════ CONSTANTES ════
#DISCOGSCHEMINHTTP="https://www.discogs.com/"
#DISCOGSCHEMINAPI="https://api.discogs.com/"
#DISCOGSCHEMINBASEAPI=#DISCOGSCHEMINAPI+"database/"
#DISCOGSCLE=""
#DISCOGSCLESECRETE=""
#SEPCHAMPS=" | "
#TITREBOITEDIALOGUE="Recherche de données DISCOGS"
#TITREFENETRERESULTATS="Résultats de la recherche DISCOGS"
CompilerIf #DISCOGSCHEMINHTTP="" Or #DISCOGSCHEMINAPI=""
CompilerError "Vous devez définir vos clés DISCOGS !"
End
CompilerEndIf
;}
;{ ════ MACROS ════
; -════ MACROS ════
Macro Mc_ClesDISCOGS()
"&key="+#DISCOGSCLE+"&secret="+#DISCOGSCLESECRETE
EndMacro
Macro Mc_FormatageXML(ArgChaine)
EscapeString(ArgChaine,#PB_String_EscapeXML)
EndMacro
Macro Mc_DeformatageXML(ArgChaine)
UnescapeString(ArgChaine,#PB_String_EscapeXML)
EndMacro
Macro Mc_FormatageChaineRecherche(ArgChaine)
ReplaceString(Trim(ArgChaine),Chr(32),"+")
EndMacro
Macro Mc_FormatageMessage(ArgChaine)
StringField(StringField(ArgChaine,2,"message"+Chr(34)+": "),1,"}")
EndMacro
;}