mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 04:52:07 -08:00
Tests: added many verify checks for missing cards, names, numbers, download settings:
* check wrong card numbers in sets; * check missing cards from set; * check wrong full art settings; * check missing and unknown sets in scryfall download settings; * check missing and unknown direct download links in scryfall download settings; * improved ability text check results; * removed unused tests for word checks;
This commit is contained in:
parent
b083dd48e6
commit
7aac355f4a
7 changed files with 533 additions and 128 deletions
|
|
@ -5,7 +5,6 @@ import com.google.gson.JsonElement;
|
|||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import mage.client.util.CardLanguage;
|
||||
import mage.util.CardUtil;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.mage.plugins.card.dl.DownloadServiceInfo;
|
||||
import org.mage.plugins.card.images.CardDownloadData;
|
||||
|
|
@ -87,19 +86,6 @@ public enum ScryfallImageSource implements CardImageSource {
|
|||
}
|
||||
}
|
||||
|
||||
// ARN and POR uses † notation for art variation cards
|
||||
if (baseUrl == null && card.getUsesVariousArt() && card.getSet().matches("ARN|POR")) {
|
||||
String collectorId = card.getCollectorId();
|
||||
if (collectorId.endsWith("b"))
|
||||
collectorId = collectorId.replace("b", "†");
|
||||
|
||||
final String scryfallCollectorId = CardUtil.urlEncode(collectorId);
|
||||
baseUrl = "https://api.scryfall.com/cards/" + formatSetName(card.getSet(), isToken) + "/"
|
||||
+ scryfallCollectorId + "/" + localizedCode + "?format=image";
|
||||
alternativeUrl = "https://api.scryfall.com/cards/" + formatSetName(card.getSet(), isToken) + "/"
|
||||
+ scryfallCollectorId + "/" + defaultCode + "?format=image";
|
||||
}
|
||||
|
||||
// double faced card
|
||||
// the front face can be downloaded normally
|
||||
// the back face is prepared beforehand
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import java.util.HashMap;
|
|||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -14,9 +16,12 @@ import java.util.Set;
|
|||
*/
|
||||
public class ScryfallImageSupportCards {
|
||||
|
||||
private static final Map<String, String> xmageSetsToScryfall = ImmutableMap.<String, String>builder().
|
||||
//put("xmage", "scryfall").
|
||||
build();
|
||||
private static final Map<String, String> xmageSetsToScryfall = ImmutableMap.<String, String>builder()
|
||||
.put("8EB", "8ED")
|
||||
.put("9EB", "9ED")
|
||||
.build();
|
||||
static final Pattern REGEXP_DIRECT_KEY_SET_CODE_PATTERN = Pattern.compile("(\\w+)\\/", Pattern.MULTILINE);
|
||||
static final Pattern REGEXP_DIRECT_KEY_CARD_NAME_PATTERN = Pattern.compile("\\/(.+?)\\/", Pattern.MULTILINE);
|
||||
|
||||
private static final Set<String> supportedSets = new ArraySet<String>() {
|
||||
{
|
||||
|
|
@ -504,26 +509,214 @@ public class ScryfallImageSupportCards {
|
|||
// set/card_name/card_number
|
||||
|
||||
// Cards with non-ASCII collector numbers must use direct download (cause xmage uses different card number)
|
||||
// Verify checks must check and show missing data from that list
|
||||
// 10E
|
||||
put("10E/Air Elemental/64*", "https://api.scryfall.com/cards/10e/64★/");
|
||||
put("10E/Anaba Bodyguard/187*", "https://api.scryfall.com/cards/10e/187★/");
|
||||
put("10E/Ancestor's Chosen/1*", "https://api.scryfall.com/cards/10e/1★/");
|
||||
put("10E/Angel of Mercy/2*", "https://api.scryfall.com/cards/10e/2★/");
|
||||
put("10E/Angelic Blessing/3*", "https://api.scryfall.com/cards/10e/3★/");
|
||||
put("10E/Angelic Wall/5*", "https://api.scryfall.com/cards/10e/5★/");
|
||||
put("10E/Arcane Teachings/188*", "https://api.scryfall.com/cards/10e/188★/");
|
||||
put("10E/Ascendant Evincar/127*", "https://api.scryfall.com/cards/10e/127★/");
|
||||
put("10E/Avatar of Might/251*", "https://api.scryfall.com/cards/10e/251★/");
|
||||
put("10E/Aven Cloudchaser/7*", "https://api.scryfall.com/cards/10e/7★/");
|
||||
put("10E/Aven Fisher/68*", "https://api.scryfall.com/cards/10e/68★/");
|
||||
put("10E/Aven Windreader/69*", "https://api.scryfall.com/cards/10e/69★/");
|
||||
put("10E/Benalish Knight/11*", "https://api.scryfall.com/cards/10e/11★/");
|
||||
put("10E/Birds of Paradise/252*", "https://api.scryfall.com/cards/10e/252★/");
|
||||
put("10E/Blanchwood Armor/253*", "https://api.scryfall.com/cards/10e/253★/");
|
||||
put("10E/Bog Wraith/130*", "https://api.scryfall.com/cards/10e/130★/");
|
||||
put("10E/Canopy Spider/254*", "https://api.scryfall.com/cards/10e/254★/");
|
||||
put("10E/Cloud Elemental/74*", "https://api.scryfall.com/cards/10e/74★/");
|
||||
put("10E/Cloud Sprite/75*", "https://api.scryfall.com/cards/10e/75★/");
|
||||
put("10E/Coat of Arms/316*", "https://api.scryfall.com/cards/10e/316★/");
|
||||
put("10E/Colossus of Sardia/317*", "https://api.scryfall.com/cards/10e/317★/");
|
||||
put("10E/Contaminated Bond/132*", "https://api.scryfall.com/cards/10e/132★/");
|
||||
put("10E/Dehydration/78*", "https://api.scryfall.com/cards/10e/78★/");
|
||||
put("10E/Dragon Roost/197*", "https://api.scryfall.com/cards/10e/197★/");
|
||||
put("10E/Drudge Skeletons/139*", "https://api.scryfall.com/cards/10e/139★/");
|
||||
put("10E/Dusk Imp/140*", "https://api.scryfall.com/cards/10e/140★/");
|
||||
put("10E/Elvish Champion/261*", "https://api.scryfall.com/cards/10e/261★/");
|
||||
put("10E/Faerie Conclave/351*", "https://api.scryfall.com/cards/10e/351★/");
|
||||
put("10E/Fear/142*", "https://api.scryfall.com/cards/10e/142★/");
|
||||
put("10E/Field Marshal/15*", "https://api.scryfall.com/cards/10e/15★/");
|
||||
put("10E/Firebreathing/200*", "https://api.scryfall.com/cards/10e/200★/");
|
||||
put("10E/Fog Elemental/85*", "https://api.scryfall.com/cards/10e/85★/");
|
||||
put("10E/Furnace Whelp/205*", "https://api.scryfall.com/cards/10e/205★/");
|
||||
put("10E/Ghitu Encampment/353*", "https://api.scryfall.com/cards/10e/353★/");
|
||||
put("10E/Giant Spider/267*", "https://api.scryfall.com/cards/10e/267★/");
|
||||
put("10E/Goblin King/207*", "https://api.scryfall.com/cards/10e/207★/");
|
||||
put("10E/Goblin Sky Raider/210*", "https://api.scryfall.com/cards/10e/210★/");
|
||||
put("10E/Heart of Light/19*", "https://api.scryfall.com/cards/10e/19★/");
|
||||
put("10E/Holy Strength/22*", "https://api.scryfall.com/cards/10e/22★/");
|
||||
put("10E/Hypnotic Specter/151*", "https://api.scryfall.com/cards/10e/151★/");
|
||||
put("10E/Kamahl, Pit Fighter/214*", "https://api.scryfall.com/cards/10e/214★/");
|
||||
put("10E/Leonin Scimitar/331*", "https://api.scryfall.com/cards/10e/331★/");
|
||||
put("10E/Lightning Elemental/217*", "https://api.scryfall.com/cards/10e/217★/");
|
||||
put("10E/Lord of the Pit/154*", "https://api.scryfall.com/cards/10e/154★/");
|
||||
put("10E/Loxodon Warhammer/332*", "https://api.scryfall.com/cards/10e/332★/");
|
||||
put("10E/Lure/276*", "https://api.scryfall.com/cards/10e/276★/");
|
||||
put("10E/Mahamoti Djinn/90*", "https://api.scryfall.com/cards/10e/90★/");
|
||||
put("10E/Mantis Engine/333*", "https://api.scryfall.com/cards/10e/333★/");
|
||||
put("10E/March of the Machines/91*", "https://api.scryfall.com/cards/10e/91★/");
|
||||
put("10E/Might Weaver/278*", "https://api.scryfall.com/cards/10e/278★/");
|
||||
//put("10E/Mind Bend/93*", "https://api.scryfall.com/cards/10e/93★/"); // not implemented
|
||||
put("10E/Mirri, Cat Warrior/279*", "https://api.scryfall.com/cards/10e/279★/");
|
||||
put("10E/Mobilization/29*", "https://api.scryfall.com/cards/10e/29★/");
|
||||
put("10E/Molimo, Maro-Sorcerer/280*", "https://api.scryfall.com/cards/10e/280★/");
|
||||
put("10E/Mortivore/161*", "https://api.scryfall.com/cards/10e/161★/");
|
||||
put("10E/Nekrataal/163*", "https://api.scryfall.com/cards/10e/163★/");
|
||||
put("10E/Nightmare/164*", "https://api.scryfall.com/cards/10e/164★/");
|
||||
put("10E/Nomad Mythmaker/30*", "https://api.scryfall.com/cards/10e/30★/");
|
||||
put("10E/Ornithopter/336*", "https://api.scryfall.com/cards/10e/336★/");
|
||||
put("10E/Overgrowth/283*", "https://api.scryfall.com/cards/10e/283★/");
|
||||
put("10E/Overrun/284*", "https://api.scryfall.com/cards/10e/284★/");
|
||||
put("10E/Pacifism/31*", "https://api.scryfall.com/cards/10e/31★/");
|
||||
put("10E/Paladin en-Vec/32*", "https://api.scryfall.com/cards/10e/32★/");
|
||||
put("10E/Pariah/33*", "https://api.scryfall.com/cards/10e/33★/");
|
||||
put("10E/Persuasion/95*", "https://api.scryfall.com/cards/10e/95★/");
|
||||
put("10E/Pincher Beetles/285*", "https://api.scryfall.com/cards/10e/285★/");
|
||||
put("10E/Plague Beetle/168*", "https://api.scryfall.com/cards/10e/168★/");
|
||||
put("10E/Platinum Angel/339*", "https://api.scryfall.com/cards/10e/339★/");
|
||||
put("10E/Primal Rage/286*", "https://api.scryfall.com/cards/10e/286★/");
|
||||
put("10E/Rage Weaver/223*", "https://api.scryfall.com/cards/10e/223★/");
|
||||
put("10E/Raging Goblin/224*", "https://api.scryfall.com/cards/10e/224★/");
|
||||
put("10E/Razormane Masticore/340*", "https://api.scryfall.com/cards/10e/340★/");
|
||||
put("10E/Regeneration/290*", "https://api.scryfall.com/cards/10e/290★/");
|
||||
put("10E/Reya Dawnbringer/35*", "https://api.scryfall.com/cards/10e/35★/");
|
||||
put("10E/Rhox/291*", "https://api.scryfall.com/cards/10e/291★/");
|
||||
put("10E/Robe of Mirrors/101*", "https://api.scryfall.com/cards/10e/101★/");
|
||||
put("10E/Rock Badger/226*", "https://api.scryfall.com/cards/10e/226★/");
|
||||
put("10E/Rootwater Commando/102*", "https://api.scryfall.com/cards/10e/102★/");
|
||||
put("10E/Rushwood Dryad/294*", "https://api.scryfall.com/cards/10e/294★/");
|
||||
put("10E/Sage Owl/104*", "https://api.scryfall.com/cards/10e/104★/");
|
||||
put("10E/Scalpelexis/105*", "https://api.scryfall.com/cards/10e/105★/");
|
||||
put("10E/Sengir Vampire/176*", "https://api.scryfall.com/cards/10e/176★/");
|
||||
put("10E/Serra Angel/39*", "https://api.scryfall.com/cards/10e/39★/");
|
||||
put("10E/Serra's Embrace/40*", "https://api.scryfall.com/cards/10e/40★/");
|
||||
put("10E/Severed Legion/177*", "https://api.scryfall.com/cards/10e/177★/");
|
||||
put("10E/Shimmering Wings/107*", "https://api.scryfall.com/cards/10e/107★/");
|
||||
put("10E/Shivan Dragon/230*", "https://api.scryfall.com/cards/10e/230★/");
|
||||
put("10E/Shivan Hellkite/231*", "https://api.scryfall.com/cards/10e/231★/");
|
||||
put("10E/Sky Weaver/109*", "https://api.scryfall.com/cards/10e/109★/");
|
||||
put("10E/Skyhunter Patrol/41*", "https://api.scryfall.com/cards/10e/41★/");
|
||||
put("10E/Skyhunter Prowler/42*", "https://api.scryfall.com/cards/10e/42★/");
|
||||
put("10E/Skyhunter Skirmisher/43*", "https://api.scryfall.com/cards/10e/43★/");
|
||||
put("10E/Snapping Drake/110*", "https://api.scryfall.com/cards/10e/110★/");
|
||||
put("10E/Spark Elemental/237*", "https://api.scryfall.com/cards/10e/237★/");
|
||||
put("10E/Spawning Pool/358*", "https://api.scryfall.com/cards/10e/358★/");
|
||||
put("10E/Spiketail Hatchling/111*", "https://api.scryfall.com/cards/10e/111★/");
|
||||
put("10E/Spirit Link/45*", "https://api.scryfall.com/cards/10e/45★/");
|
||||
put("10E/Stampeding Wildebeests/300*", "https://api.scryfall.com/cards/10e/300★/");
|
||||
put("10E/Steadfast Guard/48*", "https://api.scryfall.com/cards/10e/48★/");
|
||||
put("10E/Suntail Hawk/50*", "https://api.scryfall.com/cards/10e/50★/");
|
||||
put("10E/Tangle Spider/303*", "https://api.scryfall.com/cards/10e/303★/");
|
||||
put("10E/The Hive/324*", "https://api.scryfall.com/cards/10e/324★/");
|
||||
put("10E/Thieving Magpie/115*", "https://api.scryfall.com/cards/10e/115★/");
|
||||
put("10E/Threaten/242*", "https://api.scryfall.com/cards/10e/242★/");
|
||||
put("10E/Thundering Giant/243*", "https://api.scryfall.com/cards/10e/243★/");
|
||||
put("10E/Time Stop/117*", "https://api.scryfall.com/cards/10e/117★/");
|
||||
put("10E/Treetop Bracers/304*", "https://api.scryfall.com/cards/10e/304★/");
|
||||
put("10E/Treetop Village/361*", "https://api.scryfall.com/cards/10e/361★/");
|
||||
put("10E/Troll Ascetic/305*", "https://api.scryfall.com/cards/10e/305★/");
|
||||
put("10E/True Believer/53*", "https://api.scryfall.com/cards/10e/53★/");
|
||||
put("10E/Tundra Wolves/54*", "https://api.scryfall.com/cards/10e/54★/");
|
||||
put("10E/Uncontrollable Anger/244*", "https://api.scryfall.com/cards/10e/244★/");
|
||||
put("10E/Unholy Strength/185*", "https://api.scryfall.com/cards/10e/185★/");
|
||||
put("10E/Upwelling/306*", "https://api.scryfall.com/cards/10e/306★/");
|
||||
put("10E/Vampire Bats/186*", "https://api.scryfall.com/cards/10e/186★/");
|
||||
put("10E/Viashino Sandscout/246*", "https://api.scryfall.com/cards/10e/246★/");
|
||||
put("10E/Voice of All/56*", "https://api.scryfall.com/cards/10e/56★/");
|
||||
put("10E/Wall of Air/124*", "https://api.scryfall.com/cards/10e/124★/");
|
||||
put("10E/Wall of Fire/247*", "https://api.scryfall.com/cards/10e/247★/");
|
||||
put("10E/Wall of Swords/57*", "https://api.scryfall.com/cards/10e/57★/");
|
||||
put("10E/Wall of Wood/309*", "https://api.scryfall.com/cards/10e/309★/");
|
||||
put("10E/Whispersilk Cloak/345*", "https://api.scryfall.com/cards/10e/345★/");
|
||||
put("10E/Wild Griffin/59*", "https://api.scryfall.com/cards/10e/59★/");
|
||||
put("10E/Windborn Muse/60*", "https://api.scryfall.com/cards/10e/60★/");
|
||||
put("10E/Youthful Knight/62*", "https://api.scryfall.com/cards/10e/62★/");
|
||||
// 4ED
|
||||
put("4ED/El-Hajjaj/134+", "https://api.scryfall.com/cards/4ed/134†/");
|
||||
// 5ED
|
||||
put("5ED/Game of Chaos/232+", "https://api.scryfall.com/cards/5ed/232†/");
|
||||
put("5ED/Inferno/243+", "https://api.scryfall.com/cards/5ed/243†/");
|
||||
put("5ED/Ironclaw Curse/244+", "https://api.scryfall.com/cards/5ed/244†/");
|
||||
put("5ED/Manabarbs/250+", "https://api.scryfall.com/cards/5ed/250†/");
|
||||
put("5ED/Shivan Dragon/267+", "https://api.scryfall.com/cards/5ed/267†/");
|
||||
// AER
|
||||
put("AER/Alley Strangler/52+", "https://api.scryfall.com/cards/aer/52†/");
|
||||
put("AER/Dawnfeather Eagle/14+", "https://api.scryfall.com/cards/aer/14†/");
|
||||
put("AER/Wrangle/101+", "https://api.scryfall.com/cards/aer/101†/");
|
||||
// ARN
|
||||
put("ARN/Army of Allah/2+", "https://api.scryfall.com/cards/arn/2†/");
|
||||
put("ARN/Bird Maiden/37+", "https://api.scryfall.com/cards/arn/37†/");
|
||||
put("ARN/Erg Raiders/25+", "https://api.scryfall.com/cards/arn/25†/");
|
||||
put("ARN/Fishliver Oil/13+", "https://api.scryfall.com/cards/arn/13†/");
|
||||
put("ARN/Giant Tortoise/15+", "https://api.scryfall.com/cards/arn/15†/");
|
||||
put("ARN/Hasran Ogress/27+", "https://api.scryfall.com/cards/arn/27†/");
|
||||
put("ARN/Moorish Cavalry/7+", "https://api.scryfall.com/cards/arn/7†/");
|
||||
put("ARN/Nafs Asp/52+", "https://api.scryfall.com/cards/arn/52†/");
|
||||
put("ARN/Oubliette/31+", "https://api.scryfall.com/cards/arn/31†/");
|
||||
put("ARN/Piety/8+", "https://api.scryfall.com/cards/arn/8†/");
|
||||
put("ARN/Rukh Egg/43+", "https://api.scryfall.com/cards/arn/43†/");
|
||||
put("ARN/Stone-Throwing Devils/33+", "https://api.scryfall.com/cards/arn/33†/");
|
||||
put("ARN/War Elephant/11+", "https://api.scryfall.com/cards/arn/11†/");
|
||||
put("ARN/Wyluli Wolf/55+", "https://api.scryfall.com/cards/arn/55†/");
|
||||
// ATQ
|
||||
put("ATQ/Tawnos's Weaponry/70+", "https://api.scryfall.com/cards/atq/70†/");
|
||||
// DD2
|
||||
put("DD2/Chandra Nalaar/34*", "https://api.scryfall.com/cards/dd2/34★/");
|
||||
put("DD2/Jace Beleren/1*", "https://api.scryfall.com/cards/dd2/1★/");
|
||||
// DKM
|
||||
put("DKM/Icy Manipulator/36*", "https://api.scryfall.com/cards/dkm/36★/");
|
||||
put("DKM/Incinerate/14*", "https://api.scryfall.com/cards/dkm/14★/");
|
||||
put("DKM/Icy Manipulator/36s", "https://api.scryfall.com/cards/dkm/36★/");
|
||||
put("DKM/Incinerate/14s", "https://api.scryfall.com/cards/dkm/14★/");
|
||||
// DRK
|
||||
put("DRK/Fountain of Youth/103+", "https://api.scryfall.com/cards/drk/103†/");
|
||||
put("DRK/Gaea's Touch/77+", "https://api.scryfall.com/cards/drk/77†/");
|
||||
put("DRK/Runesword/107+", "https://api.scryfall.com/cards/drk/107†/");
|
||||
// J14
|
||||
put("J14/Plains/1*", "https://api.scryfall.com/cards/j14/1★/");
|
||||
put("J14/Island/2*", "https://api.scryfall.com/cards/j14/2★/");
|
||||
put("J14/Swamp/3*", "https://api.scryfall.com/cards/j14/3★/");
|
||||
put("J14/Mountain/4*", "https://api.scryfall.com/cards/j14/4★/");
|
||||
put("J14/Forest/5*", "https://api.scryfall.com/cards/j14/5★/");
|
||||
// KLD
|
||||
put("KLD/Arborback Stomper/142+", "https://api.scryfall.com/cards/kld/142†/");
|
||||
put("KLD/Brazen Scourge/107+", "https://api.scryfall.com/cards/kld/107†/");
|
||||
put("KLD/Terrain Elemental/272+", "https://api.scryfall.com/cards/kld/272†/");
|
||||
put("KLD/Wind Drake/70+", "https://api.scryfall.com/cards/kld/70†/");
|
||||
// M20
|
||||
put("M20/Corpse Knight/206+", "https://api.scryfall.com/cards/m20/206†/");
|
||||
// MIR
|
||||
put("MIR/Reality Ripple/87+", "https://api.scryfall.com/cards/mir/87†/");
|
||||
// ODY
|
||||
put("ODY/Cephalid Looter/72+", "https://api.scryfall.com/cards/ody/72†/");
|
||||
put("ODY/Seafloor Debris/325+", "https://api.scryfall.com/cards/ody/325†/");
|
||||
// PAL99
|
||||
put("PAL99/Island/3+", "https://api.scryfall.com/cards/pal99/3†/");
|
||||
// PLS
|
||||
put("PLS/Tahngarth, Talruum Hero/74*", "https://api.scryfall.com/cards/pls/74★/");
|
||||
put("PLS/Ertai, the Corrupted/107*", "https://api.scryfall.com/cards/pls/107★/");
|
||||
put("PLS/Skyship Weatherlight/133*", "https://api.scryfall.com/cards/pls/133★/");
|
||||
put("PLS/Tahngarth, Talruum Hero/74*", "https://api.scryfall.com/cards/pls/74★/");
|
||||
// POR
|
||||
put("POR/Anaconda/158+", "https://api.scryfall.com/cards/por/158†/");
|
||||
put("POR/Blaze/118+", "https://api.scryfall.com/cards/por/118†/");
|
||||
put("POR/Elite Cat Warrior/163+", "https://api.scryfall.com/cards/por/163†/");
|
||||
put("POR/Hand of Death/96+", "https://api.scryfall.com/cards/por/96†/");
|
||||
put("POR/Monstrous Growth/173+", "https://api.scryfall.com/cards/por/173†/");
|
||||
put("POR/Raging Goblin/145+", "https://api.scryfall.com/cards/por/145†/");
|
||||
put("POR/Warrior's Charge/38+", "https://api.scryfall.com/cards/por/38†/");
|
||||
// PROE
|
||||
put("PROE/Emrakul, the Aeons Torn/*4", "https://api.scryfall.com/cards/proe/★4/");
|
||||
put("PROE/Lord of Shatterskull Pass/*156", "https://api.scryfall.com/cards/proe/★156/");
|
||||
// PAL99
|
||||
put("PAL99/Island/3+", "https://api.scryfall.com/cards/pal99/3†/");
|
||||
//
|
||||
// PPRE
|
||||
put("PPRE/Beast of Burden/5+", "https://api.scryfall.com/cards/ppre/5†/");
|
||||
// PSOI
|
||||
put("PSOI/Tamiyo's Journal/265s+", "https://api.scryfall.com/cards/psoi/265s†/");
|
||||
// DKM
|
||||
put("DKM/Icy Manipulator/36s", "https://api.scryfall.com/cards/dkm/36★/");
|
||||
put("DKM/Incinerate/14s", "https://api.scryfall.com/cards/dkm/14★/");
|
||||
// PWAR
|
||||
put("PWAR/Ajani, the Greathearted/184s*", "https://api.scryfall.com/cards/pwar/184s★/");
|
||||
put("PWAR/Angrath, Captain of Chaos/227s*", "https://api.scryfall.com/cards/pwar/227s★/");
|
||||
|
|
@ -561,25 +754,81 @@ public class ScryfallImageSupportCards {
|
|||
put("PWAR/Ugin, the Ineffable/2s*", "https://api.scryfall.com/cards/pwar/2s★/");
|
||||
put("PWAR/Vivien, Champion of the Wilds/180s*", "https://api.scryfall.com/cards/pwar/180s★/");
|
||||
put("PWAR/Vraska, Swarm's Eminence/236s*", "https://api.scryfall.com/cards/pwar/236s★/");
|
||||
|
||||
// 8th Edition box set and 9th Edition box set
|
||||
// scryfall stores it with one set, by xmage split into two -- 8ED and 8EB, 9ED and 9EB
|
||||
put("8EB/Eager Cadet", "https://api.scryfall.com/cards/8ed/S1/");
|
||||
put("8EB/Vengeance", "https://api.scryfall.com/cards/8ed/S2/");
|
||||
put("8EB/Giant Octopus", "https://api.scryfall.com/cards/8ed/S3/");
|
||||
put("8EB/Sea Eagle", "https://api.scryfall.com/cards/8ed/S4/");
|
||||
put("8EB/Vizzerdrix", "https://api.scryfall.com/cards/8ed/S5/");
|
||||
put("8EB/Enormous Baloth", "https://api.scryfall.com/cards/8ed/S6/");
|
||||
put("8EB/Silverback Ape", "https://api.scryfall.com/cards/8ed/S7/");
|
||||
put("9EB/Eager Cadet", "https://api.scryfall.com/cards/9ed/S1/");
|
||||
put("9EB/Vengeance", "https://api.scryfall.com/cards/9ed/S3/");
|
||||
put("9EB/Coral Eel", "https://api.scryfall.com/cards/9ed/S3/");
|
||||
put("9EB/Giant Octopus", "https://api.scryfall.com/cards/9ed/S4/");
|
||||
put("9EB/Index", "https://api.scryfall.com/cards/9ed/S5/");
|
||||
put("9EB/Vizzerdrix", "https://api.scryfall.com/cards/9ed/S7/");
|
||||
put("9EB/Goblin Raider", "https://api.scryfall.com/cards/9ed/S8/");
|
||||
put("9EB/Enormous Baloth", "https://api.scryfall.com/cards/9ed/S9/");
|
||||
put("9EB/Spined Wurm", "https://api.scryfall.com/cards/9ed/S10/");
|
||||
// SHM
|
||||
put("SHM/Reflecting Pool/278*", "https://api.scryfall.com/cards/shm/278★/");
|
||||
// SOI
|
||||
put("SOI/Tamiyo's Journal/265+", "https://api.scryfall.com/cards/soi/265†/");
|
||||
put("SOI/Tamiyo's Journal/265+a", "https://api.scryfall.com/cards/soi/265†a/");
|
||||
put("SOI/Tamiyo's Journal/265+b", "https://api.scryfall.com/cards/soi/265†b/");
|
||||
put("SOI/Tamiyo's Journal/265+c", "https://api.scryfall.com/cards/soi/265†c/");
|
||||
put("SOI/Tamiyo's Journal/265+d", "https://api.scryfall.com/cards/soi/265†d/");
|
||||
// THB
|
||||
put("THB/Temple of Abandon/347*", "https://api.scryfall.com/cards/thb/347★/");
|
||||
// UNH
|
||||
put("UNH/Aesthetic Consultation/48*", "https://api.scryfall.com/cards/unh/48★/");
|
||||
put("UNH/AWOL/2*", "https://api.scryfall.com/cards/unh/2★/");
|
||||
put("UNH/Bad Ass/49*", "https://api.scryfall.com/cards/unh/49★/");
|
||||
put("UNH/Blast from the Past/72*", "https://api.scryfall.com/cards/unh/72★/");
|
||||
put("UNH/Cardpecker/4*", "https://api.scryfall.com/cards/unh/4★/");
|
||||
put("UNH/Emcee/9*", "https://api.scryfall.com/cards/unh/9★/");
|
||||
put("UNH/Farewell to Arms/56*", "https://api.scryfall.com/cards/unh/56★/");
|
||||
put("UNH/Frazzled Editor/77*", "https://api.scryfall.com/cards/unh/77★/");
|
||||
put("UNH/Gleemax/121*", "https://api.scryfall.com/cards/unh/121★/");
|
||||
put("UNH/Goblin Mime/78*", "https://api.scryfall.com/cards/unh/78★/");
|
||||
put("UNH/Greater Morphling/34*", "https://api.scryfall.com/cards/unh/34★/");
|
||||
put("UNH/Keeper of the Sacred Word/101*", "https://api.scryfall.com/cards/unh/101★/");
|
||||
put("UNH/Laughing Hyena/103*", "https://api.scryfall.com/cards/unh/103★/");
|
||||
put("UNH/Letter Bomb/122*", "https://api.scryfall.com/cards/unh/122★/");
|
||||
put("UNH/Mana Screw/123*", "https://api.scryfall.com/cards/unh/123★/");
|
||||
put("UNH/Monkey Monkey Monkey/104*", "https://api.scryfall.com/cards/unh/104★/");
|
||||
put("UNH/Mons's Goblin Waiters/82*", "https://api.scryfall.com/cards/unh/82★/");
|
||||
put("UNH/Mox Lotus/124*", "https://api.scryfall.com/cards/unh/124★/");
|
||||
put("UNH/My First Tome/125*", "https://api.scryfall.com/cards/unh/125★/");
|
||||
put("UNH/Old Fogey/106*", "https://api.scryfall.com/cards/unh/106★/");
|
||||
put("UNH/Question Elemental?/43*", "https://api.scryfall.com/cards/unh/43★/");
|
||||
put("UNH/Richard Garfield, Ph.D./44*", "https://api.scryfall.com/cards/unh/44★/");
|
||||
put("UNH/Shoe Tree/109*", "https://api.scryfall.com/cards/unh/109★/");
|
||||
put("UNH/Standing Army/20*", "https://api.scryfall.com/cards/unh/20★/");
|
||||
put("UNH/Time Machine/128*", "https://api.scryfall.com/cards/unh/128★/");
|
||||
put("UNH/Touch and Go/90*", "https://api.scryfall.com/cards/unh/90★/");
|
||||
put("UNH/When Fluffy Bunnies Attack/67*", "https://api.scryfall.com/cards/unh/67★/");
|
||||
// WAR
|
||||
put("WAR/Ajani, the Greathearted/184*", "https://api.scryfall.com/cards/war/184★/");
|
||||
put("WAR/Angrath, Captain of Chaos/227*", "https://api.scryfall.com/cards/war/227★/");
|
||||
put("WAR/Arlinn, Voice of the Pack/150*", "https://api.scryfall.com/cards/war/150★/");
|
||||
put("WAR/Ashiok, Dream Render/228*", "https://api.scryfall.com/cards/war/228★/");
|
||||
put("WAR/Chandra, Fire Artisan/119*", "https://api.scryfall.com/cards/war/119★/");
|
||||
put("WAR/Davriel, Rogue Shadowmage/83*", "https://api.scryfall.com/cards/war/83★/");
|
||||
put("WAR/Domri, Anarch of Bolas/191*", "https://api.scryfall.com/cards/war/191★/");
|
||||
put("WAR/Dovin, Hand of Control/229*", "https://api.scryfall.com/cards/war/229★/");
|
||||
put("WAR/Gideon Blackblade/13*", "https://api.scryfall.com/cards/war/13★/");
|
||||
put("WAR/Huatli, the Sun's Heart/230*", "https://api.scryfall.com/cards/war/230★/");
|
||||
put("WAR/Jace, Wielder of Mysteries/54*", "https://api.scryfall.com/cards/war/54★/");
|
||||
put("WAR/Jaya, Venerated Firemage/135*", "https://api.scryfall.com/cards/war/135★/");
|
||||
put("WAR/Jiang Yanggu, Wildcrafter/164*", "https://api.scryfall.com/cards/war/164★/");
|
||||
put("WAR/Karn, the Great Creator/1*", "https://api.scryfall.com/cards/war/1★/");
|
||||
put("WAR/Kasmina, Enigmatic Mentor/56*", "https://api.scryfall.com/cards/war/56★/");
|
||||
put("WAR/Kaya, Bane of the Dead/231*", "https://api.scryfall.com/cards/war/231★/");
|
||||
put("WAR/Kiora, Behemoth Beckoner/232*", "https://api.scryfall.com/cards/war/232★/");
|
||||
put("WAR/Liliana, Dreadhorde General/97*", "https://api.scryfall.com/cards/war/97★/");
|
||||
put("WAR/Nahiri, Storm of Stone/233*", "https://api.scryfall.com/cards/war/233★/");
|
||||
put("WAR/Narset, Parter of Veils/61*", "https://api.scryfall.com/cards/war/61★/");
|
||||
put("WAR/Nicol Bolas, Dragon-God/207*", "https://api.scryfall.com/cards/war/207★/");
|
||||
put("WAR/Nissa, Who Shakes the World/169*", "https://api.scryfall.com/cards/war/169★/");
|
||||
put("WAR/Ob Nixilis, the Hate-Twisted/100*", "https://api.scryfall.com/cards/war/100★/");
|
||||
put("WAR/Ral, Storm Conduit/211*", "https://api.scryfall.com/cards/war/211★/");
|
||||
put("WAR/Saheeli, Sublime Artificer/234*", "https://api.scryfall.com/cards/war/234★/");
|
||||
put("WAR/Samut, Tyrant Smasher/235*", "https://api.scryfall.com/cards/war/235★/");
|
||||
put("WAR/Sarkhan the Masterless/143*", "https://api.scryfall.com/cards/war/143★/");
|
||||
put("WAR/Sorin, Vengeful Bloodlord/217*", "https://api.scryfall.com/cards/war/217★/");
|
||||
put("WAR/Tamiyo, Collector of Tales/220*", "https://api.scryfall.com/cards/war/220★/");
|
||||
put("WAR/Teferi, Time Raveler/221*", "https://api.scryfall.com/cards/war/221★/");
|
||||
put("WAR/Teyo, the Shieldmage/32*", "https://api.scryfall.com/cards/war/32★/");
|
||||
put("WAR/The Wanderer/37*", "https://api.scryfall.com/cards/war/37★/");
|
||||
put("WAR/Tibalt, Rakish Instigator/146*", "https://api.scryfall.com/cards/war/146★/");
|
||||
put("WAR/Ugin, the Ineffable/2*", "https://api.scryfall.com/cards/war/2★/");
|
||||
put("WAR/Vivien, Champion of the Wilds/180*", "https://api.scryfall.com/cards/war/180★/");
|
||||
put("WAR/Vraska, Swarm's Eminence/236*", "https://api.scryfall.com/cards/war/236★/");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -591,21 +840,49 @@ public class ScryfallImageSupportCards {
|
|||
return supportedSets;
|
||||
}
|
||||
|
||||
public static String findDirectDownloadLink(String setCode, String cardName, String cardNumber) {
|
||||
|
||||
public static String findDirectDownloadKey(String setCode, String cardName, String cardNumber) {
|
||||
// set/card/number
|
||||
String linkCode1 = setCode + "/" + cardName + "/" + cardNumber;
|
||||
if (directDownloadLinks.containsKey(linkCode1)) {
|
||||
return directDownloadLinks.get(linkCode1);
|
||||
return linkCode1;
|
||||
}
|
||||
|
||||
// set/card
|
||||
String linkCode2 = setCode + "/" + cardName;
|
||||
if (directDownloadLinks.containsKey(linkCode2)) {
|
||||
return directDownloadLinks.get(linkCode2);
|
||||
return linkCode2;
|
||||
}
|
||||
|
||||
// default
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String findDirectDownloadLink(String setCode, String cardName, String cardNumber) {
|
||||
String key = findDirectDownloadKey(setCode, cardName, cardNumber);
|
||||
return directDownloadLinks.get(key);
|
||||
}
|
||||
|
||||
public static String extractSetCodeFromDirectKey(String key) {
|
||||
// from: 8EB/Giant Octopus
|
||||
// to: 8EB
|
||||
Matcher matcher = REGEXP_DIRECT_KEY_SET_CODE_PATTERN.matcher(key);
|
||||
if (matcher.find()) {
|
||||
return matcher.group(1);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static String extractCardNameFromDirectKey(String key) {
|
||||
// from: 8EB/Giant Octopus/
|
||||
// to: Giant Octopus
|
||||
Matcher matcher = REGEXP_DIRECT_KEY_CARD_NAME_PATTERN.matcher(key + "/"); // add / for regexp workaround
|
||||
if (matcher.find()) {
|
||||
return matcher.group(1);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static Map<String, String> getDirectDownloadLinks() {
|
||||
return directDownloadLinks;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue