webservice.fanart.tv sending back 0 bytes

All your suggestions, requests and ideas for future development
kim
Power User
Posts: 1251
Joined: 15 May 2014, 16:17

Re: webservice.fanart.tv sending back 0 bytes

Post by kim »

I take it you made it yourself ?
it looks a lot like you just combine them to 2in1
https://github.com/filebot/scripts/blob ... vdb.groovy
and
https://github.com/filebot/scripts/blob ... tpc.groovy
... does your script do something different ?

btw: it's more likely that it's your format that "breaks" your script
look in your log for something like"script1" and a number, this is the line number in your script where the problem is at.
denywinarto
Donor
Posts: 28
Joined: 30 Jul 2013, 01:15

Re: webservice.fanart.tv sending back 0 bytes

Post by denywinarto »

kim wrote: 21 Sep 2017, 04:40 I take it you made it yourself ?
it looks a lot like you just combine them to 2in1
https://github.com/filebot/scripts/blob ... vdb.groovy
and
https://github.com/filebot/scripts/blob ... tpc.groovy
... does your script do something different ?

btw: it's more likely that it's your format that "breaks" your script
look in your log for something like"script1" and a number, this is the line number in your script where the problem is at.
Yes i mean a mod to filebot's script,
it simply returns thetvdb.nfo along with posters, fanarts and banners
How do i check the log? kinda new at this groovy language
kim
Power User
Posts: 1251
Joined: 15 May 2014, 16:17

Re: webservice.fanart.tv sending back 0 bytes

Post by kim »

It was easier just to fix it for you ;)
this works with newest update

btw: I disabled e.g. clearart and logo.... just remove the "//" part to enable again

here you go :

Code: Select all

def override = _args.conflict == 'override'
import static groovy.json.StringEscapeUtils.*


/**
 * XBMC helper functions
 */
def scanVideoLibrary(host, port) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"VideoLibrary.Scan","id":1}""")
		}
	}
}

def showNotification(host, port, title, message, image) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"${escapeJavaScript(title)}","message":"${escapeJavaScript(message)}", "image":"${escapeJavaScript(image)}"},"id":1}""")
		}
	}
}



/**
 * Plex helpers
 */


/**
 * TheTVDB artwork/nfo helpers
 */
def fetchSeriesBanner(outputFile, seriesId, bannerType, bannerType2, season, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Banner already exists: $outputFile"
		return outputFile
	}

	// select and fetch banner
	def artwork = TheTVDB.getArtwork(seriesId, bannerType, locale)
	def banner = [locale.language, null].findResult { lang -> artwork.find{ it.matches(bannerType2, season, lang) } }
	if (banner == null) {
		log.finest "Banner not found: $outputFile / $bannerType:$bannerType2"
		return null
	}
	log.finest "Fetching $outputFile => $banner"
	return banner.url.saveAs(outputFile)
}

def fetchSeriesFanart(outputFile, seriesId, type, season, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Fanart already exists: $outputFile"
		return outputFile
	}

	def artwork = FanartTV.getArtwork(seriesId, "tv", locale)
	def fanart = [locale.language, null].findResult{ lang -> artwork.find{ it.matches(type, season, lang) } }
	if (fanart == null) {
		log.finest "Fanart not found: $outputFile / $type"
		return null
	}
	log.finest "Fetching $outputFile => $fanart"
	return fanart.url.saveAs(outputFile)
}

def fetchSeriesNfo(outputFile, i, locale) {
	log.fine "Generate Series NFO: $i.name [$i.id]"
	def xml = XML {
		tvshow {
			title(i.name)
			sorttitle([i.name, i.startDate as String].findAll{ it?.length() > 0 }.findResults{ it.sortName('$2') }.join(' :: '))
			year(i.startDate?.year)
			rating(i.rating)
			votes(i.ratingCount)
			plot(i.overview)
			runtime(i.runtime)
			mpaa(i.certification)
			id(i.id)
			i.genres.each{
				genre(it)
			}
			thumb(i.bannerUrl)
			premiered(i.startDate)
			status(i.status)
			studio(i.network)
			tvdb(id:i.id, "https://www.thetvdb.com/?tab=series&id=${i.id}")

			/** Kodi requires an <episodeguide> element with a TheTVDB API (v1) Series Record XML URL **/
			episodeguide {
				url(cache:"${i.id}.xml", "https://www.thetvdb.com/api/1D62F2F90030C444/series/${i.id}/all/${locale.language}.zip")
			}
		}
	}
	xml.saveAs(outputFile)
}
 

def fetchSeriesArtworkAndNfo(seriesDir, seasonDir, seriesId, season, override = false, locale = Locale.ENGLISH) {
	tryLogCatch {
		// fetch nfo
		def seriesInfo = TheTVDB.getSeriesInfo(seriesId, locale)
		fetchSeriesNfo(seriesDir.resolve('tvshow.nfo'), seriesInfo, locale)

		// fetch series banner, fanart, posters, etc
		['680x1000', null].findResult{ fetchSeriesBanner(seriesDir.resolve('poster.jpg'), seriesId, 'poster', it, null, override, locale) }
		['graphical', null].findResult{ fetchSeriesBanner(seriesDir.resolve('banner.jpg'), seriesId, 'series', it, null, override, locale) }

		// fetch highest resolution fanart
		['1920x1080', '1280x720', null].findResult{ fetchSeriesBanner(seriesDir.resolve('fanart.jpg'), seriesId, 'fanart', it, null, override, locale) }

		// fetch season banners
		if (seasonDir != seriesDir) {
			fetchSeriesBanner(seasonDir.resolve('poster.jpg'), seriesId, 'season', 'season', season, override, locale)
			fetchSeriesBanner(seasonDir.resolve('banner.jpg'), seriesId, 'seasonwide', 'seasonwide', season, override, locale)

			// folder image (resuse series poster if possible)
			copyIfPossible(seasonDir.resolve('poster.jpg'), seasonDir.resolve('folder.jpg'))
		}

		// fetch fanart
		// ['hdclearart', 'clearart'].findResult{ type -> fetchSeriesFanart(seriesDir.resolve('clearart.png'), seriesId, type, null, override, locale) }
		// ['hdtvlogo', 'clearlogo'].findResult{ type -> fetchSeriesFanart(seriesDir.resolve('logo.png'), seriesId, type, null, override, locale) }
		// fetchSeriesFanart(seriesDir.resolve('landscape.jpg'), seriesId, 'tvthumb', null, override, locale)

		// fetch season fanart
		// if (seasonDir != seriesDir) {
			// fetchSeriesFanart(seasonDir.resolve('landscape.jpg'), seriesId, 'seasonthumb', season, override, locale)
		// }

		// folder image (resuse series poster if possible)
		copyIfPossible(seriesDir.resolve('poster.jpg'), seriesDir.resolve('folder.jpg'))
	}
}


/**
 * TheMovieDB artwork/nfo helpers
 */






def copyIfPossible(File src, File dst) {
	if (src.exists() && !dst.exists()) {
		src.copyAs(dst)
	}
}

args.eachMediaFolder{ dir ->
	// fetch only missing artwork by default
	if (dir.hasFile{it.name == 'banner.jpg'}) {
		log.finest "Skipping $dir"
		return
	}

	def videos = dir.listFiles{ it.isVideo() }
	def query = _args.query ?: detectSeriesName(videos)
	def sxe = videos.findResult{ parseEpisodeNumber(it) }
	def locale = any{ _args.language.locale }{ Locale.ENGLISH }

	if (query == null) {
		query = dir.dir.hasFile{ it.name =~ /Season/ && it.isDirectory() } ? dir.dir.name : dir.name
	}

	log.finest "$dir => Search by $query"
	def options = TheTVDB.search(query, locale)
	if (options.isEmpty()) {
		log.warning "TV Series not found: $query"
		return
	}

	// sort by relevance
	options = options.sortBySimilarity(query, { it.name })

	// auto-select series
	def series = options[0]

	// maybe require user input
	if (options.size() > 1 && _args.strict) {
		series = showInputDialog(options, query, 'Select TV Show:')
	}

	if (series == null) {
		return null
	}

	// auto-detect structure
	def seriesDir = [dir.dir, dir].sortBySimilarity(series.name, { it.name })[0]
	def season = sxe && sxe.season > 0 ? sxe.season : 1

	log.fine "$dir => $series"
	tryLogCatch {
		fetchSeriesArtworkAndNfo(seriesDir, dir, series.id, season, false, locale)
	}
}
remember to put your files like so "Cheers\Season 04\Cheers.S04E10.mkv" to get all the fanart
denywinarto
Donor
Posts: 28
Joined: 30 Jul 2013, 01:15

Re: webservice.fanart.tv sending back 0 bytes

Post by denywinarto »

kim wrote: 21 Sep 2017, 13:16 It was easier just to fix it for you ;)
this works with newest update

btw: I disabled e.g. clearart and logo.... just remove the "//" part to enable again

here you go :

Code: Select all

def override = _args.conflict == 'override'
import static groovy.json.StringEscapeUtils.*


/**
 * XBMC helper functions
 */
def scanVideoLibrary(host, port) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"VideoLibrary.Scan","id":1}""")
		}
	}
}

def showNotification(host, port, title, message, image) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"${escapeJavaScript(title)}","message":"${escapeJavaScript(message)}", "image":"${escapeJavaScript(image)}"},"id":1}""")
		}
	}
}



/**
 * Plex helpers
 */


/**
 * TheTVDB artwork/nfo helpers
 */
def fetchSeriesBanner(outputFile, seriesId, bannerType, bannerType2, season, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Banner already exists: $outputFile"
		return outputFile
	}

	// select and fetch banner
	def artwork = TheTVDB.getArtwork(seriesId, bannerType, locale)
	def banner = [locale.language, null].findResult { lang -> artwork.find{ it.matches(bannerType2, season, lang) } }
	if (banner == null) {
		log.finest "Banner not found: $outputFile / $bannerType:$bannerType2"
		return null
	}
	log.finest "Fetching $outputFile => $banner"
	return banner.url.saveAs(outputFile)
}

def fetchSeriesFanart(outputFile, seriesId, type, season, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Fanart already exists: $outputFile"
		return outputFile
	}

	def artwork = FanartTV.getArtwork(seriesId, "tv", locale)
	def fanart = [locale.language, null].findResult{ lang -> artwork.find{ it.matches(type, season, lang) } }
	if (fanart == null) {
		log.finest "Fanart not found: $outputFile / $type"
		return null
	}
	log.finest "Fetching $outputFile => $fanart"
	return fanart.url.saveAs(outputFile)
}

def fetchSeriesNfo(outputFile, i, locale) {
	log.fine "Generate Series NFO: $i.name [$i.id]"
	def xml = XML {
		tvshow {
			title(i.name)
			sorttitle([i.name, i.startDate as String].findAll{ it?.length() > 0 }.findResults{ it.sortName('$2') }.join(' :: '))
			year(i.startDate?.year)
			rating(i.rating)
			votes(i.ratingCount)
			plot(i.overview)
			runtime(i.runtime)
			mpaa(i.certification)
			id(i.id)
			i.genres.each{
				genre(it)
			}
			thumb(i.bannerUrl)
			premiered(i.startDate)
			status(i.status)
			studio(i.network)
			tvdb(id:i.id, "https://www.thetvdb.com/?tab=series&id=${i.id}")

			/** Kodi requires an <episodeguide> element with a TheTVDB API (v1) Series Record XML URL **/
			episodeguide {
				url(cache:"${i.id}.xml", "https://www.thetvdb.com/api/1D62F2F90030C444/series/${i.id}/all/${locale.language}.zip")
			}
		}
	}
	xml.saveAs(outputFile)
}
 

def fetchSeriesArtworkAndNfo(seriesDir, seasonDir, seriesId, season, override = false, locale = Locale.ENGLISH) {
	tryLogCatch {
		// fetch nfo
		def seriesInfo = TheTVDB.getSeriesInfo(seriesId, locale)
		fetchSeriesNfo(seriesDir.resolve('tvshow.nfo'), seriesInfo, locale)

		// fetch series banner, fanart, posters, etc
		['680x1000', null].findResult{ fetchSeriesBanner(seriesDir.resolve('poster.jpg'), seriesId, 'poster', it, null, override, locale) }
		['graphical', null].findResult{ fetchSeriesBanner(seriesDir.resolve('banner.jpg'), seriesId, 'series', it, null, override, locale) }

		// fetch highest resolution fanart
		['1920x1080', '1280x720', null].findResult{ fetchSeriesBanner(seriesDir.resolve('fanart.jpg'), seriesId, 'fanart', it, null, override, locale) }

		// fetch season banners
		if (seasonDir != seriesDir) {
			fetchSeriesBanner(seasonDir.resolve('poster.jpg'), seriesId, 'season', 'season', season, override, locale)
			fetchSeriesBanner(seasonDir.resolve('banner.jpg'), seriesId, 'seasonwide', 'seasonwide', season, override, locale)

			// folder image (resuse series poster if possible)
			copyIfPossible(seasonDir.resolve('poster.jpg'), seasonDir.resolve('folder.jpg'))
		}

		// fetch fanart
		// ['hdclearart', 'clearart'].findResult{ type -> fetchSeriesFanart(seriesDir.resolve('clearart.png'), seriesId, type, null, override, locale) }
		// ['hdtvlogo', 'clearlogo'].findResult{ type -> fetchSeriesFanart(seriesDir.resolve('logo.png'), seriesId, type, null, override, locale) }
		// fetchSeriesFanart(seriesDir.resolve('landscape.jpg'), seriesId, 'tvthumb', null, override, locale)

		// fetch season fanart
		// if (seasonDir != seriesDir) {
			// fetchSeriesFanart(seasonDir.resolve('landscape.jpg'), seriesId, 'seasonthumb', season, override, locale)
		// }

		// folder image (resuse series poster if possible)
		copyIfPossible(seriesDir.resolve('poster.jpg'), seriesDir.resolve('folder.jpg'))
	}
}


/**
 * TheMovieDB artwork/nfo helpers
 */






def copyIfPossible(File src, File dst) {
	if (src.exists() && !dst.exists()) {
		src.copyAs(dst)
	}
}

args.eachMediaFolder{ dir ->
	// fetch only missing artwork by default
	if (dir.hasFile{it.name == 'banner.jpg'}) {
		log.finest "Skipping $dir"
		return
	}

	def videos = dir.listFiles{ it.isVideo() }
	def query = _args.query ?: detectSeriesName(videos)
	def sxe = videos.findResult{ parseEpisodeNumber(it) }
	def locale = any{ _args.language.locale }{ Locale.ENGLISH }

	if (query == null) {
		query = dir.dir.hasFile{ it.name =~ /Season/ && it.isDirectory() } ? dir.dir.name : dir.name
	}

	log.finest "$dir => Search by $query"
	def options = TheTVDB.search(query, locale)
	if (options.isEmpty()) {
		log.warning "TV Series not found: $query"
		return
	}

	// sort by relevance
	options = options.sortBySimilarity(query, { it.name })

	// auto-select series
	def series = options[0]

	// maybe require user input
	if (options.size() > 1 && _args.strict) {
		series = showInputDialog(options, query, 'Select TV Show:')
	}

	if (series == null) {
		return null
	}

	// auto-detect structure
	def seriesDir = [dir.dir, dir].sortBySimilarity(series.name, { it.name })[0]
	def season = sxe && sxe.season > 0 ? sxe.season : 1

	log.fine "$dir => $series"
	tryLogCatch {
		fetchSeriesArtworkAndNfo(seriesDir, dir, series.id, season, false, locale)
	}
}
remember to put your files like so "Cheers\Season 04\Cheers.S04E10.mkv" to get all the fanart
Thanks for fixing it,
Unfortunately it still returns 0 kb files...
I'm already using the latest filebot.. any idea why?
kim
Power User
Posts: 1251
Joined: 15 May 2014, 16:17

Re: webservice.fanart.tv sending back 0 bytes

Post by kim »

it most be at least version FileBot 4.7.13 (r5203) to work proper

try
filebot.cmd -clear-cache
FileBot.cmd -script fn:sysinfo
fireheart2008
Posts: 37
Joined: 29 Jul 2014, 05:39

Re: webservice.fanart.tv sending back 0 bytes

Post by fireheart2008 »

rednoah wrote: 20 Sep 2017, 04:42 I see. TheTVDB issue has been fixed with the latest revision. You can try the latest jar, or wait for the next stable release.
i have downloaded this
Image
from https://get.filebot.net/filebot/latest/ ... jar.xz.gpg

but the issue still the same
viewtopic.php?f=6&t=5347


and when i renamed FileBot.jar.xz.gpg to replace FileBot.jar => not working

i seem to be unable to know how to get that beta FileBot 4.7.12 or .13 , there is no download link other than whatever i downloaded
not even here [ https://sourceforge.net/projects/filebot/files/filebot/]
kim
Power User
Posts: 1251
Joined: 15 May 2014, 16:17

Re: webservice.fanart.tv sending back 0 bytes

Post by kim »

yes it's not made easy ;)
look here viewtopic.php?f=8&t=4960

in the meantime you can use this (it replaces the "http" with "https" on the artwork url's) :

Code: Select all

def override = _args.conflict == 'override'
import static groovy.json.StringEscapeUtils.*


/**
 * XBMC helper functions
 */
def scanVideoLibrary(host, port) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"VideoLibrary.Scan","id":1}""")
		}
	}
}

def showNotification(host, port, title, message, image) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"${escapeJavaScript(title)}","message":"${escapeJavaScript(message)}", "image":"${escapeJavaScript(image)}"},"id":1}""")
		}
	}
}



/**
 * Plex helpers
 */


/**
 * TheTVDB artwork/nfo helpers
 */
