public MediaProviderConfig(MediaProviderInfo mpi) { this.id = mpi.getId(); }
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; KodiScraper other = (KodiScraper) obj; if (providerInfo.getId() == null) { if (other.providerInfo.getId() != null) return false; } else if (!providerInfo.getId().equals(other.providerInfo.getId())) return false; return true; }
private MediaEpisode morphhTvEpisodeToMediaEpisode(BaseTvEpisode episode) { MediaEpisode ep = new MediaEpisode(TmdbMetadataProvider.providerInfo.getId()); ep.episode = episode.episode_number; ep.season = episode.season_number; ep.title = episode.name; ep.plot = episode.overview; if (episode.vote_average != null) { ep.rating = episode.vote_average.floatValue(); } if (episode.air_date != null) { Format formatter = new SimpleDateFormat("yyyy-MM-dd"); ep.firstAired = formatter.format(episode.air_date); } ep.voteCount = episode.vote_count; ep.ids.put(TmdbMetadataProvider.providerInfo.getId(), episode.id); return ep; }
private boolean matches(Movie tmmMovie, MovieIds ids) { if (ids.trakt != null && ids.trakt != 0 && ids.trakt == tmmMovie.getIdAsInt(providerInfo.getId())) { return true; } if (StringUtils.isNotEmpty(ids.imdb) && ids.imdb.equals(tmmMovie.getIdAsString(Constants.IMDB))) { return true; } if (ids.tmdb != null && ids.tmdb != 0 && ids.tmdb == tmmMovie.getIdAsInt(Constants.TMDB)) { return true; } return false; }
private boolean updateIDs(Movie tmmMovie, MovieIds ids) { boolean dirty = false; if (tmmMovie.getIdAsString(Constants.IMDB).isEmpty() && !StringUtils.isEmpty(ids.imdb)) { tmmMovie.setId(Constants.IMDB, ids.imdb); dirty = true; } if (tmmMovie.getIdAsInt(Constants.TMDB) == 0 && ids.tmdb != null && ids.tmdb != 0) { tmmMovie.setId(Constants.TMDB, ids.tmdb); dirty = true; } if (tmmMovie.getIdAsInt(providerInfo.getId()) == 0 && ids.trakt != null && ids.trakt != 0) { tmmMovie.setId(providerInfo.getId(), ids.trakt); dirty = true; } return dirty; }
@Override public MediaMetadata getMetadata(MediaScrapeOptions options) throws Exception { LOGGER.debug("Kodi: getMetadata(): " + options); if (options.getResult() == null || !scraper.getProviderInfo().getId().equals(options.getResult().getProviderId())) { throw new Exception("scraping with Kodi scrapers only with a prior result possible"); } return _getMetadata(options); }
static void processMediaArt(MediaMetadata md, MediaArtworkType type, String image) { MediaArtwork ma = new MediaArtwork(providerInfo.getId(), type); ma.setPreviewUrl(image); md.addMediaArt(ma); }
private boolean matches(TvShow tmmShow, ShowIds ids) { if (ids.trakt != null && ids.trakt != 0 && ids.trakt == tmmShow.getIdAsInt(providerInfo.getId())) { return true; } if (StringUtils.isNotEmpty(ids.imdb) && ids.imdb.equals(tmmShow.getIdAsString(Constants.IMDB))) { return true; } if (ids.tmdb != null && ids.tmdb != 0 && ids.tmdb == tmmShow.getIdAsInt(Constants.TMDB)) { return true; } if (ids.tvdb != null && ids.tvdb != 0 && ids.tvdb == tmmShow.getIdAsInt(Constants.TVDB)) { return true; } // not used atm // if (ids.tvrage != null && ids.tvrage != 0 && ids.tvrage == tmmShow.getIdAsInt(Constants.TVRAGEID)) { // return true; // } return false; }
private MediaSearchResult morphMovieToSearchResult(BaseMovie movie) { MediaSearchResult searchResult = new MediaSearchResult(providerInfo.getId(), MediaType.MOVIE); searchResult.setId(Integer.toString(movie.id)); searchResult.setTitle(movie.title); searchResult.setOriginalTitle(movie.original_title); searchResult.setOriginalLanguage(movie.original_language); searchResult.setPosterUrl(TmdbMetadataProvider.configuration.images.base_url + "w342" + movie.poster_path); // parse release date to year if (movie.release_date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(movie.release_date); searchResult.setYear(calendar.get(Calendar.YEAR)); } return searchResult; }
@Override protected MediaMetadata getMetadata(MediaScrapeOptions options) throws Exception { switch (options.getType()) { case TV_SHOW: return getTvShowMetadata(options); case TV_EPISODE: return getEpisodeMetadata(options); default: break; } return new MediaMetadata(providerInfo.getId()); }
private boolean updateIDs(TvShow tmmShow, ShowIds ids) { boolean dirty = false; if (tmmShow.getIdAsString(Constants.IMDB).isEmpty() && !StringUtils.isEmpty(ids.imdb)) { tmmShow.setId(Constants.IMDB, ids.imdb); dirty = true; } if (tmmShow.getIdAsInt(Constants.TMDB) == 0 && ids.tmdb != null && ids.tmdb != 0) { tmmShow.setId(Constants.TMDB, ids.tmdb); dirty = true; } if (tmmShow.getIdAsInt(providerInfo.getId()) == 0 && ids.trakt != null && ids.trakt != 0) { tmmShow.setId(providerInfo.getId(), ids.trakt); dirty = true; } if (tmmShow.getIdAsInt(Constants.TVDB) == 0 && ids.tvdb != null && ids.tvdb != 0) { tmmShow.setId(Constants.TVDB, ids.tvdb); dirty = true; } // not used atm // if (tmmShow.getIdAsInt(Constants.TVRAGEID) == 0 && ids.tvrage != null && ids.tvrage != 0) { // tmmShow.setId(Constants.TVRAGEID, ids.tvrage); // dirty = true; // } return dirty; }
private List<MediaArtwork> genMA(List<Entry> entries, MediaArtworkType type) { List<MediaArtwork> artworks = new ArrayList<>(); for (Entry image : ListUtils.nullSafe(entries)) { MediaArtwork ma = new MediaArtwork(providerInfo.getId(), type); ma.setDefaultUrl(BASE_URL + image.getOriginal()); ma.setPreviewUrl(BASE_URL + image.getImage()); ma.setAnimated(true); // ma.setImdbId(m.getImdbid()); ma.setLanguage(image.getLanguage().toLowerCase(Locale.ROOT)); artworks.add(ma); } return artworks; }
private MediaSearchResult morphTvShowToSearchResult(BaseTvShow tvShow, MediaSearchOptions query) { MediaSearchResult result = new MediaSearchResult(TmdbMetadataProvider.providerInfo.getId(), MediaType.TV_SHOW); result.setId(Integer.toString(tvShow.id)); result.setTitle(tvShow.name); result.setOriginalTitle(tvShow.original_name); result.setPosterUrl(TmdbMetadataProvider.configuration.images.base_url + "w342" + tvShow.poster_path); // parse release date to year if (tvShow.first_air_date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(tvShow.first_air_date); result.setYear(calendar.get(Calendar.YEAR)); } // calculate score result.setScore(MetadataUtil.calculateScore(query.getQuery(), result.getTitle())); return result; }
private List<MediaArtwork> prepareArtwork(List<Image> images, ImageType type) { List<MediaArtwork> artworks = new ArrayList<>(); for (Image image : ListUtils.nullSafe(images)) { MediaArtwork ma = new MediaArtwork(providerInfo.getId(), type.type); ma.setDefaultUrl(image.url); ma.setPreviewUrl(image.url.replace("/fanart/", "/preview/")); ma.setLanguage(image.lang); ma.setLikes(image.likes); ma.addImageSize(type.width, type.height, image.url); ma.setSizeOrder(type.sizeOrder); if ("all".equals(image.season)) { ma.setSeason(0); } else { try { ma.setSeason(Integer.valueOf(image.season)); } catch (Exception ignored) { } } artworks.add(ma); // fanart.tv only knows clearlogo; copy that for the logo type if (type.type == MediaArtworkType.CLEARLOGO) { artworks.add(new MediaArtwork(ma, MediaArtworkType.LOGO)); } } return artworks; }
public MediaScraper(ScraperType type, IMediaProvider mediaProvider) { this.mediaProvider = mediaProvider; this.type = type; MediaProviderInfo mpi = mediaProvider.getProviderInfo(); this.id = mpi.getId(); this.name = mpi.getName(); this.version = mpi.getVersion(); this.description = mpi.getDescription(); this.summary = mpi.getDescription(); this.logoUrl = mpi.getProviderLogo(); }
protected MediaMetadata _getMetadata(MediaScrapeOptions options) throws Exception { MediaMetadata md = new MediaMetadata(scraper.getProviderInfo().getId()); MediaSearchResult result = options.getResult(); if (result.getIMDBId() != null && result.getIMDBId().contains("tt")) { md.setId(MediaMetadata.IMDB, result.getIMDBId()); } String xmlDetails = processor.getDetails(new KodiUrl(result.getUrl()), result.getId()); // save scraper ID if (!StringUtils.isEmpty(result.getId())) { md.setId(scraper.getProviderInfo().getId(), result.getId()); } // workaround: replace problematic sequences xmlDetails = xmlDetails.replace(" ", " "); processXmlContent(xmlDetails, md, result); // try to parse an imdb id from the url if (!StringUtils.isEmpty(result.getUrl()) && md.getId(MediaMetadata.IMDB) != null) { md.setId(MediaMetadata.IMDB, parseIMDBID(result.getUrl())); } return md; }
/** * Scrape meta data. */ public void scrapeMetaData() { try { // poster for preview setPosterUrl(result.getPosterUrl()); MediaScrapeOptions options = new MediaScrapeOptions(MediaType.TV_SHOW); options.setResult(result); options.setLanguage(LocaleUtils.toLocale(language.name())); options.setCountry(TvShowModuleManager.SETTINGS.getCertificationCountry()); LOGGER.info("====================================================="); LOGGER.info("Scraper metadata with scraper: " + mediaScraper.getMediaProvider().getProviderInfo().getId()); LOGGER.info(options.toString()); LOGGER.info("====================================================="); metadata = ((ITvShowMetadataProvider) mediaScraper.getMediaProvider()).getMetadata(options); setOverview(metadata.getPlot()); setTagline(metadata.getTagline()); if (StringUtils.isBlank(posterUrl) && !metadata.getMediaArt(MediaArtworkType.POSTER).isEmpty()) { setPosterUrl(metadata.getMediaArt(MediaArtworkType.POSTER).get(0).getPreviewUrl()); } scraped = true; } catch (Exception e) { LOGGER.error("scrapeMedia", e); MessageManager.instance.pushMessage( new Message(MessageLevel.ERROR, "TvShowChooser", "message.scrape.threadcrashed", new String[] { ":", e.getLocalizedMessage() })); } }
@Override public MediaMetadata call() throws Exception { try { IMovieMetadataProvider tmdb = null; List<IMovieMetadataProvider> providers = PluginManager.getInstance().getPluginsForInterface(IMovieMetadataProvider.class); for (IMovieMetadataProvider provider : providers) { if ("tmdb".equals(provider.getProviderInfo().getId())) { tmdb = provider; break; } } if (tmdb == null) { return null; } MediaScrapeOptions options = new MediaScrapeOptions(MediaType.MOVIE); options.setLanguage(language); options.setCountry(certificationCountry); options.setImdbId(imdbId); return tmdb.getMetadata(options); } catch (Exception e) { return null; } } }
public String executeFunction(String function, String input[]) { ScraperFunction func = scraper.getFunction(function); if (func != null) { func = scraper.getFunction(function).clone(); // get as clone, since we are changing regexps!!! LOGGER.info("** BEGIN Function: " + func.getName() + "; Dest: " + func.getDest() + "; ClearBuffers: " + func.isClearBuffers()); if (func.isClearBuffers()) { clearBuffers(); } setBuffers(input); executeRegexps(func.getRegExps()); LOGGER.info("** END Function: " + func.getName() + "; Dest: " + func.getDest() + "; ClearBuffers: " + func.isClearBuffers()); return getBuffer(func.getDest()); } else { LOGGER.warn("** Could not locate Function: " + function + " in the scraper " + scraper.getProviderInfo().getId()); return ""; } }