private string GetGameBackground(uint appId) { foreach (var url in backgroundUrls) { var bk = string.Format(url, appId); if (HttpDownloader.GetResponseCode(bk) == HttpStatusCode.OK) { return(bk); } } return(null); }
public static StorePageMetadata GetStoreMetadata(string offerPath) { // Remove edition from offer path, offer path is: /<franchise>/<game>/<edition> var match = Regex.Match(offerPath, @"(\/(.+?)\/(.+?))\/"); var offer = match.Groups[1].Value.ToString(); var url = string.Format(@"https://data3.origin.com/ocd{0}.en-us.irl.ocd", offer); if (HttpDownloader.GetResponseCode(url) == System.Net.HttpStatusCode.OK) { var stringData = Encoding.UTF8.GetString(HttpDownloader.DownloadData(url)); return JsonConvert.DeserializeObject<StorePageMetadata>(stringData); } else { return null; } }
public string SelectGoogleImage(string searchTerm, string tempFileName, double imageWidth = 0, double imageHeight = 0) { var model = new GoogleImageDownloadViewModel( new GoogleImageDownloadWindowFactory(), resources, searchTerm, imageWidth, imageHeight); if (model.OpenView() == true) { try { var url = model.SelectedImage?.ImageUrl; if (url.IsNullOrEmpty()) { return(null); } var response = HttpDownloader.GetResponseCode(url); if (response != HttpStatusCode.OK) { logger.Warn("Original Google image request failed: " + response.ToString()); url = model.SelectedImage.ThumbUrl; } return(ProcessMetadataFile(url, tempFileName)); } catch (Exception e) when(!PlayniteEnvironment.ThrowAllErrors) { logger.Error(e, $"Failed to use google image {model.SelectedImage?.ImageUrl}."); } } return(null); }
internal SteamGameMetadata DownloadGameMetadata(uint appId, BackgroundSource backgroundSource) { var metadata = new SteamGameMetadata(); var productInfo = GetAppInfo(appId); metadata.ProductDetails = productInfo; try { metadata.StoreDetails = GetStoreData(appId); } catch (Exception e) { logger.Error(e, $"Failed to download Steam store metadata {appId}"); } // Icon if (productInfo != null) { var iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.ico"; var icon = productInfo["common"]["clienticon"]; var iconUrl = string.Empty; if (!string.IsNullOrEmpty(icon.Value)) { iconUrl = string.Format(iconRoot, appId, icon.Value); } else { var newIcon = productInfo["common"]["icon"]; if (!string.IsNullOrEmpty(newIcon.Value)) { iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg"; iconUrl = string.Format(iconRoot, appId, newIcon.Value); } } // There might be no icon assigned to game if (!string.IsNullOrEmpty(iconUrl)) { metadata.Icon = new MetadataFile(iconUrl); } } // Image var imageRoot = @"https://steamcdn-a.akamaihd.net/steam/apps/{0}/header.jpg"; var imageUrl = string.Format(imageRoot, appId); if (HttpDownloader.GetResponseCode(imageUrl) == HttpStatusCode.OK) { metadata.CoverImage = new MetadataFile(imageUrl); } else { if (productInfo != null) { imageRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg"; var image = productInfo["common"]["logo"]; if (!string.IsNullOrEmpty(image.Value)) { imageUrl = string.Format(imageRoot, appId, image.Value); metadata.CoverImage = new MetadataFile(imageUrl); } } } // Background Image switch (backgroundSource) { case BackgroundSource.Image: metadata.BackgroundImage = new MetadataFile(GetGameBackground(appId)); break; case BackgroundSource.StoreScreenshot: if (metadata.StoreDetails != null) { metadata.BackgroundImage = new MetadataFile(Regex.Replace(metadata.StoreDetails.screenshots.First().path_full, "\\?.*$", "")); } break; case BackgroundSource.StoreBackground: metadata.BackgroundImage = new MetadataFile(string.Format(@"https://steamcdn-a.akamaihd.net/steam/apps/{0}/page_bg_generated_v6b.jpg", appId)); break; default: break; } return(metadata); }
internal SteamGameMetadata DownloadGameMetadata(uint appId, ISteamMetadataDownloadConfig cfg) { var metadata = new SteamGameMetadata(); var productInfo = GetAppInfo(appId); metadata.ProductDetails = productInfo; try { metadata.StoreDetails = GetStoreData(appId, cfg.MetadataOtherLanguage); if (cfg.MetadataDescriptionLanguage != cfg.MetadataOtherLanguage) { var storeDetailsInDescriptionLanguage = GetStoreData(appId, cfg.MetadataDescriptionLanguage); metadata.StoreDetails.short_description = storeDetailsInDescriptionLanguage.short_description; metadata.StoreDetails.detailed_description = storeDetailsInDescriptionLanguage.detailed_description; metadata.StoreDetails.about_the_game = storeDetailsInDescriptionLanguage.about_the_game; } } catch (Exception e) { logger.Error(e, $"Failed to download Steam store metadata {appId}"); } try { metadata.UserReviewDetails = GetUserReviewsData(appId); } catch (Exception e) { logger.Error(e, $"Failed to download Steam user reviews metadata {appId}"); } // Icon if (productInfo != null) { var iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.ico"; var icon = productInfo["common"]["clienticon"]; var iconUrl = string.Empty; if (!string.IsNullOrEmpty(icon.Value)) { iconUrl = string.Format(iconRoot, appId, icon.Value); } else { var newIcon = productInfo["common"]["icon"]; if (!string.IsNullOrEmpty(newIcon.Value)) { iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg"; iconUrl = string.Format(iconRoot, appId, newIcon.Value); } } // There might be no icon assigned to game if (!string.IsNullOrEmpty(iconUrl)) { metadata.Icon = new MetadataFile(iconUrl); } } // Image var useBanner = false; if (cfg.DownloadVerticalCovers) { var imageRoot = @"https://steamcdn-a.akamaihd.net/steam/apps/{0}/library_600x900_2x.jpg"; var imageUrl = string.Format(imageRoot, appId); if (HttpDownloader.GetResponseCode(imageUrl) == HttpStatusCode.OK) { metadata.CoverImage = new MetadataFile(imageUrl); } else { useBanner = true; } } if (useBanner || !cfg.DownloadVerticalCovers) { var imageRoot = @"https://steamcdn-a.akamaihd.net/steam/apps/{0}/header.jpg"; var imageUrl = string.Format(imageRoot, appId); if (HttpDownloader.GetResponseCode(imageUrl) == HttpStatusCode.OK) { metadata.CoverImage = new MetadataFile(imageUrl); } } if (metadata.CoverImage == null) { if (productInfo != null) { var imageRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg"; var image = productInfo["common"]["logo"]; if (!string.IsNullOrEmpty(image.Value)) { var imageUrl = string.Format(imageRoot, appId, image.Value); metadata.CoverImage = new MetadataFile(imageUrl); } } } // Background Image var bannerBk = string.Format(@"https://steamcdn-a.akamaihd.net/steam/apps/{0}/library_hero.jpg", appId); var storeBk = string.Format(@"https://steamcdn-a.akamaihd.net/steam/apps/{0}/page_bg_generated_v6b.jpg", appId); switch (cfg.BackgroundSource) { case BackgroundSource.Image: var bk = GetGameBackground(appId); if (string.IsNullOrEmpty(bk)) { if (HttpDownloader.GetResponseCode(bannerBk) == HttpStatusCode.OK) { metadata.BackgroundImage = new MetadataFile(bannerBk); } } else { metadata.BackgroundImage = new MetadataFile(bk); } break; case BackgroundSource.StoreScreenshot: if (metadata.StoreDetails != null) { metadata.BackgroundImage = new MetadataFile(Regex.Replace(metadata.StoreDetails.screenshots.First().path_full, "\\?.*$", "")); } break; case BackgroundSource.StoreBackground: if (HttpDownloader.GetResponseCode(storeBk) == HttpStatusCode.OK) { metadata.BackgroundImage = new MetadataFile(storeBk); } break; case BackgroundSource.Banner: if (HttpDownloader.GetResponseCode(bannerBk) == HttpStatusCode.OK) { metadata.BackgroundImage = new MetadataFile(bannerBk); } break; default: break; } return(metadata); }
public void GetResponseCodeTest() { Assert.AreEqual(HttpStatusCode.OK, HttpDownloader.GetResponseCode(@"https://playnite.link/favicon.ico")); Assert.AreEqual(HttpStatusCode.NotFound, HttpDownloader.GetResponseCode(@"https://playnite.link/test.tst")); }