def fetchSeriesBanner(outputFile, seriesId, bannerType, bannerType2, season, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Banner already exists: $outputFile"
		return outputFile
	}

	// select and fetch banner
	def artwork = TheTVDB.getArtwork(seriesId, bannerType, locale)
	def banner = [locale.language, null].findResult { lang -> artwork.find{ it.matches(bannerType2, season, lang) } }
	if (banner == null) {
		log.finest "Banner not found: $outputFile / $bannerType:$bannerType2"
		return null
	}
	log.finest "Fetching $outputFile => $banner"
	log.fine "fetchSeriesBanner - banner.url: [$banner.url]"
	def URL tmp = new URL(banner.url.toString().replaceAll(/http/, 'https'))
	log.fine "fetchSeriesBanner - banner.url NEW: [$tmp]"
	return tmp.saveAs(outputFile)
}

def fetchSeriesFanart(outputFile, seriesId, type, season, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Fanart already exists: $outputFile"
		return outputFile
	}

	def artwork = FanartTV.getArtwork(seriesId, "tv", locale)
	def fanart = [locale.language, null].findResult{ lang -> artwork.find{ it.matches(type, season, lang) } }
	if (fanart == null) {
		log.finest "Fanart not found: $outputFile / $type"
		return null
	}
	log.finest "Fetching $outputFile => $fanart"
	log.fine "fetchSeriesFanart - fanart.url OLD: [$banner.url]"
	def URL tmp = new URL(fanart.url.toString().replaceAll(/http/, 'https'))
	log.fine "fetchSeriesFanart - fanart.url NEW: [$tmp]"
	return tmp.saveAs(outputFile)
}

def fetchSeriesNfo(outputFile, i, locale) {
	log.fine "Generate Series NFO: $i.name [$i.id]"
	def xml = XML {
		tvshow {
			title(i.name)
			sorttitle([i.name, i.startDate as String].findAll{ it?.length() > 0 }.findResults{ it.sortName('$2') }.join(' :: '))
			year(i.startDate?.year)
			rating(i.rating)
			votes(i.ratingCount)
			plot(i.overview)
			runtime(i.runtime)
			mpaa(i.certification)
			id(i.id)
			i.genres.each{
				genre(it)
			}
			thumb(i.bannerUrl)
			premiered(i.startDate)
			status(i.status)
			studio(i.network)
			tvdb(id:i.id, "https://www.thetvdb.com/?tab=series&id=${i.id}")

			/** Kodi requires an <episodeguide> element with a TheTVDB API (v1) Series Record XML URL **/
			episodeguide {
				url(cache:"${i.id}.xml", "https://www.thetvdb.com/api/1D62F2F90030C444/series/${i.id}/all/${locale.language}.zip")
			}
		}
	}
	xml.saveAs(outputFile)
}
 

def fetchSeriesArtworkAndNfo(seriesDir, seasonDir, seriesId, season, override = false, locale = Locale.ENGLISH) {
	tryLogCatch {
		// fetch nfo
		def seriesInfo = TheTVDB.getSeriesInfo(seriesId, locale)
		fetchSeriesNfo(seriesDir.resolve('tvshow.nfo'), seriesInfo, locale)

		// fetch series banner, fanart, posters, etc
		['680x1000', null].findResult{ fetchSeriesBanner(seriesDir.resolve('poster.jpg'), seriesId, 'poster', it, null, override, locale) }
		['graphical', null].findResult{ fetchSeriesBanner(seriesDir.resolve('banner.jpg'), seriesId, 'series', it, null, override, locale) }

		// fetch highest resolution fanart
		['1920x1080', '1280x720', null].findResult{ fetchSeriesBanner(seriesDir.resolve('fanart.jpg'), seriesId, 'fanart', it, null, override, locale) }

		// fetch season banners
		if (seasonDir != seriesDir) {
			fetchSeriesBanner(seasonDir.resolve('poster.jpg'), seriesId, 'season', 'season', season, override, locale)
			fetchSeriesBanner(seasonDir.resolve('banner.jpg'), seriesId, 'seasonwide', 'seasonwide', season, override, locale)

			// folder image (resuse series poster if possible)
			copyIfPossible(seasonDir.resolve('poster.jpg'), seasonDir.resolve('folder.jpg'))
		}

		// fetch fanart
		// ['hdclearart', 'clearart'].findResult{ type -> fetchSeriesFanart(seriesDir.resolve('clearart.png'), seriesId, type, null, override, locale) }
		// ['hdtvlogo', 'clearlogo'].findResult{ type -> fetchSeriesFanart(seriesDir.resolve('logo.png'), seriesId, type, null, override, locale) }
		// fetchSeriesFanart(seriesDir.resolve('landscape.jpg'), seriesId, 'tvthumb', null, override, locale)

		// fetch season fanart
		// if (seasonDir != seriesDir) {
			// fetchSeriesFanart(seasonDir.resolve('landscape.jpg'), seriesId, 'seasonthumb', season, override, locale)
		// }

		// folder image (resuse series poster if possible)
		copyIfPossible(seriesDir.resolve('poster.jpg'), seriesDir.resolve('folder.jpg'))
	}
}


/**
 * TheMovieDB artwork/nfo helpers
 */






def copyIfPossible(File src, File dst) {
	if (src.exists() && !dst.exists()) {
		src.copyAs(dst)
	}
}

args.eachMediaFolder{ dir ->
	// fetch only missing artwork by default
	if (dir.hasFile{it.name == 'banner.jpg'}) {
		log.finest "Skipping $dir"
		return
	}

	def videos = dir.listFiles{ it.isVideo() }
	def query = _args.query ?: detectSeriesName(videos)
	def sxe = videos.findResult{ parseEpisodeNumber(it) }
	def locale = any{ _args.language.locale }{ Locale.ENGLISH }

	if (query == null) {
		query = dir.dir.hasFile{ it.name =~ /Season/ && it.isDirectory() } ? dir.dir.name : dir.name
	}

	log.finest "$dir => Search by $query"
	def options = TheTVDB.search(query, locale)
	if (options.isEmpty()) {
		log.warning "TV Series not found: $query"
		return
	}

	// sort by relevance
	options = options.sortBySimilarity(query, { it.name })

	// auto-select series
	def series = options[0]

	// maybe require user input
	if (options.size() > 1 && _args.strict) {
		series = showInputDialog(options, query, 'Select TV Show:')
	}

	if (series == null) {
		return null
	}

	// auto-detect structure
	def seriesDir = [dir.dir, dir].sortBySimilarity(series.name, { it.name })[0]
	def season = sxe && sxe.season > 0 ? sxe.season : 1

	log.fine "$dir => $series"
	tryLogCatch {
		fetchSeriesArtworkAndNfo(seriesDir, dir, series.id, season, false, locale)
	}
}
save to e.g. TMP.groovy and it with filebot.cmd -script TMP.groovy
remember to put your files like so "Cheers\Season 04\Cheers.S04E10.mkv" to get all the fanart
denywinarto
Donor
Posts: 28
Joined: 30 Jul 2013, 01:15

Re: webservice.fanart.tv sending back 0 bytes

Post by denywinarto »

fireheart2008 wrote: 22 Sep 2017, 13:47
rednoah wrote: 20 Sep 2017, 04:42 I see. TheTVDB issue has been fixed with the latest revision. You can try the latest jar, or wait for the next stable release.
i have downloaded this
Image
from https://get.filebot.net/filebot/latest/ ... jar.xz.gpg

but the issue still the same
viewtopic.php?f=6&t=5347


and when i renamed FileBot.jar.xz.gpg to replace FileBot.jar => not working

i seem to be unable to know how to get that beta FileBot 4.7.12 or .13 , there is no download link other than whatever i downloaded
not even here [ https://sourceforge.net/projects/filebot/files/filebot/]
I see, gonna wait for stable release then...

btw i'm trying to do the same mod to my movie artwork downloader,
but i cant get it to work, any idea why?

Code: Select all

def override = _args.conflict == 'override'
import static groovy.json.StringEscapeUtils.*


/**
 * XBMC helper functions
 */
def scanVideoLibrary(host, port) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"VideoLibrary.Scan","id":1}""")
		}
	}
}

def showNotification(host, port, title, message, image) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"${escapeJavaScript(title)}","message":"${escapeJavaScript(message)}", "image":"${escapeJavaScript(image)}"},"id":1}""")
		}
	}
}


/**



/**
 * TheMovieDB artwork/nfo helpers
 */
def fetchMovieArtwork(outputFile, movieInfo, category, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Artwork already exists: $outputFile"
		return outputFile
	}

	// select and fetch artwork
	def artwork = TheMovieDB.getArtwork(movieInfo.id, category, locale)
	def selection = [locale.language, 'en', null].findResult{ lang -> artwork.find{ it.matches(lang) } }
	if (selection == null) {
		log.finest "Artwork not found: $outputFile"
		return null
	}
	log.finest "Fetching $outputFile => $selection"
	return selection.url.saveAs(outputFile)
}

