* gracefully ignore missing data
This commit is contained in:
parent
b2e092c697
commit
c3093eb8d1
|
@ -225,7 +225,11 @@ public class TMDbClient implements MovieIdentificationService {
|
|||
|
||||
|
||||
public Locale getLanguage() {
|
||||
return new Locale(get(MovieProperty.language));
|
||||
try {
|
||||
return new Locale(get(MovieProperty.language));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -239,14 +243,22 @@ public class TMDbClient implements MovieIdentificationService {
|
|||
}
|
||||
|
||||
|
||||
public int getId() {
|
||||
return Integer.parseInt(get(MovieProperty.id));
|
||||
public Integer getId() {
|
||||
try {
|
||||
return new Integer(get(MovieProperty.id));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int getImdbId() {
|
||||
public Integer getImdbId() {
|
||||
// e.g. tt0379786
|
||||
return Integer.parseInt(get(MovieProperty.imdb_id).substring(2));
|
||||
try {
|
||||
return new Integer(get(MovieProperty.imdb_id).substring(2));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -264,13 +276,21 @@ public class TMDbClient implements MovieIdentificationService {
|
|||
}
|
||||
|
||||
|
||||
public int getVotes() {
|
||||
return Integer.parseInt(get(MovieProperty.votes));
|
||||
public Integer getVotes() {
|
||||
try {
|
||||
return new Integer(get(MovieProperty.votes));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public double getRating() {
|
||||
return Double.parseDouble(get(MovieProperty.rating));
|
||||
public Double getRating() {
|
||||
try {
|
||||
return new Double(get(MovieProperty.rating));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -286,8 +306,12 @@ public class TMDbClient implements MovieIdentificationService {
|
|||
}
|
||||
|
||||
|
||||
public int getRuntime() {
|
||||
return Integer.parseInt(get(MovieProperty.runtime));
|
||||
public Integer getRuntime() {
|
||||
try {
|
||||
return new Integer(get(MovieProperty.runtime));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -350,7 +374,7 @@ public class TMDbClient implements MovieIdentificationService {
|
|||
public URL getUrl() {
|
||||
try {
|
||||
return new URL(get(ArtworkProperty.url));
|
||||
} catch (MalformedURLException e) {
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -361,13 +385,21 @@ public class TMDbClient implements MovieIdentificationService {
|
|||
}
|
||||
|
||||
|
||||
public int getWidth() {
|
||||
return Integer.parseInt(get(ArtworkProperty.width));
|
||||
public Integer getWidth() {
|
||||
try {
|
||||
return new Integer(get(ArtworkProperty.width));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int getHeight() {
|
||||
return Integer.parseInt(get(ArtworkProperty.height));
|
||||
public Integer getHeight() {
|
||||
try {
|
||||
return new Integer(get(ArtworkProperty.height));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -460,9 +460,13 @@ public class TheTVDBClient extends AbstractEpisodeListProvider {
|
|||
}
|
||||
|
||||
|
||||
public int getId() {
|
||||
public Integer getId() {
|
||||
// e.g. 80348
|
||||
return Integer.parseInt(get(SeriesProperty.id));
|
||||
try {
|
||||
return Integer.parseInt(get(SeriesProperty.id));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -480,10 +484,12 @@ public class TheTVDBClient extends AbstractEpisodeListProvider {
|
|||
|
||||
protected List<String> split(String values) {
|
||||
List<String> items = new ArrayList<String>();
|
||||
for (String it : values.split("[|]")) {
|
||||
it = it.trim();
|
||||
if (it.length() > 0) {
|
||||
items.add(it);
|
||||
if (values != null && values.length() > 0) {
|
||||
for (String it : values.split("[|]")) {
|
||||
it = it.trim();
|
||||
if (it.length() > 0) {
|
||||
items.add(it);
|
||||
}
|
||||
}
|
||||
}
|
||||
return items;
|
||||
|
@ -514,15 +520,23 @@ public class TheTVDBClient extends AbstractEpisodeListProvider {
|
|||
}
|
||||
|
||||
|
||||
public int getImdbId() {
|
||||
public Integer getImdbId() {
|
||||
// e.g. tt0934814
|
||||
return Integer.parseInt(get(SeriesProperty.IMDB_ID).substring(2));
|
||||
try {
|
||||
return Integer.parseInt(get(SeriesProperty.IMDB_ID).substring(2));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Locale getLanguage() {
|
||||
// e.g. en
|
||||
return new Locale(get(SeriesProperty.Language));
|
||||
try {
|
||||
return new Locale(get(SeriesProperty.Language));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -532,15 +546,23 @@ public class TheTVDBClient extends AbstractEpisodeListProvider {
|
|||
}
|
||||
|
||||
|
||||
public double getRating() {
|
||||
public Double getRating() {
|
||||
// e.g. 9.0
|
||||
return Double.parseDouble(get(SeriesProperty.Rating));
|
||||
try {
|
||||
return Double.parseDouble(get(SeriesProperty.Rating));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int getRatingCount() {
|
||||
public Integer getRatingCount() {
|
||||
// e.g. 696
|
||||
return Integer.parseInt(get(SeriesProperty.RatingCount));
|
||||
try {
|
||||
return Integer.parseInt(get(SeriesProperty.RatingCount));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -595,7 +617,7 @@ public class TheTVDBClient extends AbstractEpisodeListProvider {
|
|||
}
|
||||
|
||||
|
||||
public URL getPosterUrl() throws MalformedURLException {
|
||||
public URL getPosterUrl() {
|
||||
try {
|
||||
return new URL(getBannerMirrorUrl(), get(SeriesProperty.poster));
|
||||
} catch (Exception e) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// filebot -script "http://filebot.sf.net/scripts/artwork.tmdb.groovy" -trust-script /path/to/media/
|
||||
|
||||
// EXPERIMENTAL // HERE THERE BE DRAGONS
|
||||
if (net.sourceforge.filebot.Settings.applicationRevisionNumber < 802) throw new Exception("Application revision too old")
|
||||
if (net.sourceforge.filebot.Settings.applicationRevisionNumber < 808) throw new Exception("Application revision too old")
|
||||
|
||||
|
||||
/*
|
||||
|
@ -41,6 +41,11 @@ def fetchMovieArtworkAndNfo(movieDir, movie) {
|
|||
println "Fetch nfo and artwork for $movie"
|
||||
def movieInfo = TheMovieDB.getMovieInfo(movie, Locale.ENGLISH)
|
||||
|
||||
println movieInfo
|
||||
movieInfo.images.each {
|
||||
println "Available artwork: $it.url => $it"
|
||||
}
|
||||
|
||||
// fetch nfo
|
||||
fetchNfo(movieDir['movie.nfo'], movieInfo)
|
||||
|
||||
|
@ -50,7 +55,7 @@ def fetchMovieArtworkAndNfo(movieDir, movie) {
|
|||
}
|
||||
|
||||
|
||||
def jobs = args.getFolders().findResults { dir ->
|
||||
args.getFolders().each { dir ->
|
||||
def videos = dir.listFiles{ it.isVideo() }
|
||||
if (videos.isEmpty()) {
|
||||
return null
|
||||
|
@ -66,7 +71,6 @@ def jobs = args.getFolders().findResults { dir ->
|
|||
// auto-select series
|
||||
def movie = options.sortBySimilarity(query, { it.name })[0]
|
||||
|
||||
return { fetchMovieArtworkAndNfo(dir, movie) }
|
||||
println "$dir => $movie"
|
||||
fetchMovieArtworkAndNfo(dir, movie)
|
||||
}
|
||||
|
||||
parallel(jobs, 10)
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
// filebot -script "http://filebot.sf.net/scripts/artwork.tvdb.groovy" -trust-script /path/to/media/
|
||||
|
||||
// EXPERIMENTAL // HERE THERE BE DRAGONS
|
||||
if (net.sourceforge.filebot.Settings.applicationRevisionNumber < 802) throw new Exception("Application revision too old")
|
||||
if (net.sourceforge.filebot.Settings.applicationRevisionNumber < 808) throw new Exception("Application revision too old")
|
||||
|
||||
|
||||
/*
|
||||
* Fetch series and season banners for all tv shows. Series name is auto-detected if possible or the folder name is used.
|
||||
*/
|
||||
|
||||
def fetchBanner(outputFile, series, bannerType, bannerType2, season = null) {
|
||||
def fetchBanner(outputFile, series, bannerType, bannerType2 = null, season = null) {
|
||||
// select and fetch banner
|
||||
def banner = TheTVDB.getBanner(series, bannerType, bannerType2, season, Locale.ENGLISH, 0)
|
||||
if (banner == null) {
|
||||
println "Banner not found: $outputFile"
|
||||
println "Banner not found: $outputFile / $bannerType:$bannerType2"
|
||||
return null
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,9 @@ def fetchBanner(outputFile, series, bannerType, bannerType2, season = null) {
|
|||
|
||||
|
||||
def fetchNfo(outputFile, series) {
|
||||
TheTVDB.getSeriesInfo(series, Locale.ENGLISH).applyXmlTemplate('''<tvshow xmlns:gsp='http://groovy.codehaus.org/2005/gsp'>
|
||||
def info = TheTVDB.getSeriesInfo(series, Locale.ENGLISH)
|
||||
println info
|
||||
info.applyXmlTemplate('''<tvshow xmlns:gsp='http://groovy.codehaus.org/2005/gsp'>
|
||||
<title>$name</title>
|
||||
<year>${firstAired?.year}</year>
|
||||
<rating>$rating</rating>
|
||||
|
@ -49,15 +51,19 @@ def fetchNfo(outputFile, series) {
|
|||
def fetchSeriesBannersAndNfo(seriesDir, seasonDir, series, season) {
|
||||
println "Fetch nfo and banners for $series / Season $season"
|
||||
|
||||
TheTVDB.getBannerList(series.seriesId).each {
|
||||
println "Available banner: $it.url => $it"
|
||||
}
|
||||
|
||||
// fetch nfo
|
||||
fetchNfo(seriesDir['tvshow.nfo'], series)
|
||||
|
||||
|
||||
// fetch series banner, fanart, posters, etc
|
||||
fetchBanner(seriesDir['folder.jpg'], series, "poster", "680x1000")
|
||||
fetchBanner(seriesDir['banner.jpg'], series, "series", "graphical")
|
||||
["680x1000", null].findResult{ fetchBanner(seriesDir['folder.jpg'], series, "poster", it) }
|
||||
["graphical", null].findResult{ fetchBanner(seriesDir['banner.jpg'], series, "series", it) }
|
||||
|
||||
// fetch highest resolution fanart
|
||||
["1920x1080", "1280x720"].findResult{ fetchBanner(seriesDir["fanart.jpg"], series, "fanart", it) }
|
||||
["1920x1080", "1280x720", null].findResult{ fetchBanner(seriesDir["fanart.jpg"], series, "fanart", it) }
|
||||
|
||||
// fetch season banners
|
||||
if (seasonDir != seriesDir) {
|
||||
|
@ -67,7 +73,7 @@ def fetchSeriesBannersAndNfo(seriesDir, seasonDir, series, season) {
|
|||
}
|
||||
|
||||
|
||||
def jobs = args.getFolders().findResults { dir ->
|
||||
args.getFolders().each { dir ->
|
||||
def videos = dir.listFiles{ it.isVideo() }
|
||||
if (videos.isEmpty()) {
|
||||
return null
|
||||
|
@ -78,9 +84,9 @@ def jobs = args.getFolders().findResults { dir ->
|
|||
|
||||
if (query == null) {
|
||||
query = dir.dir.hasFile{ it.name =~ /Season/ && it.isDirectory() } ? dir.dir.name : dir.name
|
||||
println "Failed to detect series name from video files -> Query by $query instead"
|
||||
}
|
||||
|
||||
println "$dir => Search by $query"
|
||||
def options = TheTVDB.search(query, Locale.ENGLISH)
|
||||
if (options.isEmpty()) {
|
||||
println "TV Series not found: $query"
|
||||
|
@ -94,7 +100,6 @@ def jobs = args.getFolders().findResults { dir ->
|
|||
def seriesDir = [dir.dir, dir].sortBySimilarity(series.name, { it.name })[0]
|
||||
def season = sxe && sxe.season > 0 ? sxe.season : 1
|
||||
|
||||
return { fetchSeriesBannersAndNfo(seriesDir, dir, series, season) }
|
||||
println "$dir => $series"
|
||||
fetchSeriesBannersAndNfo(seriesDir, dir, series, season)
|
||||
}
|
||||
|
||||
parallel(jobs, 10)
|
||||
|
|
Loading…
Reference in New Issue