Chris@0
|
1 :- module(jamendo,[
|
Chris@0
|
2 artist/1
|
Chris@0
|
3 , artist_name/2
|
Chris@0
|
4 , artist_dispname/2
|
Chris@0
|
5 , artist_description/2
|
Chris@0
|
6 , artist_genre/2
|
Chris@0
|
7 , artist_country/2
|
Chris@0
|
8 , artist_geo/2
|
Chris@0
|
9 , artist_image/2
|
Chris@0
|
10 , artist_link/2
|
Chris@0
|
11 , artist_homepage/2
|
Chris@0
|
12 , album/1
|
Chris@0
|
13 , album_name/2
|
Chris@0
|
14 , album_description/2
|
Chris@0
|
15 , album_artist/2
|
Chris@0
|
16 , album_genre/2
|
Chris@0
|
17 , album_validationurl/2
|
Chris@0
|
18 , album_publicdate/2
|
Chris@0
|
19 , album_archiveset/2
|
Chris@0
|
20 , album_popularity/2
|
Chris@0
|
21 , album_releasedate/2
|
Chris@0
|
22 , album_link/2
|
Chris@0
|
23 , album_cover/4
|
Chris@0
|
24 , album_p2p/4
|
Chris@0
|
25 , album_tags/2
|
Chris@0
|
26 , album_tag/2
|
Chris@0
|
27 , track/1
|
Chris@0
|
28 , track_name/2
|
Chris@0
|
29 , track_album/2
|
Chris@0
|
30 , track_no/2
|
Chris@0
|
31 , track_lyrics/2
|
Chris@0
|
32 , track_lengths/2
|
Chris@0
|
33 , track_licenseurl/2
|
Chris@0
|
34 , track_link/2
|
Chris@0
|
35 ]).
|
Chris@0
|
36
|
Chris@0
|
37 /**
|
Chris@0
|
38 * A SWI-Prolog module to access Jamendo XML dumps
|
Chris@0
|
39 * Yves Raimond, C4DM, Queen Mary, University of London, 2007
|
Chris@0
|
40 */
|
Chris@0
|
41
|
Chris@0
|
42
|
Chris@0
|
43
|
Chris@0
|
44 %:-import_from(jamendo_xml,parsed_dump/1).
|
Chris@0
|
45
|
Chris@0
|
46 /**
|
Chris@0
|
47 * Jamendo artists
|
Chris@0
|
48 */
|
Chris@0
|
49 artist(Id) :-
|
Chris@0
|
50 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
51 member(element('Artists',_,Artists),NestedElements),
|
Chris@0
|
52 member(Artist,Artists),
|
Chris@0
|
53 Artist=element(artist,ArtistAtt,_),
|
Chris@0
|
54 get_attributes([id],ArtistAtt,[Id]).
|
Chris@0
|
55 artist_name(Id,Name) :-
|
Chris@0
|
56 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
57 member(element('Artists',_,Artists),NestedElements),
|
Chris@0
|
58 member(Artist,Artists),
|
Chris@0
|
59 Artist=element(artist,ArtistAtt,_),
|
Chris@0
|
60 get_attributes([name,id],ArtistAtt,[Name,Id]),
|
Chris@0
|
61 Name\=''.
|
Chris@0
|
62 artist_dispname(Id,DispName) :-
|
Chris@0
|
63 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
64 member(element('Artists',_,Artists),NestedElements),
|
Chris@0
|
65 member(Artist,Artists),
|
Chris@0
|
66 Artist=element(artist,ArtistAtt,ArtistNested),
|
Chris@0
|
67 get_nested_elts([dispname],ArtistNested,[DispName]),
|
Chris@0
|
68 get_attributes([id],ArtistAtt,[Id]),
|
Chris@0
|
69 DispName\=''.
|
Chris@0
|
70 artist_genre(Id,Genre) :-
|
Chris@0
|
71 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
72 member(element('Artists',_,Artists),NestedElements),
|
Chris@0
|
73 member(Artist,Artists),
|
Chris@0
|
74 Artist=element(artist,ArtistAtt,ArtistNested),
|
Chris@0
|
75 get_nested_elts([genre],ArtistNested,[Genre]),
|
Chris@0
|
76 get_attributes([id],ArtistAtt,[Id]),
|
Chris@0
|
77 Genre\=''.
|
Chris@0
|
78 artist_description(Id,Description) :-
|
Chris@0
|
79 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
80 member(element('Artists',_,Artists),NestedElements),
|
Chris@0
|
81 member(Artist,Artists),
|
Chris@0
|
82 Artist=element(artist,ArtistAtt,ArtistNested),
|
Chris@0
|
83 get_nested_elts([description],ArtistNested,[Description]),
|
Chris@0
|
84 get_attributes([id],ArtistAtt,[Id]),
|
Chris@0
|
85 Description\=''.
|
Chris@0
|
86 artist_country(Id,Country) :-
|
Chris@0
|
87 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
88 member(element('Artists',_,Artists),NestedElements),
|
Chris@0
|
89 member(Artist,Artists),
|
Chris@0
|
90 Artist=element(artist,ArtistAtt,_),
|
Chris@0
|
91 get_attributes([country,id],ArtistAtt,[Country,Id]),
|
Chris@0
|
92 Country\=''.
|
Chris@0
|
93 artist_image(Id,Image) :-
|
Chris@0
|
94 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
95 member(element('Artists',_,Artists),NestedElements),
|
Chris@0
|
96 member(Artist,Artists),
|
Chris@0
|
97 Artist=element(artist,ArtistAtt,_),
|
Chris@0
|
98 get_attributes([image,id],ArtistAtt,[Image,Id]),
|
Chris@0
|
99 Image\=''.
|
Chris@0
|
100 artist_geo(Id,GeoString) :-
|
Chris@0
|
101 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
102 member(element('Artists',_,Artists),NestedElements),
|
Chris@0
|
103 member(Artist,Artists),
|
Chris@0
|
104 Artist=element(artist,ArtistAtt,_),
|
Chris@0
|
105 get_attributes([geostr1,id],ArtistAtt,[GeoString,Id]),
|
Chris@0
|
106 GeoString\=''.
|
Chris@0
|
107 artist_link(Id,Link) :-
|
Chris@0
|
108 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
109 member(element('Artists',_,Artists),NestedElements),
|
Chris@0
|
110 member(Artist,Artists),
|
Chris@0
|
111 Artist=element(artist,ArtistAtt,_),
|
Chris@0
|
112 get_attributes([link,id],ArtistAtt,[Link,Id]),
|
Chris@0
|
113 Link\=''.
|
Chris@0
|
114 artist_homepage(Id,HomePage) :-
|
Chris@0
|
115 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
116 member(element('Artists',_,Artists),NestedElements),
|
Chris@0
|
117 member(Artist,Artists),
|
Chris@0
|
118 Artist=element(artist,ArtistAtt,_),
|
Chris@0
|
119 get_attributes([homepage,id],ArtistAtt,[HomePage,Id]),
|
Chris@0
|
120 HomePage\=''.
|
Chris@0
|
121
|
Chris@0
|
122
|
Chris@0
|
123 /**
|
Chris@0
|
124 * Jamendo albums
|
Chris@0
|
125 */
|
Chris@0
|
126 album(Id) :-
|
Chris@0
|
127 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
128 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
129 member(Album,Albums),
|
Chris@0
|
130 Album=element(album,AlbumAtt,_),
|
Chris@0
|
131 get_attributes([id],AlbumAtt,[Id]).
|
Chris@0
|
132 album_artist(Id,ArtistId) :-
|
Chris@0
|
133 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
134 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
135 member(Album,Albums),
|
Chris@0
|
136 Album=element(album,AlbumAtt,_),
|
Chris@0
|
137 get_attributes([artistID,id],AlbumAtt,[ArtistId,Id]),
|
Chris@0
|
138 ArtistId\=''.
|
Chris@0
|
139 album_name(Id,DispName) :-
|
Chris@0
|
140 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
141 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
142 member(Album,Albums),
|
Chris@0
|
143 Album=element(album,AlbumAtt,AlbumNested),
|
Chris@0
|
144 get_nested_elts([dispname],AlbumNested,[DispName]),
|
Chris@0
|
145 get_attributes([id],AlbumAtt,[Id]),
|
Chris@0
|
146 DispName\=''.
|
Chris@0
|
147 album_genre(Id,Genre) :-
|
Chris@0
|
148 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
149 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
150 member(Album,Albums),
|
Chris@0
|
151 Album=element(album,AlbumAtt,AlbumNested),
|
Chris@0
|
152 get_nested_elts([genre],AlbumNested,[Genre]),
|
Chris@0
|
153 get_attributes([id],AlbumAtt,[Id]),
|
Chris@0
|
154 Genre\=''.
|
Chris@0
|
155 album_description(Id,Description) :-
|
Chris@0
|
156 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
157 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
158 member(Album,Albums),
|
Chris@0
|
159 Album=element(album,AlbumAtt,AlbumNested),
|
Chris@0
|
160 get_nested_elts([description],AlbumNested,[Description]),
|
Chris@0
|
161 get_attributes([id],AlbumAtt,[Id]),
|
Chris@0
|
162 Description\=''.
|
Chris@0
|
163 album_validationurl(Id,ValidationURL) :-
|
Chris@0
|
164 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
165 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
166 member(Album,Albums),
|
Chris@0
|
167 Album=element(album,AlbumAtt,_),
|
Chris@0
|
168 get_attributes([validationURL,id],AlbumAtt,[ValidationURL,Id]),
|
Chris@0
|
169 ValidationURL\=''.
|
Chris@0
|
170 album_publicdate(Id,PublicDate) :-
|
Chris@0
|
171 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
172 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
173 member(Album,Albums),
|
Chris@0
|
174 Album=element(album,AlbumAtt,_),
|
Chris@0
|
175 get_attributes([publicDate,id],AlbumAtt,[PublicDate,Id]),
|
Chris@0
|
176 PublicDate\=''.
|
Chris@0
|
177 album_archiveset(Id,ArchiveSet) :-
|
Chris@0
|
178 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
179 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
180 member(Album,Albums),
|
Chris@0
|
181 Album=element(album,AlbumAtt,_),
|
Chris@0
|
182 get_attributes([archiveSet,id],AlbumAtt,[ArchiveSet,Id]),
|
Chris@0
|
183 ArchiveSet\=''.
|
Chris@0
|
184 album_popularity(Id,Popularity) :-
|
Chris@0
|
185 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
186 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
187 member(Album,Albums),
|
Chris@0
|
188 Album=element(album,AlbumAtt,_),
|
Chris@0
|
189 get_attributes([popularity,id],AlbumAtt,[Popularity,Id]),
|
Chris@0
|
190 Popularity\=''.
|
Chris@0
|
191 album_releasedate(Id,ReleaseDate) :-
|
Chris@0
|
192 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
193 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
194 member(Album,Albums),
|
Chris@0
|
195 Album=element(album,AlbumAtt,_),
|
Chris@0
|
196 get_attributes([releaseDate,id],AlbumAtt,[ReleaseDate,Id]),
|
Chris@0
|
197 ReleaseDate\=''.
|
Chris@0
|
198 album_link(Id,Link) :-
|
Chris@0
|
199 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
200 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
201 member(Album,Albums),
|
Chris@0
|
202 Album=element(album,AlbumAtt,_),
|
Chris@0
|
203 get_attributes([link,id],AlbumAtt,[Link,Id]),
|
Chris@0
|
204 Link\=''.
|
Chris@0
|
205 album_cover(Id,Res,No,Cover) :-
|
Chris@0
|
206 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
207 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
208 member(Album,Albums),
|
Chris@0
|
209 Album=element(album,Att,AlbumAtt),
|
Chris@0
|
210 member(id=Id,Att),
|
Chris@0
|
211 member(element('Covers',_,Covers),AlbumAtt),
|
Chris@0
|
212 member(element(cover,[res=Res,no=No],[Cover]),Covers).
|
Chris@0
|
213 album_p2p(Id,AudioEncoding,Network,Link) :-
|
Chris@0
|
214 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
215 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
216 member(Album,Albums),
|
Chris@0
|
217 Album=element(album,Att,AlbumAtt),
|
Chris@0
|
218 member(id=Id,Att),
|
Chris@0
|
219 member(element('P2PLinks',_,P2PLinks),AlbumAtt),
|
Chris@0
|
220 member(element(p2plink,LinkAtt,[Link]),P2PLinks),
|
Chris@0
|
221 member(audioEncoding=AudioEncoding,LinkAtt),
|
Chris@0
|
222 member(network=Network,LinkAtt).
|
Chris@0
|
223 album_tag(Id,Tag) :-
|
Chris@0
|
224 album_tags(Id,Tags),
|
Chris@0
|
225 concat_atom(TagList,' ',Tags),
|
Chris@0
|
226 member(Tag,TagList).
|
Chris@0
|
227 album_tags(Id,Tags) :-
|
Chris@0
|
228 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
229 member(element('Albums',_,Albums),NestedElements),
|
Chris@0
|
230 member(Album,Albums),
|
Chris@0
|
231 Album=element(album,Att,AlbumNested),
|
Chris@0
|
232 get_nested_elts([tags],AlbumNested,[Tags]),
|
Chris@0
|
233 member(id=Id,Att),
|
Chris@0
|
234 Tags\=''.
|
Chris@0
|
235
|
Chris@0
|
236 /**
|
Chris@0
|
237 * Jamendo tracks
|
Chris@0
|
238 */
|
Chris@0
|
239 track(Id) :-
|
Chris@0
|
240 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
241 member(element('Tracks',_,Tracks),NestedElements),
|
Chris@0
|
242 member(Track,Tracks),
|
Chris@0
|
243 Track=element(track,TrackAtt,_),
|
Chris@0
|
244 get_attributes([id],TrackAtt,[Id]).
|
Chris@0
|
245 track_album(Id,AlbumId) :-
|
Chris@0
|
246 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
247 member(element('Tracks',_,Tracks),NestedElements),
|
Chris@0
|
248 member(Track,Tracks),
|
Chris@0
|
249 Track=element(track,TrackAtt,_),
|
Chris@0
|
250 get_attributes([albumID,id],TrackAtt,[AlbumId,Id]),
|
Chris@0
|
251 AlbumId\=''.
|
Chris@0
|
252 track_no(Id,TrackNo) :-
|
Chris@0
|
253 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
254 member(element('Tracks',_,Tracks),NestedElements),
|
Chris@0
|
255 member(Track,Tracks),
|
Chris@0
|
256 Track=element(track,TrackAtt,_),
|
Chris@0
|
257 get_attributes([trackno,id],TrackAtt,[TrackNo,Id]),
|
Chris@0
|
258 TrackNo\=''.
|
Chris@0
|
259 track_name(Id,Name) :-
|
Chris@0
|
260 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
261 member(element('Tracks',_,Tracks),NestedElements),
|
Chris@0
|
262 member(Track,Tracks),
|
Chris@0
|
263 Track=element(track,TrackAtt,TrackNested),
|
Chris@0
|
264 get_attributes([id],TrackAtt,[Id]),
|
Chris@0
|
265 get_nested_elts([dispname],TrackNested,[Name]),
|
Chris@0
|
266 Name\=''.
|
Chris@0
|
267 track_lyrics(Id,Lyrics) :-
|
Chris@0
|
268 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
269 member(element('Tracks',_,Tracks),NestedElements),
|
Chris@0
|
270 member(Track,Tracks),
|
Chris@0
|
271 Track=element(track,TrackAtt,TrackNested),
|
Chris@0
|
272 get_attributes([id],TrackAtt,[Id]),
|
Chris@0
|
273 get_nested_elts([lyrics],TrackNested,[Lyrics]),
|
Chris@0
|
274 Lyrics\=''.
|
Chris@0
|
275 track_lengths(Id,Lengths) :-
|
Chris@0
|
276 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
277 member(element('Tracks',_,Tracks),NestedElements),
|
Chris@0
|
278 member(Track,Tracks),
|
Chris@0
|
279 Track=element(track,TrackAtt,_),
|
Chris@0
|
280 get_attributes([lengths,id],TrackAtt,[Lengths,Id]),
|
Chris@0
|
281 Lengths\=''.
|
Chris@0
|
282 track_licenseurl(Id,LicenseURL) :-
|
Chris@0
|
283 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
284 member(element('Tracks',_,Tracks),NestedElements),
|
Chris@0
|
285 member(Track,Tracks),
|
Chris@0
|
286 Track=element(track,TrackAtt,_),
|
Chris@0
|
287 get_attributes([licenseURL,id],TrackAtt,[LicenseURL,Id]),
|
Chris@0
|
288 LicenseURL\=''.
|
Chris@0
|
289 track_link(Id,Link) :-
|
Chris@0
|
290 parsed_dump([element(_,_,NestedElements)]),
|
Chris@0
|
291 member(element('Tracks',_,Tracks),NestedElements),
|
Chris@0
|
292 member(Track,Tracks),
|
Chris@0
|
293 Track=element(track,TrackAtt,_),
|
Chris@0
|
294 get_attributes([link,id],TrackAtt,[Link,Id]),
|
Chris@0
|
295 Link\=''.
|
Chris@0
|
296
|
Chris@0
|
297 /**
|
Chris@0
|
298 * XML parsing tools
|
Chris@0
|
299 */
|
Chris@0
|
300 get_attributes([],_,[]).
|
Chris@0
|
301 get_attributes([AttName|T1],AttList,[Att|T2]) :-
|
Chris@0
|
302 member(AttName=Att,AttList),
|
Chris@0
|
303 get_attributes(T1,AttList,T2).
|
Chris@0
|
304
|
Chris@0
|
305 get_nested_elts([],_,[]).
|
Chris@0
|
306 get_nested_elts([EltName|T1],NestedElements,[EltText|T2]):-
|
Chris@0
|
307 (member(element(EltName,_,[EltText]),NestedElements);EltText=''),
|
Chris@0
|
308 get_nested_elts(T1,NestedElements,T2).
|