def fetchAllMovieArtwork(outputFolder, prefix, movieInfo, category, override, locale) {
	// select and fetch artwork
	def artwork = TheMovieDB.getArtwork(movieInfo.id, category, locale)
	def selection = [locale.language, 'en', null].findResults{ lang -> artwork.findAll{ it.matches(lang) } }.flatten().unique()
	if (selection == null) {
		log.finest "Artwork not found: $outputFolder"
		return null
	}
	selection.eachWithIndex{ s, i ->
		def outputFile = new File(outputFolder, "${prefix}${i+1}.jpg")
		if (outputFile.exists() && !override) {
			log.finest "Artwork already exists: $outputFile"
		} else {
			log.finest "Fetching $outputFile => $s"
			s.url.saveAs(outputFile)
		}
	}
}

def fetchMovieFanart(outputFile, movieInfo, type, diskType, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Fanart already exists: $outputFile"
		return outputFile
	}

	def artwork = FanartTV.getArtwork(movieInfo.id, "movies", locale)
	def fanart = [locale, null].findResult{ lang -> artwork.find{ it.matches(type, diskType, lang) } }
	if (fanart == null) {
		log.finest "Fanart not found: $outputFile / $type"
		return null
	}
	log.finest "Fetching $outputFile => $fanart"
	return fanart.url.saveAs(outputFile)
}

def fetchMovieNfo(outputFile, movieInfo, movieFile, override) {
	def i = movieInfo
    "http://www.imdb.com/title/tt${(i.imdbId ?: 0).pad(7)}"

	.saveAs(outputFile)
}
def fetchMovieArtworkAndNfo(movieDir, movie, movieFile = null, extras = false, override = false, locale = Locale.ENGLISH) {
	tryLogCatch {
		def movieInfo = TheMovieDB.getMovieInfo(movie, locale, true)

		// fetch nfo
		fetchMovieNfo(movieDir.resolve('movie.nfo'), movieInfo, movieFile, override)


		// fetch series banner, fanart, posters, etc
		fetchMovieArtwork(movieDir.resolve('poster.jpg'), movieInfo, 'posters', override, locale)
		fetchMovieArtwork(movieDir.resolve('fanart.jpg'), movieInfo, 'backdrops', override, locale)

	}
}

def copyIfPossible(File src, File dst) {
	if (src.exists() && !dst.exists()) {
		src.copyAs(dst)
	}
}


args.eachMediaFolder{ dir ->
	// fetch only missing artwork by default
	if (dir.hasFile{it.name == 'movie.nfo'} && dir.hasFile{it.name == 'poster.jpg'} && dir.hasFile{it.name == 'fanart.jpg'}) {
		log.finest "Skipping $dir"
		return
	}
	
	def videos = dir.listFiles{ it.isVideo() } as List
	def query = _args.query
	def options = []
	def locale = any{ _args.language.locale }{ Locale.ENGLISH }
	
	if (query) {
		// manual search & sort by relevance
		options = TheMovieDB.searchMovie(query, locale).sortBySimilarity(query, { it.name })
	} else if (videos?.size() > 0) {
		// run movie auto-detection for video files
		options = MediaDetection.detectMovie(videos[0], TheMovieDB, locale, true)
	}
	
	if (options.isEmpty()) {
		log.finest "$dir => movie not found"
		return
	}
	
	// auto-select movie
	def movie = options[0]
	
	// maybe require user input
	if (options.size() > 1 && !_args.Strict) {
		movie = showInputDialog(options, query, 'Please select Movie:')
		}
		if (movie == null) 
		{return null
	}
	
	log.fine "$dir => $movie"
	tryLogCatch {
		fetchMovieArtworkAndNfo(dir, movie, false, override, locale)
	}
}
It throws
C:\>filebot -script movieartwork.groovy "N:\temp\complete\movie\"
Illegal Argument: java.nio.file.InvalidPathException: Illegal char <"> at index
22: N:\temp\complete\movie" (N:\temp\complete\movie")
Bad script source: movieartwork.groovy
Failure (°_°)
kim
Power User
Posts: 1251
Joined: 15 May 2014, 16:17

Re: webservice.fanart.tv sending back 0 bytes

Post by kim »

I just replaced the main part from here:
https://raw.githubusercontent.com/fileb ... mdb.groovy

Code: Select all

def override = _args.conflict == 'override'
import static groovy.json.StringEscapeUtils.*


/**
 * XBMC helper functions
 */
def scanVideoLibrary(host, port) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"VideoLibrary.Scan","id":1}""")
		}
	}
}

def showNotification(host, port, title, message, image) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"${escapeJavaScript(title)}","message":"${escapeJavaScript(message)}", "image":"${escapeJavaScript(image)}"},"id":1}""")
		}
	}
}


/**



/**
 * TheMovieDB artwork/nfo helpers
 */
def fetchMovieArtwork(outputFile, movieInfo, category, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Artwork already exists: $outputFile"
		return outputFile
	}

	// select and fetch artwork
	def artwork = TheMovieDB.getArtwork(movieInfo.id, category, locale)
	def selection = [locale.language, 'en', null].findResult{ lang -> artwork.find{ it.matches(lang) } }
	if (selection == null) {
		log.finest "Artwork not found: $outputFile"
		return null
	}
	log.finest "Fetching $outputFile => $selection"
	return selection.url.saveAs(outputFile)
}

def fetchAllMovieArtwork(outputFolder, prefix, movieInfo, category, override, locale) {
	// select and fetch artwork
	def artwork = TheMovieDB.getArtwork(movieInfo.id, category, locale)
	def selection = [locale.language, 'en', null].findResults{ lang -> artwork.findAll{ it.matches(lang) } }.flatten().unique()
	if (selection == null) {
		log.finest "Artwork not found: $outputFolder"
		return null
	}
	selection.eachWithIndex{ s, i ->
		def outputFile = new File(outputFolder, "${prefix}${i+1}.jpg")
		if (outputFile.exists() && !override) {
			log.finest "Artwork already exists: $outputFile"
		} else {
			log.finest "Fetching $outputFile => $s"
			s.url.saveAs(outputFile)
		}
	}
}

def fetchMovieFanart(outputFile, movieInfo, type, diskType, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Fanart already exists: $outputFile"
		return outputFile
	}

	def artwork = FanartTV.getArtwork(movieInfo.id, "movies", locale)
	def fanart = [locale, null].findResult{ lang -> artwork.find{ it.matches(type, diskType, lang) } }
	if (fanart == null) {
		log.finest "Fanart not found: $outputFile / $type"
		return null
	}
	log.finest "Fetching $outputFile => $fanart"
	return fanart.url.saveAs(outputFile)
}

def fetchMovieNfo(outputFile, movieInfo, movieFile, override) {
	def i = movieInfo
    "http://www.imdb.com/title/tt${(i.imdbId ?: 0).pad(7)}"

	.saveAs(outputFile)
}
def fetchMovieArtworkAndNfo(movieDir, movie, movieFile = null, extras = false, override = false, locale = Locale.ENGLISH) {
	tryLogCatch {
		def movieInfo = TheMovieDB.getMovieInfo(movie, locale, true)

		// fetch nfo
		fetchMovieNfo(movieDir.resolve('movie.nfo'), movieInfo, movieFile, override)


		// fetch series banner, fanart, posters, etc
		fetchMovieArtwork(movieDir.resolve('poster.jpg'), movieInfo, 'posters', override, locale)
		fetchMovieArtwork(movieDir.resolve('fanart.jpg'), movieInfo, 'backdrops', override, locale)

	}
}

def copyIfPossible(File src, File dst) {
	if (src.exists() && !dst.exists()) {
		src.copyAs(dst)
	}
}


args.eachMediaFolder{ dir ->
	// fetch only missing artwork by default
	if (dir.hasFile{it.name == 'movie.nfo'} && dir.hasFile{it.name == 'poster.jpg'} && dir.hasFile{it.name == 'fanart.jpg'}) {
		log.finest "Skipping $dir"
		return
	}

	def videos = dir.listFiles{ it.isVideo() }
	def query = _args.query
	def locale = any{ _args.language.locale }{ Locale.ENGLISH }
	def options = []

	if (query) {
		// manual search & sort by relevance
		options = TheMovieDB.searchMovie(query, locale).sortBySimilarity(query, { it.name })
	} else if (videos.size() > 0) {
		// run movie auto-detection for video files
		options = MediaDetection.detectMovie(videos[0], TheMovieDB, locale, true)
	}

	if (options.isEmpty()) {
		log.warning "$dir ${videos.name} => movie not found"
		return
	}

	// auto-select movie
	def movie = options[0]

	// maybe require user input
	if (options.size() > 1 && _args.strict) {
		movie = showInputDialog(options, dir.name, 'Select Movie:')
	}

	if (movie == null) {
		return null
	}

	log.fine "$dir => $movie"
	tryLogCatch {
		fetchMovieArtworkAndNfo(dir, movie, dir.getFiles{ it.isVideo() }.sort{ it.length() }.reverse().findResult{ it }, extras, false, locale)
	}
}
denywinarto
Donor
Posts: 28
Joined: 30 Jul 2013, 01:15

Re: webservice.fanart.tv sending back 0 bytes

Post by denywinarto »

kim wrote: 23 Sep 2017, 15:15 I just replaced the main part from here:
https://raw.githubusercontent.com/fileb ... mdb.groovy

Code: Select all

