From e308cca48ccbde5a3ea4025f2335f3c85094c316 Mon Sep 17 00:00:00 2001 From: Dim145 Date: Fri, 2 Apr 2021 00:22:35 +0200 Subject: [PATCH] Ajout d'une base pour rechercher sur le web avec une API open-source --- Files_renamer.iml | 1 + pom.xml | 6 + .../metier/types/series/Serie.java | 9 ++ .../java/renameFiles/metier/web/Serie.java | 44 ++++++ .../renameFiles/metier/web/WebInfoHelper.java | 133 ++++++++++++++++++ 5 files changed, 193 insertions(+) create mode 100644 src/main/java/renameFiles/metier/web/Serie.java create mode 100644 src/main/java/renameFiles/metier/web/WebInfoHelper.java diff --git a/Files_renamer.iml b/Files_renamer.iml index 095dbba..e865d30 100644 --- a/Files_renamer.iml +++ b/Files_renamer.iml @@ -32,5 +32,6 @@ + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2da3395..5984c1c 100644 --- a/pom.xml +++ b/pom.xml @@ -66,5 +66,11 @@ 4.13.1 test + + + com.google.code.gson + gson + 2.8.6 + \ No newline at end of file diff --git a/src/main/java/renameFiles/metier/types/series/Serie.java b/src/main/java/renameFiles/metier/types/series/Serie.java index b63b2ae..6062b5c 100644 --- a/src/main/java/renameFiles/metier/types/series/Serie.java +++ b/src/main/java/renameFiles/metier/types/series/Serie.java @@ -2,6 +2,7 @@ import renameFiles.ihm.dialogs.DialogAvancement; import renameFiles.metier.types.ListeInterface; +import renameFiles.metier.web.WebInfoHelper; import java.io.File; import java.util.ArrayList; @@ -102,6 +103,9 @@ public String traitement(DialogAvancement dialog) this.setNbMaxSaisonAllSaison(); + + WebInfoHelper.selectInfosTests(this); + for (Saison s : listSaison) { s.setRoundEpisodeAllEpisode(); @@ -145,4 +149,9 @@ public int hashCode() { return Objects.hash(serieName); } + + public String getSerieName() + { + return serieName; + } } diff --git a/src/main/java/renameFiles/metier/web/Serie.java b/src/main/java/renameFiles/metier/web/Serie.java new file mode 100644 index 0000000..db85fef --- /dev/null +++ b/src/main/java/renameFiles/metier/web/Serie.java @@ -0,0 +1,44 @@ +package renameFiles.metier.web; + +import java.net.URI; +import java.util.Date; + +public class Serie +{ + private int id; + private URI url; + private String name; + private String type; + private Date premiered; + + public int getId() + { + return id; + } + + public URI getUrl() + { + return url; + } + + public String getName() + { + return name; + } + + public String getType() + { + return type; + } + + public Date getPremiered() + { + return premiered; + } + + @Override + public String toString() + { + return "Serie{" + "id=" + id + ", url='" + url + '\'' + ", name='" + name + '\'' + ", type='" + type + '\'' + ", premiered='" + premiered + '\'' + '}'; + } +} diff --git a/src/main/java/renameFiles/metier/web/WebInfoHelper.java b/src/main/java/renameFiles/metier/web/WebInfoHelper.java new file mode 100644 index 0000000..1212b38 --- /dev/null +++ b/src/main/java/renameFiles/metier/web/WebInfoHelper.java @@ -0,0 +1,133 @@ +package renameFiles.metier.web; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class WebInfoHelper +{ + /* + %% = series ID + %s = season number + %e = episode number + */ + private static final String BASE_SEARCH_URL = "http://api.tvmaze.com/singlesearch/shows?q="; + private static final String EPISODE_URL = "http://api.tvmaze.com/shows/%%/episodes"; + private static final String EPISODE_SEARCH = "http://api.tvmaze.com/shows/%%/episodebynumber?season=%s&number=%e"; + + private static final Gson GSON = new Gson(); + + private static final int DEFAULT_BUFFER_SIZE = 8192; + + public static void selectInfosTests(renameFiles.metier.types.series.Serie serie) + { + String urlComplet = BASE_SEARCH_URL + serie.getSerieName().replaceAll(" ", "%20"); + String donnees = getJsonResponseFromURL(urlComplet); + JsonElement webSerie = JsonParser.parseString(donnees); + + Serie result = GSON.fromJson(webSerie, Serie.class); + + if( result != null ) + System.out.println(result.getName() + ": " + result.getId()); + else + System.out.println(urlComplet + " => serie inconnue\n" + donnees); + } + + public static String getJsonResponseFromURL(String urlString) + { + try + { + URL url = URI.create(urlString).toURL(); + + URLConnection connect = url.openConnection(); + + connect.connect(); + + InputStream stream = connect.getInputStream(); + + return new String(readAllBytes(stream)); + } + catch (IOException e) + { + return ""; + } + } + + private static byte[] readAllBytes(InputStream stream) throws IOException + { + int len = Integer.MAX_VALUE; + + List bufs = null; + byte[] result = null; + int total = 0; + int remaining = len; + int n; + do + { + byte[] buf = new byte[Math.min(remaining, DEFAULT_BUFFER_SIZE)]; + int nread = 0; + + // read to EOF which may read more or less than buffer size + while ((n = stream.read(buf, nread, Math.min(buf.length - nread, remaining))) > 0) + { + nread += n; + remaining -= n; + } + + if (nread > 0) + { + if (Integer.MAX_VALUE - 8 - total < nread) + { + throw new OutOfMemoryError("Required array size too large"); + } + total += nread; + if (result == null) + { + result = buf; + } + else + { + if (bufs == null) + { + bufs = new ArrayList<>(); + bufs.add(result); + } + bufs.add(buf); + } + } + // if the last call to read returned -1 or the number of bytes + // requested have been read then break + } while (n >= 0 && remaining > 0); + + if (bufs == null) + { + if (result == null) + { + return new byte[0]; + } + return result.length == total ? result : Arrays.copyOf(result, total); + } + + result = new byte[total]; + int offset = 0; + remaining = total; + for (byte[] b : bufs) + { + int count = Math.min(b.length, remaining); + System.arraycopy(b, 0, result, offset, count); + offset += count; + remaining -= count; + } + + return result; + } +}