!feat(categories): add 3 categories for artists

- albums: album found
- artists: found the artist, not the album
- notfound: not found on bandcamp (or limited by api)

API on refresh changes.
Use a extern script instead of write it in html page.
This commit is contained in:
rick 2021-09-01 16:00:07 +02:00
parent ad1556dbc0
commit 5e7e5051be
Signed by: Rick
GPG key ID: 2B593F087240EE99
5 changed files with 187 additions and 69 deletions

View file

@ -17,7 +17,7 @@ var MyResp = &RespBandcamp{}
check artist and album check artist and album
items[x].track.album.name et items[x].track.album.artists[0].name items[x].track.album.name et items[x].track.album.artists[0].name
*/ */
func testBandcamp(album string, artist string) BandcampAlbum{ func searchAlbumBandcamp(album string, artist string) BandcampAlbum{
bandcampClient := bandcamp.NewClient() bandcampClient := bandcamp.NewClient()
results, err := bandcampClient.Search(album) results, err := bandcampClient.Search(album)
@ -33,6 +33,22 @@ func testBandcamp(album string, artist string) BandcampAlbum{
} }
} }
func searchArtistBandcamp(artist string) BandcampAlbum {
bandcampClient := bandcamp.NewClient()
results, err := bandcampClient.Search(artist)
if err != nil {
log.Println(err)
return BandcampAlbum{false, ""}
}
if strings.Compare(results[0].Artist, artist) == 0 {
return BandcampAlbum{true, strings.Split(results[0].URL, "/album/")[0]}
} else {
return BandcampAlbum{false, ""}
}
}
/* /*
id de la playlist id de la playlist
*/ */
@ -73,25 +89,41 @@ func getListPlaylist(id string) {
MyResp.Done = 0 MyResp.Done = 0
for i := 0; i < len(playlist.Items); i++ { for i := 0; i < len(playlist.Items); i++ {
tmp = testBandcamp(playlist.Items[i].Track.Album.Name, tmp = searchAlbumBandcamp(playlist.Items[i].Track.Album.Name,
playlist.Items[i].Track.Album.Artists[0].Name) playlist.Items[i].Track.Album.Artists[0].Name)
if tmp.find { if tmp.find {
//fmt.Printf("Find !! url: %s\n", tmp.url) //fmt.Printf("Find !! url: %s\n", tmp.url)
//MyResp.url = append(MyResp.url, tmp.url) //MyResp.url = append(MyResp.url, tmp.url)
//MyResp.url = append (MyResp.url, tmp.url) //MyResp.url = append (MyResp.url, tmp.url)
//MyResp.Add(tmp.url) //MyResp.Add(tmp.url)
MyResp.Add(newUrlBandcamp( MyResp.AddAlbum(newUrlBandcamp(
playlist.Items[i].Track.Album.Artists[0].Name, playlist.Items[i].Track.Album.Artists[0].Name,
playlist.Items[i].Track.Album.Name, playlist.Items[i].Track.Album.Name,
playlist.Items[i].Track.Album.ExternalUrls.Spotify, playlist.Items[i].Track.Album.ExternalUrls.Spotify,
tmp.url)) tmp.url))
//fmt.Printf("tmp %s \n", MyResp.url[0]) //fmt.Printf("tmp %s \n", MyResp.url[0])
//fmt.Printf("len=%d cap=%d %v\n", len(MyResp.url), cap(MyResp.url), MyResp.url) //fmt.Printf("len=%d cap=%d %v\n", len(MyResp.url), cap(MyResp.url), MyResp.url)
} else {
tmp = searchArtistBandcamp(playlist.Items[i].Track.Album.Artists[0].Name)
if tmp.find {
MyResp.AddArtist(newUrlBandcamp(
playlist.Items[i].Track.Album.Artists[0].Name,
playlist.Items[i].Track.Album.Name,
playlist.Items[i].Track.Album.ExternalUrls.Spotify,
tmp.url))
} else {
MyResp.AddNotfound(newUrlWoBandcamp(
playlist.Items[i].Track.Album.Artists[0].Name,
playlist.Items[i].Track.Album.Name,
playlist.Items[i].Track.Album.ExternalUrls.Spotify))
}
} }
if i % 25 == 0 {
MyResp.Done++
if i % 10 == 0 {
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
} }
MyResp.Done++
} }
fmt.Printf("\nFinish\n") fmt.Printf("\nFinish\n")
} }
@ -125,7 +157,9 @@ func getNew(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(MyResp) json.NewEncoder(w).Encode(MyResp)
MyResp.Urls = nil MyResp.Albums = nil
MyResp.Artists = nil
MyResp.Notfound = nil
} }
func main() { func main() {

View file

@ -1,5 +1,5 @@
h1 { h1 {
color: red; color: green;
} }
td, th { td, th {
@ -14,3 +14,7 @@ footer {
display: grid; display: grid;
grid-template-columns: 1fr 1fr 1fr; grid-template-columns: 1fr 1fr 1fr;
} }
.only-artist {
color: red;
}

View file

@ -16,7 +16,8 @@
</div> </div>
<div> <div>
<table id="my-list"> <h2>Albums trouvés</h2>
<table id="found">
<tr> <tr>
<th>Artiste</th> <th>Artiste</th>
<th>Album</th> <th>Album</th>
@ -24,6 +25,25 @@
<th>Bandcamp</th> <th>Bandcamp</th>
</tr> </tr>
</table> </table>
<h2>Artistes trouvés</h2>
<table id="artist-found">
<tr>
<th>Artiste</th>
<th>Album</th>
<th>Spotify</th>
<th>Bandcamp</th>
</tr>
</table>
<h2>Artistes non trouvés</h2>
<table id="notfound">
<tr>
<th>Artiste</th>
<th>Album</th>
<th>Spotify</th>
</tr>
</table>
</div> </div>
<hr /> <hr />
<footer> <footer>
@ -31,60 +51,5 @@
<p>Ce site est en aucun cas affilié avec Bandcamp ou Spotify.</p> <p>Ce site est en aucun cas affilié avec Bandcamp ou Spotify.</p>
</footer> </footer>
</body> </body>
<script> <script src="/script.js"></script>
const spotifyText = document.createTextNode("Spotify");
const bandcampText = document.createTextNode("Bandcamp");
const tab = document.getElementById("my-list");
async function test() {
const data = await fetch('/refresh').then(response => response.json());
if (data != null) {
if (data.urls != null) {
var newRow, artist, album, tmpLink;
for (const elem of data.urls) {
artist = document.createTextNode(elem.artist);
album = document.createTextNode(elem.album);
tmpLink = document.createElement("a");
tmpLink.appendChild(spotifyText.cloneNode());
tmpLink.title = "Lien Spotify";
tmpLink.href = elem.spotifyurl;
/*
let tmp = document.createTextNode(elem);
let newP = document.createElement("p");
newP.appendChild(tmp);
document.getElementById("my-list").appendChild(newP);
*/
newRow = tab.insertRow(-1);
newRow.insertCell(0).appendChild(artist);
newRow.insertCell(1).appendChild(album);
newRow.insertCell(2).appendChild(tmpLink);
tmpLink = document.createElement("a");
tmpLink.appendChild(bandcampText.cloneNode());
tmpLink.title = "Lien Bandcamp";
tmpLink.href = elem.bandcampurl;
newRow.insertCell(3).appendChild(tmpLink);
}
}
document.getElementById("nb-fait").textContent = data.done;
document.getElementById("nb-total").textContent = data.todo;
if (data.done === data.todo) {
document.getElementById("inf-loader").remove();
clearInterval(refreshList);
}
}
}
window.onbeforeunload = function() {
return "Vous perdrez tous les artistes trouvés en rafraichissant la page."
}
const refreshList = setInterval(test, 3000);
</script>
<html> <html>

98
static/script.js Normal file
View file

@ -0,0 +1,98 @@
const spotifyText = document.createTextNode("Spotify");
const bandcampText = document.createTextNode("Bandcamp");
//const tab = document.getElementById("my-list");
async function addCell(id, elem) {
let tab = document.getElementById(id), tmpLink, artist, album, newRow;
artist = document.createTextNode(elem.artist);
album = document.createTextNode(elem.album);
tmpLink = document.createElement("a");
tmpLink.appendChild(spotifyText.cloneNode());
tmpLink.title = "Lien Spotify";
tmpLink.href = elem.spotifyurl;
newRow = tab.insertRow(-1);
newRow.insertCell(0).appendChild(artist);
newRow.insertCell(1).appendChild(album);
newRow.insertCell(2).appendChild(tmpLink);
tmpLink = document.createElement("a");
switch (id) {
case "artist-found":
tmpLink.classList.add("only-artist")
case "found":
tmpLink.appendChild(bandcampText.cloneNode());
tmpLink.title = "Lien Bandcamp";
tmpLink.href = elem.bandcampurl;
newRow.insertCell(3).appendChild(tmpLink);
break;
}
}
async function test() {
const data = await fetch('/refresh').then(response => response.json());
if (data != null) {
document.getElementById("nb-fait").textContent = data.done;
document.getElementById("nb-total").textContent = data.todo;
if (data.albums != null) {
for (const elem of data.albums) {
addCell("found", elem);
}
}
if (data.artists != null) {
for (const elem of data.artists) {
addCell("artist-found", elem);
}
}
if (data.notfound != null) {
for (const elem of data.notfound) {
addCell("notfound", elem);
}
}
/*
if (data.urls != null) {
var newRow, artist, album, tmpLink;
for (const elem of data.urls) {
artist = document.createTextNode(elem.artist);
album = document.createTextNode(elem.album);
tmpLink = document.createElement("a");
tmpLink.appendChild(spotifyText.cloneNode());
tmpLink.title = "Lien Spotify";
tmpLink.href = elem.spotifyurl;
/*
let tmp = document.createTextNode(elem);
let newP = document.createElement("p");
newP.appendChild(tmp);
document.getElementById("my-list").appendChild(newP);
newRow = tab.insertRow(-1);
newRow.insertCell(0).appendChild(artist);
newRow.insertCell(1).appendChild(album);
newRow.insertCell(2).appendChild(tmpLink);
tmpLink = document.createElement("a");
tmpLink.appendChild(bandcampText.cloneNode());
tmpLink.title = "Lien Bandcamp";
tmpLink.href = elem.bandcampurl;
newRow.insertCell(3).appendChild(tmpLink);
}
}
*/
if (data.done === data.todo) {
document.getElementById("inf-loader").remove();
clearInterval(refreshList);
}
}
}
window.onbeforeunload = function() {
return "Vous perdrez tous les artistes trouvés en rafraichissant la page."
}
const refreshList = setInterval(test, 5000);

View file

@ -18,15 +18,32 @@ func newUrlBandcamp(auteur, album, spo, band string) UrlBandcamp {
return UrlBandcamp{Artiste: auteur, Album: album, SpotifyUrl: spo, BandcampUrl: band} return UrlBandcamp{Artiste: auteur, Album: album, SpotifyUrl: spo, BandcampUrl: band}
} }
func newUrlWoBandcamp(auteur, album, spo string) UrlBandcamp {
return UrlBandcamp{Artiste: auteur, Album: album, SpotifyUrl: spo, BandcampUrl: ""}
}
type RespBandcamp struct { type RespBandcamp struct {
Done int `json:"done"` Done int `json:"done"`
Todo int `json:"todo"` Todo int `json:"todo"`
Urls []UrlBandcamp `json:"urls"` Albums []UrlBandcamp `json:"albums"`
Artists []UrlBandcamp `json:"artists"`
Notfound []UrlBandcamp `json:"notfound"`
} }
func (rp *RespBandcamp) Add(tmp UrlBandcamp) []UrlBandcamp { func (rp *RespBandcamp) AddAlbum(tmp UrlBandcamp) []UrlBandcamp {
rp.Urls = append(rp.Urls, tmp) rp.Albums = append(rp.Albums, tmp)
return rp.Urls return rp.Albums
}
func (rp *RespBandcamp) AddArtist(tmp UrlBandcamp) []UrlBandcamp {
rp.Artists = append(rp.Artists, tmp)
return rp.Artists
}
func (rp *RespBandcamp) AddNotfound(tmp UrlBandcamp) []UrlBandcamp {
rp.Notfound = append(rp.Notfound, tmp)
return rp.Notfound
} }
type SpotifyItem struct { type SpotifyItem struct {