def override = _args.conflict == 'override'
import static groovy.json.StringEscapeUtils.*


/**
 * XBMC helper functions
 */
def scanVideoLibrary(host, port) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"VideoLibrary.Scan","id":1}""")
		}
	}
}

def showNotification(host, port, title, message, image) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"${escapeJavaScript(title)}","message":"${escapeJavaScript(message)}", "image":"${escapeJavaScript(image)}"},"id":1}""")
		}
	}
}


/**



/**
 * TheMovieDB artwork/nfo helpers
 */
def fetchMovieArtwork(outputFile, movieInfo, category, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Artwork already exists: $outputFile"
		return outputFile
	}

	// select and fetch artwork
	def artwork = TheMovieDB.getArtwork(movieInfo.id, category, locale)
	def selection = [locale.language, 'en', null].findResult{ lang -> artwork.find{ it.matches(lang) } }
	if (selection == null) {
		log.finest "Artwork not found: $outputFile"
		return null
	}
	log.finest "Fetching $outputFile => $selection"
	return selection.url.saveAs(outputFile)
}

def fetchAllMovieArtwork(outputFolder, prefix, movieInfo, category, override, locale) {
	// select and fetch artwork
	def artwork = TheMovieDB.getArtwork(movieInfo.id, category, locale)
	def selection = [locale.language, 'en', null].findResults{ lang -> artwork.findAll{ it.matches(lang) } }.flatten().unique()
	if (selection == null) {
		log.finest "Artwork not found: $outputFolder"
		return null
	}
	selection.eachWithIndex{ s, i ->
		def outputFile = new File(outputFolder, "${prefix}${i+1}.jpg")
		if (outputFile.exists() && !override) {
			log.finest "Artwork already exists: $outputFile"
		} else {
			log.finest "Fetching $outputFile => $s"
			s.url.saveAs(outputFile)
		}
	}
}

def fetchMovieFanart(outputFile, movieInfo, type, diskType, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Fanart already exists: $outputFile"
		return outputFile
	}

	def artwork = FanartTV.getArtwork(movieInfo.id, "movies", locale)
	def fanart = [locale, null].findResult{ lang -> artwork.find{ it.matches(type, diskType, lang) } }
	if (fanart == null) {
		log.finest "Fanart not found: $outputFile / $type"
		return null
	}
	log.finest "Fetching $outputFile => $fanart"
	return fanart.url.saveAs(outputFile)
}

def fetchMovieNfo(outputFile, movieInfo, movieFile, override) {
	def i = movieInfo
    "http://www.imdb.com/title/tt${(i.imdbId ?: 0).pad(7)}"

	.saveAs(outputFile)
}
def fetchMovieArtworkAndNfo(movieDir, movie, movieFile = null, extras = false, override = false, locale = Locale.ENGLISH) {
	tryLogCatch {
		def movieInfo = TheMovieDB.getMovieInfo(movie, locale, true)

		// fetch nfo
		fetchMovieNfo(movieDir.resolve('movie.nfo'), movieInfo, movieFile, override)


		// fetch series banner, fanart, posters, etc
		fetchMovieArtwork(movieDir.resolve('poster.jpg'), movieInfo, 'posters', override, locale)
		fetchMovieArtwork(movieDir.resolve('fanart.jpg'), movieInfo, 'backdrops', override, locale)

	}
}

def copyIfPossible(File src, File dst) {
	if (src.exists() && !dst.exists()) {
		src.copyAs(dst)
	}
}


args.eachMediaFolder{ dir ->
	// fetch only missing artwork by default
	if (dir.hasFile{it.name == 'movie.nfo'} && dir.hasFile{it.name == 'poster.jpg'} && dir.hasFile{it.name == 'fanart.jpg'}) {
		log.finest "Skipping $dir"
		return
	}

	def videos = dir.listFiles{ it.isVideo() }
	def query = _args.query
	def locale = any{ _args.language.locale }{ Locale.ENGLISH }
	def options = []

	if (query) {
		// manual search & sort by relevance
		options = TheMovieDB.searchMovie(query, locale).sortBySimilarity(query, { it.name })
	} else if (videos.size() > 0) {
		// run movie auto-detection for video files
		options = MediaDetection.detectMovie(videos[0], TheMovieDB, locale, true)
	}

	if (options.isEmpty()) {
		log.warning "$dir ${videos.name} => movie not found"
		return
	}

	// auto-select movie
	def movie = options[0]

	// maybe require user input
	if (options.size() > 1 && _args.strict) {
		movie = showInputDialog(options, dir.name, 'Select Movie:')
	}

	if (movie == null) {
		return null
	}

	log.fine "$dir => $movie"
	tryLogCatch {
		fetchMovieArtworkAndNfo(dir, movie, dir.getFiles{ it.isVideo() }.sort{ it.length() }.reverse().findResult{ it }, extras, false, locale)
	}
}
Sorry for the late reply.
i decided to downgrade to 4.7.5 with my existing script, it used to work
but now imdb wont return posters for movie type,
So i tried your script with 4.7.9
but it returns

Code: Select all

N:\temp>filebot -script movieartwork.groovy N:\temp\complete\movie\
N:\temp\complete\movie\Mom (2017) 720p HDTV => Mom (2017)
MissingPropertyException: No such property: extras for class: Script1
N:\temp\complete\movie\Nobody Knows (2004) 1080p BDRip => Nobody Knows (2004)
MissingPropertyException: No such property: extras for class: Script1
Skipping N:\temp\complete\movie\radarr\Be.Afraid.2017.DVDRip.x264-SPOOKS[rarbg]
Skipping N:\temp\complete\movie\radarr\Critters.2.1988.1080p.AMZN.WEBRip.DDP2.0.
x264-monkee
Skipping N:\temp\complete\movie\radarr\My.Pet.Dinosaur.2017.720p.BluRay.x264-PFa
[rarbg]
Skipping N:\temp\complete\movie\radarr\Pressure.2015.720p.BluRay.x264-VETO[rarbg
]
Skipping N:\temp\complete\movie\radarr\Sniper.Ultimate.Kill.2017.720p.BluRay.x26
4.DTS-HDC
N:\temp\complete\movie\radarr\Stick.It.2006.1080p.AMZN.WEBRip.DDP5.1.x264-SiGMA
=> Stick It (2006)
MissingPropertyException: No such property: extras for class: Script1
Any idea what error is this?
is there another alternative for fetching metadata from imdb and thetvdb?
kim
Power User
Posts: 1251
Joined: 15 May 2014, 16:17

Re: webservice.fanart.tv sending back 0 bytes

Post by kim »

this was missing:
add to the top

Code: Select all

extras    = tryQuietly{ extras.toBoolean() }

Code: Select all

def override = _args.conflict == 'override'
import static groovy.json.StringEscapeUtils.*
extras    = tryQuietly{ extras.toBoolean() }

/**
 * XBMC helper functions
 */
def scanVideoLibrary(host, port) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"VideoLibrary.Scan","id":1}""")
		}
	}
}

def showNotification(host, port, title, message, image) {
	tryLogCatch {
		telnet(host, port) { writer, reader ->
			writer.println("""{"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"${escapeJavaScript(title)}","message":"${escapeJavaScript(message)}", "image":"${escapeJavaScript(image)}"},"id":1}""")
		}
	}
}


/**



/**
 * TheMovieDB artwork/nfo helpers
 */
def fetchMovieArtwork(outputFile, movieInfo, category, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Artwork already exists: $outputFile"
		return outputFile
	}

	// select and fetch artwork
	def artwork = TheMovieDB.getArtwork(movieInfo.id, category, locale)
	def selection = [locale.language, 'en', null].findResult{ lang -> artwork.find{ it.matches(lang) } }
	if (selection == null) {
		log.finest "Artwork not found: $outputFile"
		return null
	}
	log.finest "Fetching $outputFile => $selection"
	return selection.url.saveAs(outputFile)
}

def fetchAllMovieArtwork(outputFolder, prefix, movieInfo, category, override, locale) {
	// select and fetch artwork
	def artwork = TheMovieDB.getArtwork(movieInfo.id, category, locale)
	def selection = [locale.language, 'en', null].findResults{ lang -> artwork.findAll{ it.matches(lang) } }.flatten().unique()
	if (selection == null) {
		log.finest "Artwork not found: $outputFolder"
		return null
	}
	selection.eachWithIndex{ s, i ->
		def outputFile = new File(outputFolder, "${prefix}${i+1}.jpg")
		if (outputFile.exists() && !override) {
			log.finest "Artwork already exists: $outputFile"
		} else {
			log.finest "Fetching $outputFile => $s"
			s.url.saveAs(outputFile)
		}
	}
}

def fetchMovieFanart(outputFile, movieInfo, type, diskType, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Fanart already exists: $outputFile"
		return outputFile
	}

	def artwork = FanartTV.getArtwork(movieInfo.id, "movies", locale)
	def fanart = [locale, null].findResult{ lang -> artwork.find{ it.matches(type, diskType, lang) } }
	if (fanart == null) {
		log.finest "Fanart not found: $outputFile / $type"
		return null
	}
	log.finest "Fetching $outputFile => $fanart"
	return fanart.url.saveAs(outputFile)
}

def fetchMovieNfo(outputFile, movieInfo, movieFile, override) {
	def i = movieInfo
    "http://www.imdb.com/title/tt${(i.imdbId ?: 0).pad(7)}"

	.saveAs(outputFile)
}
def fetchMovieArtworkAndNfo(movieDir, movie, movieFile = null, extras = false, override = false, locale = Locale.ENGLISH) {
	tryLogCatch {
		def movieInfo = TheMovieDB.getMovieInfo(movie, locale, true)

		// fetch nfo
		fetchMovieNfo(movieDir.resolve('movie.nfo'), movieInfo, movieFile, override)


		// fetch series banner, fanart, posters, etc
		fetchMovieArtwork(movieDir.resolve('poster.jpg'), movieInfo, 'posters', override, locale)
		fetchMovieArtwork(movieDir.resolve('fanart.jpg'), movieInfo, 'backdrops', override, locale)

	}
}

def copyIfPossible(File src, File dst) {
	if (src.exists() && !dst.exists()) {
		src.copyAs(dst)
	}
}


args.eachMediaFolder{ dir ->
	// fetch only missing artwork by default
	if (dir.hasFile{it.name == 'movie.nfo'} && dir.hasFile{it.name == 'poster.jpg'} && dir.hasFile{it.name == 'fanart.jpg'}) {
		log.finest "Skipping $dir"
		return
	}

	def videos = dir.listFiles{ it.isVideo() }
	def query = _args.query
	def locale = any{ _args.language.locale }{ Locale.ENGLISH }
	def options = []

	if (query) {
		// manual search & sort by relevance
		options = TheMovieDB.searchMovie(query, locale).sortBySimilarity(query, { it.name })
	} else if (videos.size() > 0) {
		// run movie auto-detection for video files
		options = MediaDetection.detectMovie(videos[0], TheMovieDB, locale, true)
	}

	if (options.isEmpty()) {
		log.warning "$dir ${videos.name} => movie not found"
		return
	}

	// auto-select movie
	def movie = options[0]

	// maybe require user input
	if (options.size() > 1 && _args.strict) {
		movie = showInputDialog(options, dir.name, 'Select Movie:')
	}

	if (movie == null) {
		return null
	}

	log.fine "$dir => $movie"
	tryLogCatch {
		fetchMovieArtworkAndNfo(dir, movie, dir.getFiles{ it.isVideo() }.sort{ it.length() }.reverse().findResult{ it }, extras, false, locale)
	}
}
is there another alternative for fetching metadata from imdb and thetvdb?
thetvdb = ONLY TV stuff
imdb = NO API = NO filebot support aka YOU need to make/program it ;)

btw: "extras" is from viewtopic.php?f=4&t=215 aka AMC... "--def extras=y Generate *.url files and fetch all available backdrops", but you deleted that part so you can just remove "extras" (fetchAllMovieArtwork and fetchMovieFanart is part of it) and if you don't use filebot to update Kodi/XBMC:

Code: Select all

def override = _args.conflict == 'override'
import static groovy.json.StringEscapeUtils.*

/**
 * TheMovieDB artwork/nfo helpers
 */
def fetchMovieArtwork(outputFile, movieInfo, category, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Artwork already exists: $outputFile"
		return outputFile
	}

	// select and fetch artwork
	def artwork = TheMovieDB.getArtwork(movieInfo.id, category, locale)
	def selection = [locale.language, 'en', null].findResult{ lang -> artwork.find{ it.matches(lang) } }
	if (selection == null) {
		log.finest "Artwork not found: $outputFile"
		return null
	}
	log.finest "Fetching $outputFile => $selection"
	return selection.url.saveAs(outputFile)
}

def fetchMovieNfo(outputFile, movieInfo, movieFile, override) {
	def i = movieInfo
    "http://www.imdb.com/title/tt${(i.imdbId ?: 0).pad(7)}"

	.saveAs(outputFile)
}
def fetchMovieArtworkAndNfo(movieDir, movie, movieFile = null, override = false, locale = Locale.ENGLISH) {
	tryLogCatch {
		def movieInfo = TheMovieDB.getMovieInfo(movie, locale, true)

		// fetch nfo
		fetchMovieNfo(movieDir.resolve('movie.nfo'), movieInfo, movieFile, override)


		// fetch series banner, fanart, posters, etc
		fetchMovieArtwork(movieDir.resolve('poster.jpg'), movieInfo, 'posters', override, locale)
		fetchMovieArtwork(movieDir.resolve('fanart.jpg'), movieInfo, 'backdrops', override, locale)

	}
}

def copyIfPossible(File src, File dst) {
	if (src.exists() && !dst.exists()) {
		src.copyAs(dst)
	}
}


args.eachMediaFolder{ dir ->
	// fetch only missing artwork by default
	if (dir.hasFile{it.name == 'movie.nfo'} && dir.hasFile{it.name == 'poster.jpg'} && dir.hasFile{it.name == 'fanart.jpg'}) {
		log.finest "Skipping $dir"
		return
	}

	def videos = dir.listFiles{ it.isVideo() }
	def query = _args.query
	def locale = any{ _args.language.locale }{ Locale.ENGLISH }
	def options = []

	if (query) {
		// manual search & sort by relevance
		options = TheMovieDB.searchMovie(query, locale).sortBySimilarity(query, { it.name })
	} else if (videos.size() > 0) {
		// run movie auto-detection for video files
		options = MediaDetection.detectMovie(videos[0], TheMovieDB, locale, true)
	}

	if (options.isEmpty()) {
		log.warning "$dir ${videos.name} => movie not found"
		return
	}

	// auto-select movie
	def movie = options[0]

	// maybe require user input
	if (options.size() > 1 && _args.strict) {
		movie = showInputDialog(options, dir.name, 'Select Movie:')
	}

	if (movie == null) {
		return null
	}

	log.fine "$dir => $movie"
	tryLogCatch {
		fetchMovieArtworkAndNfo(dir, movie, dir.getFiles{ it.isVideo() }.sort{ it.length() }.reverse().findResult{ it }, false, locale)
	}
}
Last edited by kim on 17 Oct 2017, 16:46, edited 1 time in total.
kim
Power User
Posts: 1251
Joined: 15 May 2014, 16:17

Re: webservice.fanart.tv sending back 0 bytes

Post by kim »

If you want more "metadata", you can add (put back) this part:

https://github.com/filebot/scripts/blob ... roovy#L247

Code: Select all

def fetchMovieNfo(outputFile, i, movieFile) {
	log.finest "Generate Movie NFO: $i.name [$i.id]"
	def mi = tryLogCatch{ movieFile ? MediaInfo.snapshot(movieFile) : null }
	def xml = XML {
		movie {
			title(i.name)
			originaltitle(i.originalName)
			sorttitle([i.collection, i.name, i.released as String].findAll{ it?.length() > 0 }.findResults{ it.sortName('$2') }.join(' :: '))
			set(i.collection)
			year(i.released?.year)
			rating(i.rating)
			votes(i.votes)
			mpaa(i.certification)
			id('tt' + (i.imdbId ?: 0).pad(7))
			plot(i.overview)
			tagline(i.tagline)
			runtime(i.runtime)
			i.genres.each{
				genre(it)
			}
			i.productionCountries.each{
				country(it)
			}
			i.productionCompanies.each{
				studio(it)
			}
			i.people.each{ p ->
				if (p.director) {
					director(p.name)
				} else if (p.writer) {
					credits(p.name)
				} else if (p.actor) { 
					actor {
						name(p.name)
						role(p.character)
					}
				} else if (p.department == 'Writing') {
					credits("$p.name ($p.job)")
				}
			}
			fileinfo {
				streamdetails {
					mi?.each { kind, streams ->
						def section = kind.toString().toLowerCase()
						streams.each { s ->
							if (section == 'video') {
								video {
									codec((s.'Encoded_Library/Name' ?: s.'CodecID/Hint' ?: s.'Format').replaceAll(/[ ].+/, '').trim())
									aspect(s.'DisplayAspectRatio')
									width(s.'Width')
									height(s.'Height')
								}
							}
							if (section == 'audio') {
								audio {
									codec((s.'CodecID/Hint' ?: s.'Format').replaceAll(/\p{Punct}/, '').trim())
									language(s.'Language/String3')
									channels(s.'Channel(s)_Original' ?: s.'Channel(s)')
								}
							}
							if (section == 'text') {
								subtitle { language(s.'Language/String3') }
							}
						}
					}
				}
			}
			imdb(id:"tt" + (i.imdbId ?: 0).pad(7), "http://www.imdb.com/title/tt" + (i.imdbId ?: 0).pad(7))
			tmdb(id:i.id, "http://www.themoviedb.org/movie/${i.id}")

			/** <trailer> element not supported due to lack of specification on acceptable values for both Plex and Kodi **/
		}
	}
	xml.saveAs(outputFile)
}
remember to remove ", override" from here:

Code: Select all

// fetch nfo
fetchMovieNfo(movieDir.resolve('movie.nfo'), movieInfo, movieFile, override)
but put it all together:

Code: Select all

def override = _args.conflict == 'override'
import static groovy.json.StringEscapeUtils.*

/**
 * TheMovieDB artwork/nfo helpers
 */
def fetchMovieArtwork(outputFile, movieInfo, category, override, locale) {
	if (outputFile.exists() && !override) {
		log.finest "Artwork already exists: $outputFile"
		return outputFile
	}

	// select and fetch artwork
	def artwork = TheMovieDB.getArtwork(movieInfo.id, category, locale)
	def selection = [locale.language, 'en', null].findResult{ lang -> artwork.find{ it.matches(lang) } }
	if (selection == null) {
		log.finest "Artwork not found: $outputFile"
		return null
	}
	log.finest "Fetching $outputFile => $selection"
	return selection.url.saveAs(outputFile)
}

def fetchMovieNfo(outputFile, i, movieFile) {
	log.finest "Generate Movie NFO: $i.name [$i.id]"
	def mi = tryLogCatch{ movieFile ? MediaInfo.snapshot(movieFile) : null }
	def xml = XML {
		movie {
			title(i.name)
			originaltitle(i.originalName)
			sorttitle([i.collection, i.name, i.released as String].findAll{ it?.length() > 0 }.findResults{ it.sortName('$2') }.join(' :: '))
			set(i.collection)
			year(i.released?.year)
			rating(i.rating)
			votes(i.votes)
			mpaa(i.certification)
			id('tt' + (i.imdbId ?: 0).pad(7))
			plot(i.overview)
			tagline(i.tagline)
			runtime(i.runtime)
			i.genres.each{
				genre(it)
			}
			i.productionCountries.each{
				country(it)
			}
			i.productionCompanies.each{
				studio(it)
			}
			i.people.each{ p ->
				if (p.director) {
					director(p.name)
				} else if (p.writer) {
					credits(p.name)
				} else if (p.actor) { 
					actor {
						name(p.name)
						role(p.character)
					}
				} else if (p.department == 'Writing') {
					credits("$p.name ($p.job)")
				}
			}
			fileinfo {
				streamdetails {
					mi?.each { kind, streams ->
						def section = kind.toString().toLowerCase()
						streams.each { s ->
							if (section == 'video') {
								video {
									codec((s.'Encoded_Library/Name' ?: s.'CodecID/Hint' ?: s.'Format').replaceAll(/[ ].+/, '').trim())
									aspect(s.'DisplayAspectRatio')
									width(s.'Width')
									height(s.'Height')
								}
							}
							if (section == 'audio') {
								audio {
									codec((s.'CodecID/Hint' ?: s.'Format').replaceAll(/\p{Punct}/, '').trim())
									language(s.'Language/String3')
									channels(s.'Channel(s)_Original' ?: s.'Channel(s)')
								}
							}
							if (section == 'text') {
								subtitle { language(s.'Language/String3') }
							}
						}
					}
				}
			}
			imdb(id:"tt" + (i.imdbId ?: 0).pad(7), "http://www.imdb.com/title/tt" + (i.imdbId ?: 0).pad(7))
			tmdb(id:i.id, "http://www.themoviedb.org/movie/${i.id}")
		}
	}
	xml.saveAs(outputFile)
}
def fetchMovieArtworkAndNfo(movieDir, movie, movieFile = null, override = false, locale = Locale.ENGLISH) {

	log.finest "movieFile: ${movieFile?.isFile()}"
	tryLogCatch {
		def movieInfo = TheMovieDB.getMovieInfo(movie, locale, true)

		// fetch nfo
		fetchMovieNfo(movieDir.resolve('movie.nfo'), movieInfo, movieFile)


		// fetch series banner, fanart, posters, etc
		fetchMovieArtwork(movieDir.resolve('poster.jpg'), movieInfo, 'posters', override, locale)
		fetchMovieArtwork(movieDir.resolve('fanart.jpg'), movieInfo, 'backdrops', override, locale)

	}
}

def copyIfPossible(File src, File dst) {
	if (src.exists() && !dst.exists()) {
		src.copyAs(dst)
	}
}


args.eachMediaFolder{ dir ->
	// fetch only missing artwork by default
	if (dir.hasFile{it.name == 'movie.nfo'} && dir.hasFile{it.name == 'poster.jpg'} && dir.hasFile{it.name == 'fanart.jpg'}) {
		log.finest "Skipping $dir"
		return
	}

	def videos = dir.listFiles{ it.isVideo() }
	def query = _args.query
	def locale = any{ _args.language.locale }{ Locale.ENGLISH }
	def options = []

	if (query) {
		// manual search & sort by relevance
		options = TheMovieDB.searchMovie(query, locale).sortBySimilarity(query, { it.name })
	} else if (videos.size() > 0) {
		// run movie auto-detection for video files
		options = MediaDetection.detectMovie(videos[0], TheMovieDB, locale, true)
	}

	if (options.isEmpty()) {
		log.warning "$dir ${videos.name} => movie not found"
		return
	}

	// auto-select movie
	def movie = options[0]

	// maybe require user input
	if (options.size() > 1 && _args.strict) {
		movie = showInputDialog(options, dir.name, 'Select Movie:')
	}

	if (movie == null) {
		return null
	}

	log.fine "$dir => $movie"
	tryLogCatch {
		fetchMovieArtworkAndNfo(dir, movie, dir.getFiles{ it.isVideo() }.sort{ it.length() }.reverse().findResult{ it }, false, locale)
	}
}
Last edited by kim on 17 Oct 2017, 17:51, edited 1 time in total.
zang
Posts: 5
Joined: 23 Sep 2013, 13:22

Re: webservice.fanart.tv sending back 0 bytes

Post by zang »

I'm lost here. What exactly is needed to fix these issues with 4.7.11 and amc.groovy? I'm tired of getting zero byte image files. I'd used 4.7.13, except it errors out with a JNA dependency not being met.
kim
Power User
Posts: 1251
Joined: 15 May 2014, 16:17

Re: webservice.fanart.tv sending back 0 bytes

Post by kim »

@zang if you have 4.7.13 then use it
the JNA problem, try downloading the files from here:
https://github.com/filebot/filebot/tree ... lib/native

"FileBot -script fn:sysinfo"
what is your output ?
denywinarto
Donor
Posts: 28
Joined: 30 Jul 2013, 01:15

Re: webservice.fanart.tv sending back 0 bytes

Post by denywinarto »

when will filebot get updated @rednoah?
the latest stable (r4984) now wont fetch images for movie as well..
kim
Power User
Posts: 1251
Joined: 15 May 2014, 16:17

Re: webservice.fanart.tv sending back 0 bytes

Post by kim »

"the latest stable (r4984) now wont fetch images for movie as well.."
No problem here, so... ?
User avatar
rednoah
The Source
Posts: 22923
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: webservice.fanart.tv sending back 0 bytes

Post by rednoah »

Please keep me posted on the movie poster issue, and make sure I include logs, so this can be fixed as part of the next release as well.
:idea: Please read the FAQ and How to Request Help.
denywinarto
Donor
Posts: 28
Joined: 30 Jul 2013, 01:15

Re: webservice.fanart.tv sending back 0 bytes

Post by denywinarto »

So is this a connection issue?

Code: Select all

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\Administrator>N:\temp\complete\movie\movie.bat

C:\Users\Administrator>filebot -script fn:artwork.tmdb N:\temp\complete\movie
^CTerminate batch job (Y/N)? y

C:\Users\Administrator>N:\temp\complete\movie\movie.bat

C:\Users\Administrator>filebot -script fn:artwork.tmdb N:\temp\complete\movie
N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRip.x264.AAC.-.Hon3y
 => Bareilly Ki Barfi (2017)
Generate Movie NFO: Bareilly Ki Barfi [467106]
Fetching N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRip.x264.AA
C.-.Hon3y\poster.jpg => [posters/1000x1500, http://image.tmdb.org/t/p/original/3
gGkq074z56JfXRBIQv5M043em2.jpg]
SocketTimeoutException: connect timed out
N:\temp\complete\movie\Jagga.Jasoos.2017.Hindi.720p.DvDRip.x264.AAC.-.Hon3y => J
agga Jasoos (2017)
Generate Movie NFO: Jagga Jasoos [401285]
Fetching N:\temp\complete\movie\Jagga.Jasoos.2017.Hindi.720p.DvDRip.x264.AAC.-.H
on3y\poster.jpg => [posters/1000x1500, hi, http://image.tmdb.org/t/p/original/aA
vF8e5w4xETbx8TUesCnVFJqSF.jpg]
Fetching N:\temp\complete\movie\Jagga.Jasoos.2017.Hindi.720p.DvDRip.x264.AAC.-.H
on3y\fanart.jpg => [backdrops/1280x720, en, http://image.tmdb.org/t/p/original/1
jc8XbdhHVP9E2QuRDSSrj2IoTc.jpg]
Resource not found: http://webservice.fanart.tv/v3/movies/401285?api_key=780b986
b22c35e6f7a134a2f392c2deb
Fanart not found: N:\temp\complete\movie\Jagga.Jasoos.2017.Hindi.720p.DvDRip.x26
4.AAC.-.Hon3y\clearart.png / hdmovieclearart
Fanart not found: N:\temp\complete\movie\Jagga.Jasoos.2017.Hindi.720p.DvDRip.x26
4.AAC.-.Hon3y\clearart.png / movieart
Fanart not found: N:\temp\complete\movie\Jagga.Jasoos.2017.Hindi.720p.DvDRip.x26
4.AAC.-.Hon3y\logo.png / hdmovielogo
Fanart not found: N:\temp\complete\movie\Jagga.Jasoos.2017.Hindi.720p.DvDRip.x26
4.AAC.-.Hon3y\logo.png / movielogo
Fanart not found: N:\temp\complete\movie\Jagga.Jasoos.2017.Hindi.720p.DvDRip.x26
4.AAC.-.Hon3y\disc.png / moviedisc
Fanart not found: N:\temp\complete\movie\Jagga.Jasoos.2017.Hindi.720p.DvDRip.x26
4.AAC.-.Hon3y\disc.png / moviedisc
Fanart not found: N:\temp\complete\movie\Jagga.Jasoos.2017.Hindi.720p.DvDRip.x26
4.AAC.-.Hon3y\disc.png / moviedisc
N:\temp\complete\movie\radarr\Hayride.2.2015.1080p.NF.WEBRip.DD5.1.x264-QOQ => H
ayride 2 (2015)
Generate Movie NFO: Hayride 2 [322163]
Fetching N:\temp\complete\movie\radarr\Hayride.2.2015.1080p.NF.WEBRip.DD5.1.x264
-QOQ\poster.jpg => [posters/2000x3000, en, http://image.tmdb.org/t/p/original/rf
jdK4JijwMHew3Jtac3ARKJlho.jpg]
Fetching N:\temp\complete\movie\radarr\Hayride.2.2015.1080p.NF.WEBRip.DD5.1.x264
-QOQ\fanart.jpg => [backdrops/1280x720, http://image.tmdb.org/t/p/original/xg6VY
4g56k3BMFEdTkFkmRM8Auy.jpg]
Resource not found: http://webservice.fanart.tv/v3/movies/322163?api_key=780b986
b22c35e6f7a134a2f392c2deb
Fanart not found: N:\temp\complete\movie\radarr\Hayride.2.2015.1080p.NF.WEBRip.D
D5.1.x264-QOQ\clearart.png / hdmovieclearart
Fanart not found: N:\temp\complete\movie\radarr\Hayride.2.2015.1080p.NF.WEBRip.D
D5.1.x264-QOQ\clearart.png / movieart
Fanart not found: N:\temp\complete\movie\radarr\Hayride.2.2015.1080p.NF.WEBRip.D
D5.1.x264-QOQ\logo.png / hdmovielogo
Fanart not found: N:\temp\complete\movie\radarr\Hayride.2.2015.1080p.NF.WEBRip.D
D5.1.x264-QOQ\logo.png / movielogo
Fanart not found: N:\temp\complete\movie\radarr\Hayride.2.2015.1080p.NF.WEBRip.D
D5.1.x264-QOQ\disc.png / moviedisc
Fanart not found: N:\temp\complete\movie\radarr\Hayride.2.2015.1080p.NF.WEBRip.D
D5.1.x264-QOQ\disc.png / moviedisc
Fanart not found: N:\temp\complete\movie\radarr\Hayride.2.2015.1080p.NF.WEBRip.D
D5.1.x264-QOQ\disc.png / moviedisc
N:\temp\complete\movie\tv-sonarr => The Exorcist (1973)
Generate Movie NFO: The Exorcist [9552]
Fetching N:\temp\complete\movie\tv-sonarr\poster.jpg => [posters/667x1000, en, h
ttp://image.tmdb.org/t/p/original/mBLSuXTAJExUFdqYFgZro7Y9ZDG.jpg]
Fetching N:\temp\complete\movie\tv-sonarr\fanart.jpg => [backdrops/1920x1080, en
, http://image.tmdb.org/t/p/original/9yatuqrO7f1gy1an6H3gOV3lJf6.jpg]
Fanart not found: N:\temp\complete\movie\tv-sonarr\clearart.png / hdmovieclearar
t
Fetching N:\temp\complete\movie\tv-sonarr\clearart.png => [movieart, en, 6.0, ht
tps://assets.fanart.tv/fanart/movies/9552/movieart/the-exorcist-4f0ac12e07e9c.pn
g]
Fetching N:\temp\complete\movie\tv-sonarr\logo.png => [hdmovielogo, en, 10.0, ht
tps://assets.fanart.tv/fanart/movies/9552/hdmovielogo/the-exorcist-5561fb4aa016a
.png]
Fetching N:\temp\complete\movie\tv-sonarr\disc.png => [moviedisc/bluray, en, 9.0
, https://assets.fanart.tv/fanart/movies/9552/moviedisc/the-exorcist-512bf653b4e
60.png]
Done ?(?????)?

C:\Users\Administrator>
User avatar
rednoah
The Source
Posts: 22923
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: webservice.fanart.tv sending back 0 bytes

Post by rednoah »

If you are referring to this, then yes, that's a network issue where the server was not reachable for some reason at the time:

Code: Select all

SocketTimeoutException: connect timed out
:idea: Please read the FAQ and How to Request Help.
denywinarto
Donor
Posts: 28
Joined: 30 Jul 2013, 01:15

Re: webservice.fanart.tv sending back 0 bytes

Post by denywinarto »

rednoah wrote: 24 Oct 2017, 00:31 If you are referring to this, then yes, that's a network issue where the server was not reachable for some reason at the time:

Code: Select all

SocketTimeoutException: connect timed out
Tested it again, now im getting this "resource not found"
Also, i was able to open the image links from my browser just fine

Code: Select all

N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRip.x264.AAC.-.Hon3y
=> Bareilly Ki Barfi (2017)
Generate Movie NFO: Bareilly Ki Barfi [467106]
Fetching N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRip.x264.AA
C.-.Hon3y\poster.jpg => [posters/1000x1500, http://image.tmdb.org/t/p/original/3
gGkq074z56JfXRBIQv5M043em2.jpg]
Fetching N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRip.x264.AA
C.-.Hon3y\fanart.jpg => [backdrops/1600x900, http://image.tmdb.org/t/p/original/
tgROuWt06yveuTHpTYUhSCAbqK1.jpg]
[b]Resource not found: http://webservice.fanart.tv/v3/movies/467106?api_key=780b986
b22c35e6f7a134a2f392c1deb[/b]
Fanart not found: N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRi
p.x264.AAC.-.Hon3y\clearart.png / hdmovieclearart
Fanart not found: N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRi
p.x264.AAC.-.Hon3y\clearart.png / movieart
Fanart not found: N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRi
p.x264.AAC.-.Hon3y\logo.png / hdmovielogo
Fanart not found: N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRi
p.x264.AAC.-.Hon3y\logo.png / movielogo
Fanart not found: N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRi
p.x264.AAC.-.Hon3y\disc.png / moviedisc
Fanart not found: N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRi
p.x264.AAC.-.Hon3y\disc.png / moviedisc
Fanart not found: N:\temp\complete\movie\Bareilly.Ki.Barfi.2017.Hindi.720p.DvDRi
p.x264.AAC.-.Hon3y\disc.png / moviedisc
denywinarto
Donor
Posts: 28
Joined: 30 Jul 2013, 01:15

Re: webservice.fanart.tv sending back 0 bytes

Post by denywinarto »

Sorry forgot to update, seems like the last time was a connection issue, would be great if we could add custom delay or something to keep retrying.
Anyways, only tvshow remains non functional now, please update it rednoah ..
thanks.
User avatar
rednoah
The Source
Posts: 22923
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: webservice.fanart.tv sending back 0 bytes

Post by rednoah »

FileBot 4.7.14 has been released and includes a fix for the 0 byte artwork issue among other things.
:idea: Please read the FAQ and How to Request Help.
kim
Power User
Posts: 1251
Joined: 15 May 2014, 16:17

Re: webservice.fanart.tv sending back 0 bytes

Post by kim »

it still say:
Version notes
Version number: 4.7.13.0
• Lots of minor optimizations and bug fixes
https://www.microsoft.com/en-us/store/p ... blggh52t9x


btw: will this ever get updated again ?
https://chocolatey.org/packages/filebot/
User avatar
rednoah
The Source
Posts: 22923
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: webservice.fanart.tv sending back 0 bytes

Post by rednoah »

1.
You might need to check for updates manually in the Microsoft Store app, otherwise you might not get updates immediately.


2.
Not planned. I see no advantage that chocolatey might have over the Microsoft Store (other than support for Windows 7/8).
:idea: Please read the FAQ and How to Request Help.
denywinarto
Donor
Posts: 28
Joined: 30 Jul 2013, 01:15

Re: webservice.fanart.tv sending back 0 bytes

Post by denywinarto »

Thanks! But the sourceforge is still older version, where do i get the newest one?
Post Reply