WIP: add artist category (#866)
* fix https * add beasts * Remove extra file * Prettier-ify code * Prettier-ify * add basic land guesser also added fetcher to filter all cards instead of only unique art * default to original makes basic better * added set symbol to basics added set symbol to the basics game mode. Changed name to "How Basic" * cleanup * changed some pixels * only load set data if needed * hacked fix for removing image from name * removed check from original * remove check from original * sort names by set instead of by set symbol * include battlebond * update cards for categories update for dominaria united * added commander category commander category * update basic land art * can use double feature * removing racist cards upstream this way we don't have to store the cards in the json * remove generated cards from digital commanders * fix counterspell setting default * added difficulty rating * updated padding * add dfc support for commanders * add artists * use latest non-digital if possible * change vsCode settings for python * update with latest non-digital printing * update artist list * update algo to select k samples * cleanup code * equally weight artists * weight everything equally * updated for all artists * update artists * add allowlist * update artists to min 50 art * allow promo to be replaced * update jsons * update with min 100 arts * update code to be smaller jsons * updated to 18 artists per game * update ui * update importing artists * update to 21 * move num artists to top of js file * update artistList to not include artist sigs * update to 50 artists * update for ub * update artist list * update ub defaults * update jsons * allow non-english cards to be replaced * update allowlist * update jsons * add watermark * update jsons * update jsons * make jsons slightly smaller * add checkmarks and x's * remove python * add no answer and checkbox and x Co-authored-by: Austin Chen <akrolsmir@gmail.com>
This commit is contained in:
parent
4dc3eada1f
commit
44deaf7b0a
|
@ -1,11 +1,10 @@
|
||||||
mode = 'PLAY'
|
mode = 'PLAY'
|
||||||
allData = {}
|
allData = {}
|
||||||
total = 0
|
total = 0
|
||||||
unseenTotal = 0
|
cardNames = []
|
||||||
probList = []
|
|
||||||
nameList = []
|
|
||||||
k = 12
|
k = 12
|
||||||
extra = 3
|
extra = 3
|
||||||
|
num_artists = k + extra * 2
|
||||||
artDict = {}
|
artDict = {}
|
||||||
totalCorrect = 0
|
totalCorrect = 0
|
||||||
totalSeen = 0
|
totalSeen = 0
|
||||||
|
@ -14,6 +13,7 @@ imagesLeft = k
|
||||||
maxRounds = 20
|
maxRounds = 20
|
||||||
whichGuesser = 'counterspell'
|
whichGuesser = 'counterspell'
|
||||||
un = false
|
un = false
|
||||||
|
ub = false
|
||||||
online = false
|
online = false
|
||||||
firstPrint = false
|
firstPrint = false
|
||||||
flag = true
|
flag = true
|
||||||
|
@ -31,6 +31,8 @@ document.location.search.split('&').forEach((pair) => {
|
||||||
online = v[1]
|
online = v[1]
|
||||||
} else if (v[0] === 'original') {
|
} else if (v[0] === 'original') {
|
||||||
firstPrint = v[1]
|
firstPrint = v[1]
|
||||||
|
} else if (v[0] === 'ub') {
|
||||||
|
ub = v[1]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -40,22 +42,26 @@ if (whichGuesser === 'basic') {
|
||||||
.then((data) => (sets = data))
|
.then((data) => (sets = data))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (whichGuesser === 'watermark') {
|
||||||
|
fetch('jsons/wm.json')
|
||||||
|
.then((response) => response.json())
|
||||||
|
.then((data) => (sets = data))
|
||||||
|
}
|
||||||
|
|
||||||
let firstFetch = fetch('jsons/' + whichGuesser + '.json')
|
let firstFetch = fetch('jsons/' + whichGuesser + '.json')
|
||||||
fetchToResponse(firstFetch)
|
fetchToResponse(firstFetch)
|
||||||
|
|
||||||
function putIntoMapAndFetch(data) {
|
function putIntoMapAndFetch(data) {
|
||||||
putIntoMap(data.data)
|
putIntoMap(data.data)
|
||||||
for (const [key, value] of Object.entries(allData)) {
|
if (whichGuesser == 'artist') {
|
||||||
nameList.push(key)
|
newArtistData = createNewArtistMap()
|
||||||
probList.push(
|
allData = newArtistData[0]
|
||||||
value.length + (probList.length === 0 ? 0 : probList[probList.length - 1])
|
total = newArtistData[1]
|
||||||
)
|
|
||||||
unseenTotal = total
|
|
||||||
}
|
}
|
||||||
|
cardNames = Array.from(Object.keys(allData))
|
||||||
window.console.log(allData)
|
window.console.log(allData)
|
||||||
|
window.console.log(cardNames)
|
||||||
window.console.log(total)
|
window.console.log(total)
|
||||||
window.console.log(probList)
|
|
||||||
window.console.log(nameList)
|
|
||||||
if (whichGuesser === 'counterspell') {
|
if (whichGuesser === 'counterspell') {
|
||||||
document.getElementById('guess-type').innerText = 'Counterspell Guesser'
|
document.getElementById('guess-type').innerText = 'Counterspell Guesser'
|
||||||
} else if (whichGuesser === 'burn') {
|
} else if (whichGuesser === 'burn') {
|
||||||
|
@ -66,32 +72,36 @@ function putIntoMapAndFetch(data) {
|
||||||
document.getElementById('guess-type').innerText = 'How Basic'
|
document.getElementById('guess-type').innerText = 'How Basic'
|
||||||
} else if (whichGuesser === 'commander') {
|
} else if (whichGuesser === 'commander') {
|
||||||
document.getElementById('guess-type').innerText = 'General Knowledge'
|
document.getElementById('guess-type').innerText = 'General Knowledge'
|
||||||
|
} else if (whichGuesser === 'watermark') {
|
||||||
|
document.getElementById('guess-type').innerText = 'Watermark It'
|
||||||
|
} else if (whichGuesser === 'artist') {
|
||||||
|
document.getElementById('guess-type').innerText = 'Aesthetic Consultation'
|
||||||
}
|
}
|
||||||
|
window.console.log(whichGuesser)
|
||||||
setUpNewGame()
|
setUpNewGame()
|
||||||
}
|
}
|
||||||
|
|
||||||
function getKSamples() {
|
function getKSamples() {
|
||||||
let usedCounters = new Set()
|
let usedCounters = new Set()
|
||||||
let currentTotal = unseenTotal
|
|
||||||
let samples = {}
|
let samples = {}
|
||||||
let i = 0
|
let i = 0
|
||||||
while (i < k) {
|
let allCards = Array.from(Object.keys(allData))
|
||||||
let rand = Math.floor(Math.random() * currentTotal)
|
shuffleArray(allCards)
|
||||||
let count = 0
|
window.console.log(allCards)
|
||||||
for (const [key, value] of Object.entries(allData)) {
|
for (let j = 0; j < allCards.length; j++) {
|
||||||
if (usedCounters.has(key)) {
|
key = allCards[j]
|
||||||
continue
|
value = allData[key]
|
||||||
} else if (count >= rand) {
|
if (usedCounters.has(key)) {
|
||||||
usedCounters.add(key)
|
continue
|
||||||
currentTotal -= value.length
|
} else {
|
||||||
unseenTotal--
|
window.console.log(key)
|
||||||
let randIndex = Math.floor(Math.random() * value.length)
|
usedCounters.add(key)
|
||||||
let arts = allData[key].splice(randIndex, 1)
|
let randIndex = Math.floor(Math.random() * value.length)
|
||||||
samples[arts[0].artImg] = [key, arts[0].normalImg]
|
let arts = allData[key].splice(randIndex, 1)
|
||||||
i++
|
samples[arts[0].artImg] = [key, arts[0].normalImg]
|
||||||
|
i++
|
||||||
|
if (i >= k) {
|
||||||
break
|
break
|
||||||
} else {
|
|
||||||
count += value.length
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,28 +111,61 @@ function getKSamples() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let count = 0
|
let count = 0
|
||||||
while (count < extra) {
|
shuffleArray(cardNames)
|
||||||
let rand = Math.floor(Math.random() * total)
|
for (let j = 0; j < cardNames.length; j++) {
|
||||||
for (let j = 0; j < nameList.length; j++) {
|
key = cardNames[j]
|
||||||
if (j >= rand) {
|
value = cardNames[key]
|
||||||
if (usedCounters.has(nameList[j])) {
|
if (usedCounters.has(key)) {
|
||||||
break
|
continue
|
||||||
}
|
} else {
|
||||||
usedCounters.add(nameList[j])
|
window.console.log(key)
|
||||||
count += 1
|
usedCounters.add(key)
|
||||||
|
count++
|
||||||
|
if (count >= extra) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return [samples, usedCounters]
|
return [samples, usedCounters]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createNewArtistMap() {
|
||||||
|
let usedCounters = new Set()
|
||||||
|
let samples = {}
|
||||||
|
let i = 0
|
||||||
|
let newTotal = 0
|
||||||
|
let allCards = []
|
||||||
|
for (const [key, value] of Object.entries(allData)) {
|
||||||
|
for (let j = 0; j < value.length; j++) {
|
||||||
|
allCards.push(key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
shuffleArray(allCards)
|
||||||
|
window.console.log(allCards)
|
||||||
|
for (let j = 0; j < allCards.length; j++) {
|
||||||
|
key = allCards[j]
|
||||||
|
value = allData[key]
|
||||||
|
if (usedCounters.has(key)) {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
window.console.log(key)
|
||||||
|
usedCounters.add(key)
|
||||||
|
samples[key] = value
|
||||||
|
newTotal += value.length
|
||||||
|
i++
|
||||||
|
if (i >= num_artists) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [samples, newTotal]
|
||||||
|
}
|
||||||
|
|
||||||
function fetchToResponse(fetch) {
|
function fetchToResponse(fetch) {
|
||||||
return fetch
|
return fetch
|
||||||
.then((response) => response.json())
|
.then((response) => response.json())
|
||||||
.then((json) => {
|
.then((json) => putIntoMapAndFetch(json))
|
||||||
putIntoMapAndFetch(json)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function determineIfSkip(card) {
|
function determineIfSkip(card) {
|
||||||
|
@ -131,6 +174,11 @@ function determineIfSkip(card) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!ub) {
|
||||||
|
if (card.security_stamp === 'triangle') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!online) {
|
if (!online) {
|
||||||
if (card.digital) {
|
if (card.digital) {
|
||||||
return true
|
return true
|
||||||
|
@ -138,16 +186,36 @@ function determineIfSkip(card) {
|
||||||
}
|
}
|
||||||
if (firstPrint) {
|
if (firstPrint) {
|
||||||
if (whichGuesser == 'basic') {
|
if (whichGuesser == 'basic') {
|
||||||
|
if (card.set_type !== 'expansion' && card.set_type !== 'funny') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
} else if (whichGuesser == 'artist') {
|
||||||
if (
|
if (
|
||||||
card.set_type !== 'expansion' &&
|
card.set_type === 'token' ||
|
||||||
card.set_type !== 'funny' &&
|
card.set_type === 'vanguard' ||
|
||||||
card.set_type !== 'draft_innovation'
|
card.set_type === 'planechase' ||
|
||||||
|
card.set_type === 'archenemy' ||
|
||||||
|
card.set_type === 'memorabilia'
|
||||||
|
) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
} else if (whichGuesser == 'watermark') {
|
||||||
|
if (
|
||||||
|
card.name === 'Set' ||
|
||||||
|
card.name === 'Planeswalker' ||
|
||||||
|
card.name === 'Flavor' ||
|
||||||
|
card.name === 'Conspiracy' ||
|
||||||
|
card.name === 'Foretell' ||
|
||||||
|
card.name === 'Tarkir' ||
|
||||||
|
card.set === 'h17' ||
|
||||||
|
card.set === 'ptg' ||
|
||||||
|
card.set === 'htr18'
|
||||||
) {
|
) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (
|
if (
|
||||||
card.reprint === true ||
|
card.reprint ||
|
||||||
(card.frame_effects && card.frame_effects.includes('showcase'))
|
(card.frame_effects && card.frame_effects.includes('showcase'))
|
||||||
) {
|
) {
|
||||||
return true
|
return true
|
||||||
|
@ -180,6 +248,9 @@ function putIntoMap(data) {
|
||||||
'" /> ' +
|
'" /> ' +
|
||||||
sets[name][0]
|
sets[name][0]
|
||||||
}
|
}
|
||||||
|
if (whichGuesser === 'watermark' && sets.hasOwnProperty(name)) {
|
||||||
|
name = sets[name]
|
||||||
|
}
|
||||||
let normalImg = ''
|
let normalImg = ''
|
||||||
if (card.image_uris.normal) {
|
if (card.image_uris.normal) {
|
||||||
normalImg = card.image_uris.normal
|
normalImg = card.image_uris.normal
|
||||||
|
@ -245,6 +316,7 @@ function setUpNewGame() {
|
||||||
currName.innerHTML = namesList[nameIndex - 1]
|
currName.innerHTML = namesList[nameIndex - 1]
|
||||||
nameBank.appendChild(currName)
|
nameBank.appendChild(currName)
|
||||||
}
|
}
|
||||||
|
document.querySelectorAll('.temporary-name-holder').forEach((x) => x.remove())
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeSymbol(name) {
|
function removeSymbol(name) {
|
||||||
|
@ -260,17 +332,53 @@ function checkAnswers() {
|
||||||
let incorrect = true
|
let incorrect = true
|
||||||
if (currCard.dataset.name) {
|
if (currCard.dataset.name) {
|
||||||
// remove image text
|
// remove image text
|
||||||
let guess = removeSymbol(
|
let guessWithSymbol = document.getElementById(
|
||||||
document.getElementById(currCard.dataset.name).innerText
|
currCard.dataset.name
|
||||||
)
|
).innerHTML
|
||||||
let ans = removeSymbol(artDict[currCard.dataset.url][0])
|
let ansWithSymbol = artDict[currCard.dataset.url][0]
|
||||||
window.console.log(ans, guess)
|
let guess = removeSymbol(guessWithSymbol)
|
||||||
|
let ans = removeSymbol(ansWithSymbol)
|
||||||
incorrect = ans !== guess
|
incorrect = ans !== guess
|
||||||
// decide if their guess was correct
|
// decide if their guess was correct
|
||||||
|
// window.console.log(ans, guess, incorrect)
|
||||||
|
correctAns = String.fromCodePoint(0x2705) + ' ' + ansWithSymbol
|
||||||
|
if (incorrect) {
|
||||||
|
window.console.log(
|
||||||
|
document.getElementById(currCard.dataset.name),
|
||||||
|
guess,
|
||||||
|
ans
|
||||||
|
)
|
||||||
|
document.getElementById(currCard.dataset.name).innerHTML =
|
||||||
|
String.fromCodePoint(0x274c) +
|
||||||
|
' <i style="opacity:.6"><strike>' +
|
||||||
|
guessWithSymbol +
|
||||||
|
'</strike></i><br/><span style="opacity:0;">' +
|
||||||
|
String.fromCodePoint(0x274c) +
|
||||||
|
'</span> ' +
|
||||||
|
ansWithSymbol
|
||||||
|
} else {
|
||||||
|
document.getElementById(currCard.dataset.name).innerHTML = correctAns
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
answerCorrectionHolder = document.createElement('div')
|
||||||
|
answerCorrectionHolder.classList.add('name')
|
||||||
|
answerCorrectionHolder.classList.add('temporary-name-holder')
|
||||||
|
|
||||||
|
answerCorrectionHolder.innerHTML =
|
||||||
|
String.fromCodePoint(0x274c) +
|
||||||
|
' <i style="opacity:.6"><No Answer> </i><br/><span style="opacity:0;">' +
|
||||||
|
String.fromCodePoint(0x274c) +
|
||||||
|
'</span> ' +
|
||||||
|
artDict[currCard.dataset.url][0]
|
||||||
|
currCard.appendChild(answerCorrectionHolder)
|
||||||
}
|
}
|
||||||
if (incorrect) currCard.classList.add('incorrect')
|
if (incorrect) {
|
||||||
// tally some kind of score
|
currCard.classList.add('incorrect')
|
||||||
if (incorrect) score--
|
// tally some kind of score
|
||||||
|
score--
|
||||||
|
// show the correct answer
|
||||||
|
}
|
||||||
|
|
||||||
// show the correct card
|
// show the correct card
|
||||||
currCard.style.backgroundImage =
|
currCard.style.backgroundImage =
|
||||||
"url('" + artDict[currCard.dataset.url][1] + "')"
|
"url('" + artDict[currCard.dataset.url][1] + "')"
|
||||||
|
|
|
@ -34,6 +34,13 @@
|
||||||
h1 {
|
h1 {
|
||||||
font-family: Verdana, Geneva, Tahoma, sans-serif;
|
font-family: Verdana, Geneva, Tahoma, sans-serif;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-game-button {
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
form {
|
form {
|
||||||
|
@ -52,8 +59,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.card {
|
.card {
|
||||||
width: 230px;
|
width: 300px;
|
||||||
height: 208px;
|
height: 259px;
|
||||||
border: 5px solid lightgrey;
|
border: 5px solid lightgrey;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
|
@ -63,7 +70,7 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
/*background-size: contain;*/
|
/*background-size: contain;*/
|
||||||
background-size: 220px;
|
background-size: 292px;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
transition: height 1s, background-image 1s, border 0.4s 0.6s;
|
transition: height 1s, background-image 1s, border 0.4s 0.6s;
|
||||||
background-position-y: calc(50% - 18px);
|
background-position-y: calc(50% - 18px);
|
||||||
|
@ -76,8 +83,12 @@
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.answer-page .card:not([data-name^='name'])::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.answer-page .card {
|
.answer-page .card {
|
||||||
height: 353px;
|
height: 453px;
|
||||||
/*padding-top: 310px;*/
|
/*padding-top: 310px;*/
|
||||||
/*background-size: cover;*/
|
/*background-size: cover;*/
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -144,6 +155,7 @@
|
||||||
|
|
||||||
.card .name {
|
.card .name {
|
||||||
border-radius: 0 0 5px 5px;
|
border-radius: 0 0 5px 5px;
|
||||||
|
width: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#submit {
|
#submit {
|
||||||
|
@ -165,7 +177,7 @@
|
||||||
padding: 8px 20px;
|
padding: 8px 20px;
|
||||||
background-color: lightpink;
|
background-color: lightpink;
|
||||||
border: none;
|
border: none;
|
||||||
position: absolute;
|
/* position: absolute; */
|
||||||
top: 5px;
|
top: 5px;
|
||||||
left: 20px;
|
left: 20px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
|
@ -201,6 +213,16 @@
|
||||||
h1 {
|
h1 {
|
||||||
margin-right: 240px;
|
margin-right: 240px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.answer-page .card {
|
||||||
|
height: 353px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
width: 230px;
|
||||||
|
height: 208px;
|
||||||
|
background-size: 220px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (orientation: portrait) and (max-width: 1100px) {
|
@media screen and (orientation: portrait) and (max-width: 1100px) {
|
||||||
|
@ -268,7 +290,15 @@
|
||||||
</noscript>
|
</noscript>
|
||||||
<!-- End Google Tag Manager (noscript) -->
|
<!-- End Google Tag Manager (noscript) -->
|
||||||
|
|
||||||
<h1><span id="guess-type"></span>: <span id="round-number"></span></h1>
|
<h1>
|
||||||
|
<form method="get" class="new-game-button" action="index.html">
|
||||||
|
<input type="submit" id="newGame" value="New Game" />
|
||||||
|
</form>
|
||||||
|
<div style="flex-grow: 1">
|
||||||
|
<span id="guess-type"></span>: <span id="round-number"></span
|
||||||
|
><span style="display: inline-block; width: 90px"> </span>
|
||||||
|
</div>
|
||||||
|
</h1>
|
||||||
|
|
||||||
<div class="play-page">
|
<div class="play-page">
|
||||||
<div
|
<div
|
||||||
|
@ -512,11 +542,9 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="position: absolute; top: 0; left: 0; right: 0; color: grey">
|
<div
|
||||||
<form method="get" action="index.html">
|
style="position: absolute; top: 0; left: 0; right: 0; color: grey"
|
||||||
<input type="submit" id="newGame" value="New Game" />
|
></div>
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div style="margin: -40px 0 0; height: 60px">
|
<div style="margin: -40px 0 0; height: 60px">
|
||||||
<a href="https://paypal.me/idamayer">Donate, buy us a boba 🧋</a>
|
<a href="https://paypal.me/idamayer">Donate, buy us a boba 🧋</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
import time
|
import time
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
|
import math
|
||||||
|
|
||||||
|
# queued categories: 'terror', 'wrath', 'zombie', 'artifact']
|
||||||
# add category name here
|
# add category name here
|
||||||
allCategories = ['counterspell', 'beast', 'burn', 'commander', 'artist'] #, 'terror', 'wrath', 'zombie', 'artifact']
|
allCategories = ['counterspell', 'beast', 'burn', 'commander']
|
||||||
specialCategories = ['set', 'basic']
|
specialCategories = ['set', 'basic', 'watermark']
|
||||||
|
artist_denylist = '-a%3A"jason+felix"+-a%3A“Harold+McNeill”+-a%3A"Terese+Nielsen"+-a%3A“Noah+Bradley”'
|
||||||
|
artist_allowlist = {'David Martin', 'V\u00e9ronique Meignaud', 'Christopher Rush', 'Rebecca Guay', 'DiTerlizzi',
|
||||||
|
'Anthony Francisco', 'Wylie Beckert', 'Rovina Cai', 'Dominik Mayer', 'Omar Rayyan', 'Thomas M. Baxa'}
|
||||||
|
|
||||||
|
|
||||||
def generate_initial_query(category):
|
def generate_initial_query(category):
|
||||||
|
@ -17,50 +22,70 @@ def generate_initial_query(category):
|
||||||
# string_query += 'otag%3Acreature-removal+o%3A%2Fdestroy+target.%2A+%28creature%7Cpermanent%29%2F+%28t' \
|
# string_query += 'otag%3Acreature-removal+o%3A%2Fdestroy+target.%2A+%28creature%7Cpermanent%29%2F+%28t' \
|
||||||
# '%3Ainstant+or+t%3Asorcery%29+o%3Atarget+not%3Aadventure'
|
# '%3Ainstant+or+t%3Asorcery%29+o%3Atarget+not%3Aadventure'
|
||||||
# elif category == 'wrath':
|
# elif category == 'wrath':
|
||||||
# string_query += 'otag%3Asweeper-creature+%28t%3Ainstant+or+t%3Asorcery%29+not%3Aadventure'
|
# string_query += 'otag%3Asweeper-creature+%28t%3Ainstant+or+t%3Asorcery%29+not%3Aadventure+not%3Adfc'
|
||||||
elif category == 'burn':
|
elif category == 'burn':
|
||||||
string_query += '%28c>%3Dr+or+mana>%3Dr%29+%28o%3A%2Fdamage+to+them%2F+or+%28o%3Adeals+o%3Adamage+o%3A' \
|
string_query += '%28c>%3Dr+or+mana>%3Dr%29+%28o%3A%2Fdamage+to+them%2F+or+%28o%3Adeals+o%3Adamage+o%3A' \
|
||||||
'%2Fcontroller%28%5C.%7C+%29%2F%29+or+o%3A%2F~+deals+%28.%7C..%29+damage+to+%28any+target%7C' \
|
'%2Fcontroller%28%5C.%7C+%29%2F%29+or+o%3A%2F~+deals+%28.%7C..%29+damage+to+%28any+target%7C' \
|
||||||
'.*player%28%5C.%7C+or+planeswalker%29%7C.*opponent%28%5C.%7C+or+planeswalker%29%29%2F%29' \
|
'.*player%28%5C.%7C+or+planeswalker%29%7C.*opponent%28%5C.%7C+or+planeswalker%29%29%2F%29' \
|
||||||
'+%28type%3Ainstant+or+type%3Asorcery%29+not%3Aadventure+not%3Adfc'
|
'+%28type%3Ainstant+or+type%3Asorcery%29+not%3Aadventure+not%3Adfc'
|
||||||
elif category == 'commander':
|
elif category == 'commander':
|
||||||
string_query += 'is%3Acommander+%28not%3Adigital+-banned%3Acommander+or+is%3Adigital+legal%3Ahistoricbrawl+or+legal%3Acommander+or+legal%3Abrawl%29'
|
string_query += 'is%3Acommander+%28not%3Adigital+-banned%3Acommander+or+is%3Adigital+legal%3Ahistoricbrawl' \
|
||||||
|
'+or+legal%3Acommander+or+legal%3Abrawl%29'
|
||||||
# elif category == 'zombie':
|
# elif category == 'zombie':
|
||||||
# string_query += '-type%3Alegendary+type%3Azombie+-type%3Atoken'
|
# string_query += '-type%3Alegendary+type%3Azombie+-type%3Atoken+not%3Adfc'
|
||||||
# elif category == 'artifact':
|
# elif category == 'artifact':
|
||||||
# string_query += 't%3Aartifact&order=released&dir=asc&unique=prints&page='
|
# string_query += 't%3Aartifact+not%3Adatestamped+not%3Adfc&order=released&dir=asc&unique=prints&page='
|
||||||
# elif category == 'artist':
|
|
||||||
# string_query+= 'a%3A"Wylie+Beckert"+or+a%3A“Ernanda+Souza”+or+a%3A"randy+gallegos"+or+a%3A“Amy+Weber”+or+a%3A“Dan+Frazier”+or+a%3A“Thomas+M.+Baxa”+or+a%3A“Phil+Foglio”+or+a%3A“DiTerlizzi”+or+a%3A"steve+argyle"+or+a%3A"Veronique+Meignaud"+or+a%3A"Magali+Villeneuve"+or+a%3A"Michael+Sutfin"+or+a%3A“Volkan+Baǵa”+or+a%3A“Franz+Vohwinkel”+or+a%3A"Nils+Hamm"+or+a%3A"Mark+Poole"+or+a%3A"Carl+Critchlow"+or+a%3A"rob+alexander"+or+a%3A"igor+kieryluk"+or+a%3A“Victor+Adame+Minguez”+or+a%3A"johannes+voss"+or+a%3A"Svetlin+Velinov"+or+a%3A"ron+spencer"+or+a%3A"rk+post"+or+a%3A"kev+walker"+or+a%3A"rebecca+guay"+or+a%3A"seb+mckinnon"+or+a%3A"pete+venters"+or+a%3A"greg+staples"+or+a%3A"Christopher+Moeller"+or+a%3A"christopher+rush"+or+a%3A"Mark+Tedin"'
|
|
||||||
# add category string query here
|
# add category string query here
|
||||||
string_query += '+-%28set%3Asld+%28%28cn>%3D231+cn<%3D233%29+or+%28cn>%3D321+cn<%3D324%29+or+%28cn>%3D185+cn' \
|
string_query += '+-%28set%3Asld+%28cn>%3D231+cn<%3D233+or+cn>%3D436+cn<%3D440+or+cn>%3D321+cn<%3D324+or' \
|
||||||
'<%3D189%29+or+%28cn>%3D138+cn<%3D142%29+or+%28cn>%3D364+cn<%3D368%29+or+cn%3A669+or+cn%3A670%29' \
|
'+cn>%3D185+cn<%3D189+or+cn>%3D138+cn<%3D142+or+cn>%3D364+cn<%3D368+or+cn%3A669+or+cn%3A670%29%29+' \
|
||||||
'%29+-name%3A%2F%5EA-%2F+not%3Asplit+-set%3Acmb2+-set%3Acmb1+-set%3Aplist+-st%3Amemorabilia' \
|
'-%28set%3Asta+cn>%3D64+cn<%3D126%29+-set%3Acmb2+-set%3Acmb1+not%3Asplit'
|
||||||
'+language%3Aenglish&order=released&dir=asc&unique=prints&page='
|
string_query += '+-st%3Amemorabilia+-set%3Aplist+-name%3A%2F%5EA-%2F&order=released&dir=asc&unique=prints&page='
|
||||||
print(string_query)
|
print(string_query)
|
||||||
return string_query
|
return string_query
|
||||||
|
|
||||||
|
|
||||||
def generate_initial_special_query(category):
|
def generate_initial_special_query(category):
|
||||||
string_query = 'https://api.scryfall.com/cards/search?q='
|
string_query = 'https://api.scryfall.com/cards/search?q='
|
||||||
if category == 'set':
|
if category == 'set':
|
||||||
return 'https://api.scryfall.com/sets'
|
return 'https://api.scryfall.com/sets'
|
||||||
elif category == 'basic':
|
elif category == 'basic':
|
||||||
string_query += 't%3Abasic&order=released&dir=asc&unique=prints&page='
|
string_query += 't%3Abasic&order=released&dir=asc&unique=prints&page='
|
||||||
|
elif category == 'watermark':
|
||||||
|
string_query += 'has%3Awatermark+not%3Apromo+-t%3Atoken+-st%3Amemorabilia+-set%3Aplist+-name%3A%2F%5EA-%2F&order=released&dir=asc&unique=prints&page='
|
||||||
# add category string query here
|
# add category string query here
|
||||||
print(string_query)
|
print(string_query)
|
||||||
return string_query
|
return string_query
|
||||||
|
|
||||||
|
|
||||||
|
def generate_initial_artist_query():
|
||||||
|
string_query = 'https://api.scryfall.com/cards/search?q=' + artist_denylist + \
|
||||||
|
'-atag%3Auniverses-beyond+-art%3Aartist-signature+artists%3D1+-st%3Afunny+not%3Aextra+not%3Adigital+-st%3Atoken+-t%3Avanguard+-st%3Amemorabilia+-t%3Ascheme+-t%3Aplane+-t%3APhenomenon&unique=art&as=grid&order=artist&page='
|
||||||
|
print("artistList")
|
||||||
|
print(string_query)
|
||||||
|
return string_query
|
||||||
|
|
||||||
|
|
||||||
|
def generate_individual_artist_query(artists, artist_list):
|
||||||
|
string_query = 'https://api.scryfall.com/cards/search?q=%28'
|
||||||
|
for artist in artists:
|
||||||
|
artist_split = artist_list[artist][0].split()
|
||||||
|
string_query += 'a%3A“' + '+'.join(artist_split) + '”+or+'
|
||||||
|
string_query = string_query[:-4]
|
||||||
|
string_query += '%29+-set%3Aplist-art%3Aartist-signature+artists%3D1+-name%3A%2F%5EA-%2F&order=released&dir=asc&unique=prints&page='
|
||||||
|
return string_query
|
||||||
|
|
||||||
|
|
||||||
def fetch_and_write_all(category, query):
|
def fetch_and_write_all(category, query):
|
||||||
count = 1
|
count = 1
|
||||||
will_repeat = True
|
will_repeat = True
|
||||||
all_cards = {'data' : []}
|
all_cards = {'data': []}
|
||||||
art_names = set()
|
art_names = dict()
|
||||||
while will_repeat:
|
while will_repeat:
|
||||||
response = fetch(query, count)
|
response = fetch(query, count)
|
||||||
will_repeat = response['has_more']
|
will_repeat = response['has_more']
|
||||||
count+=1
|
count += 1
|
||||||
to_compact_write_form(all_cards, art_names, response, category)
|
to_compact_write_form(all_cards, art_names, response)
|
||||||
|
|
||||||
with open('jsons/' + category + '.json', 'w') as f:
|
with open('jsons/' + category + '.json', 'w') as f:
|
||||||
json.dump(all_cards, f)
|
json.dump(all_cards, f)
|
||||||
|
|
||||||
|
@ -68,20 +93,74 @@ def fetch_and_write_all(category, query):
|
||||||
def fetch_and_write_all_special(category, query):
|
def fetch_and_write_all_special(category, query):
|
||||||
count = 1
|
count = 1
|
||||||
will_repeat = True
|
will_repeat = True
|
||||||
all_cards = {'data' : []}
|
all_cards = {'data': []}
|
||||||
art_names = set()
|
art_names = dict()
|
||||||
while will_repeat:
|
while will_repeat:
|
||||||
if category == 'set':
|
if category == 'set':
|
||||||
response = fetch_special(query)
|
response = fetch_special(query)
|
||||||
else:
|
else:
|
||||||
response = fetch(query, count)
|
response = fetch(query, count)
|
||||||
will_repeat = response['has_more']
|
will_repeat = response['has_more']
|
||||||
count+=1
|
count += 1
|
||||||
to_compact_write_form_special(all_cards, art_names, response, category)
|
to_compact_write_form_special(
|
||||||
|
all_cards, art_names, response, category, {})
|
||||||
|
|
||||||
with open('jsons/' + category + '.json', 'w') as f:
|
with open('jsons/' + category + '.json', 'w') as f:
|
||||||
json.dump(all_cards, f)
|
json.dump(all_cards, f)
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_and_write_all_artist():
|
||||||
|
all_cards = {'data': []}
|
||||||
|
will_repeat = True
|
||||||
|
count = 1
|
||||||
|
total_artists = 0
|
||||||
|
artists = json.load(open('jsons/artistList.json'))
|
||||||
|
artist_ids = list(artists.keys())
|
||||||
|
print(math.ceil(len(artist_ids)/37.0))
|
||||||
|
for i in range(math.ceil(len(artist_ids)/37.0)):
|
||||||
|
queried_artists_pre = artist_ids[i*37:min((i+1)*37, len(artist_ids))]
|
||||||
|
queried_artists = []
|
||||||
|
for j in range(len(queried_artists_pre)):
|
||||||
|
if artists[queried_artists_pre[j]][1] >= 50 or artists[queried_artists_pre[j]][0] in artist_allowlist:
|
||||||
|
queried_artists.append(queried_artists_pre[j])
|
||||||
|
print(queried_artists)
|
||||||
|
print(i)
|
||||||
|
if len(queried_artists) == 0:
|
||||||
|
continue
|
||||||
|
count = 1
|
||||||
|
will_repeat = True
|
||||||
|
art_names = dict()
|
||||||
|
query = generate_individual_artist_query(
|
||||||
|
queried_artists, artists)
|
||||||
|
print(query)
|
||||||
|
total_artists += len(queried_artists)
|
||||||
|
print(total_artists)
|
||||||
|
while will_repeat:
|
||||||
|
response = fetch(query, count)
|
||||||
|
will_repeat = response['has_more']
|
||||||
|
count += 1
|
||||||
|
to_compact_write_form_special(
|
||||||
|
all_cards, art_names, response, 'artist', artists)
|
||||||
|
print(len(art_names))
|
||||||
|
|
||||||
|
with open('jsons/artist.json', 'w') as f:
|
||||||
|
json.dump(all_cards, f)
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_and_write_initial_artist_query():
|
||||||
|
prev_artist = "dummy_artist"
|
||||||
|
artists = {"dummy_artist": [1, 1]}
|
||||||
|
all_artists_query = generate_initial_artist_query()
|
||||||
|
will_repeat = True
|
||||||
|
count = 1
|
||||||
|
while will_repeat:
|
||||||
|
print("artist fetching: "+str(count))
|
||||||
|
response = fetch(all_artists_query, count)
|
||||||
|
will_repeat = response['has_more']
|
||||||
|
count += 1
|
||||||
|
prev_artist = write_to_artist_list(response, artists, prev_artist)
|
||||||
|
with open('jsons/artistList.json', 'w') as f:
|
||||||
|
json.dump(artists, f)
|
||||||
|
|
||||||
|
|
||||||
def fetch(query, count):
|
def fetch(query, count):
|
||||||
|
@ -90,31 +169,29 @@ def fetch(query, count):
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
def fetch_special(query):
|
def fetch_special(query):
|
||||||
response = requests.get(f"{query}").json()
|
response = requests.get(f"{query}").json()
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
def to_compact_write_form(smallJson, art_names, response, category):
|
def write_art(art_names, id, index, card):
|
||||||
fieldsInCard = ['name', 'image_uris', 'flavor_name', 'reprint', 'frame_effects', 'digital', 'set_type']
|
if card['digital'] or card['set_type'] == 'promo' or card['promo'] or card['lang'] != 'en':
|
||||||
data = []
|
art_names[id] = index
|
||||||
|
else:
|
||||||
|
art_names[id] = -1
|
||||||
|
|
||||||
|
|
||||||
|
def to_compact_write_form(smallJson, art_names, response):
|
||||||
|
fieldsInCard = ['name', 'image_uris', 'flavor_name',
|
||||||
|
'reprint', 'frame_effects', 'digital', 'set_type', 'security_stamp']
|
||||||
|
data = smallJson['data']
|
||||||
# write all fields needed in card
|
# write all fields needed in card
|
||||||
for card in response['data']:
|
for card in response['data']:
|
||||||
# do not include racist cards
|
digital_holder = filter_card(card, art_names, data)
|
||||||
if 'content_warning' in card and card['content_warning'] == True:
|
if digital_holder == False:
|
||||||
continue
|
continue
|
||||||
# do not repeat art
|
|
||||||
if 'card_faces' in card:
|
|
||||||
card_face = card['card_faces'][0]
|
|
||||||
if 'illustration_id' not in card_face or card_face['illustration_id'] in art_names:
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
art_names.add(card_face['illustration_id'])
|
|
||||||
elif 'illustration_id' not in card or card['illustration_id'] in art_names:
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
art_names.add(card['illustration_id'])
|
|
||||||
write_card = dict()
|
write_card = dict()
|
||||||
for field in fieldsInCard:
|
for field in fieldsInCard:
|
||||||
# if field == 'name' and category == 'artifact':
|
# if field == 'name' and category == 'artifact':
|
||||||
|
@ -123,42 +200,149 @@ def to_compact_write_form(smallJson, art_names, response, category):
|
||||||
write_card['name'] = card['card_faces'][0]['name']
|
write_card['name'] = card['card_faces'][0]['name']
|
||||||
elif field == 'image_uris':
|
elif field == 'image_uris':
|
||||||
if 'card_faces' in card and 'image_uris' in card['card_faces'][0]:
|
if 'card_faces' in card and 'image_uris' in card['card_faces'][0]:
|
||||||
write_card['image_uris'] = write_image_uris(card['card_faces'][0]['image_uris'])
|
write_card['image_uris'] = write_image_uris(
|
||||||
|
card['card_faces'][0]['image_uris'])
|
||||||
else:
|
else:
|
||||||
write_card['image_uris'] = write_image_uris(card['image_uris'])
|
write_card['image_uris'] = write_image_uris(
|
||||||
elif field in card:
|
card['image_uris'])
|
||||||
|
elif field in card and card[field]:
|
||||||
write_card[field] = card[field]
|
write_card[field] = card[field]
|
||||||
data.append(write_card)
|
if digital_holder != -1:
|
||||||
smallJson['data'] += data
|
data[digital_holder] = write_card
|
||||||
|
else:
|
||||||
|
data.append(write_card)
|
||||||
|
|
||||||
def to_compact_write_form_special(smallJson, art_names, response, category):
|
|
||||||
fieldsInBasic = ['image_uris', 'set', 'set_type', 'digital']
|
def to_compact_write_form_special(smallJson, art_names, response, category, artists):
|
||||||
data = []
|
fieldsInBasic = ['image_uris', 'set',
|
||||||
|
'set_type', 'digital', 'security_stamp']
|
||||||
|
fieldsInArtist = ['image_uris', 'digital',
|
||||||
|
'set_type', 'artist_ids', 'security_stamp']
|
||||||
|
fieldsInWatermark = ['image_uris', 'watermark',
|
||||||
|
'set_type', 'digital', 'security_stamp', 'set']
|
||||||
|
data = smallJson['data']
|
||||||
# write all fields needed in card
|
# write all fields needed in card
|
||||||
for card in response['data']:
|
for card in response['data']:
|
||||||
# do not include racist cards
|
|
||||||
if 'content_warning' in card and card['content_warning'] == True:
|
|
||||||
continue
|
|
||||||
if category == 'basic':
|
if category == 'basic':
|
||||||
write_card = dict()
|
|
||||||
# do not repeat art
|
# do not repeat art
|
||||||
if 'illustration_id' not in card or card['illustration_id'] in art_names:
|
digital_holder = filter_card(card, art_names, data)
|
||||||
|
if digital_holder == False:
|
||||||
continue
|
continue
|
||||||
else:
|
write_card = dict()
|
||||||
art_names.add(card['illustration_id'])
|
|
||||||
for field in fieldsInBasic:
|
for field in fieldsInBasic:
|
||||||
if field == 'image_uris':
|
if field == 'image_uris':
|
||||||
write_card['image_uris'] = write_image_uris(card['image_uris'])
|
write_card['image_uris'] = write_image_uris(
|
||||||
|
card['image_uris'])
|
||||||
elif field == 'set':
|
elif field == 'set':
|
||||||
write_card['name'] = card['set']
|
write_card['name'] = card['set']
|
||||||
elif field in card:
|
elif field in card and card[field]:
|
||||||
write_card[field] = card[field]
|
write_card[field] = card[field]
|
||||||
data.append(write_card)
|
if digital_holder != -1:
|
||||||
|
data[digital_holder] = write_card
|
||||||
|
else:
|
||||||
|
data.append(write_card)
|
||||||
|
elif category == 'artist':
|
||||||
|
# do not repeat art
|
||||||
|
digital_holder = filter_card(card, art_names, data)
|
||||||
|
if digital_holder == False:
|
||||||
|
continue
|
||||||
|
write_card = dict()
|
||||||
|
for field in fieldsInArtist:
|
||||||
|
if field == 'artist_ids':
|
||||||
|
write_card['name'] = artists[card['artist_ids'][0]][0]
|
||||||
|
elif field == 'image_uris':
|
||||||
|
if 'card_faces' in card and 'image_uris' in card['card_faces'][0]:
|
||||||
|
write_card['image_uris'] = write_image_uris(
|
||||||
|
card['card_faces'][0]['image_uris'])
|
||||||
|
else:
|
||||||
|
write_card['image_uris'] = write_image_uris(
|
||||||
|
card['image_uris'])
|
||||||
|
elif field in card and card[field]:
|
||||||
|
write_card[field] = card[field]
|
||||||
|
if digital_holder != -1:
|
||||||
|
data[digital_holder] = write_card
|
||||||
|
else:
|
||||||
|
data.append(write_card)
|
||||||
|
elif category == 'watermark':
|
||||||
|
# do not repeat art
|
||||||
|
digital_holder = filter_card(card, art_names, data)
|
||||||
|
if digital_holder == False:
|
||||||
|
continue
|
||||||
|
if 'card_faces' in card and 'watermark' in card['card_faces'][0] and 'watermark' in card['card_faces'][1] and card['card_faces'][1]['watermark'] != card['card_faces'][0]['watermark']:
|
||||||
|
# print(card['name'])
|
||||||
|
continue
|
||||||
|
write_card = dict()
|
||||||
|
for field in fieldsInWatermark:
|
||||||
|
if field == 'watermark':
|
||||||
|
# print(card['name'])
|
||||||
|
if 'card_faces' in card:
|
||||||
|
write_card['name'] = card['card_faces'][0]['watermark'].capitalize(
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
write_card['name'] = card['watermark'].capitalize()
|
||||||
|
elif field == 'image_uris':
|
||||||
|
if 'card_faces' in card and 'image_uris' in card['card_faces'][0]:
|
||||||
|
write_card['image_uris'] = write_image_uris(
|
||||||
|
card['card_faces'][0]['image_uris'])
|
||||||
|
else:
|
||||||
|
write_card['image_uris'] = write_image_uris(
|
||||||
|
card['image_uris'])
|
||||||
|
elif field in card and card[field]:
|
||||||
|
write_card[field] = card[field]
|
||||||
|
if digital_holder != -1:
|
||||||
|
data[digital_holder] = write_card
|
||||||
|
else:
|
||||||
|
data.append(write_card)
|
||||||
else:
|
else:
|
||||||
|
# print(card['name'])
|
||||||
|
# print(category)
|
||||||
if card['set_type'] != 'token':
|
if card['set_type'] != 'token':
|
||||||
smallJson[card['code']] = [card['name'],card['icon_svg_uri']]
|
smallJson[card['code']] = [card['name'], card['icon_svg_uri']]
|
||||||
|
|
||||||
smallJson['data'] += data
|
|
||||||
|
def filter_card(card, art_names, data):
|
||||||
|
# do not include racist cards
|
||||||
|
if 'content_warning' in card and card['content_warning'] == True:
|
||||||
|
return False
|
||||||
|
# do not repeat art
|
||||||
|
digital_holder = -1
|
||||||
|
if 'card_faces' in card:
|
||||||
|
card_face = card['card_faces'][0]
|
||||||
|
if 'illustration_id' not in card_face or card_face['illustration_id'] in art_names and (art_names[card_face['illustration_id']] < 0 or card['digital']):
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
ind = len(data)
|
||||||
|
if (card_face['illustration_id'] in art_names):
|
||||||
|
digital_holder = art_names[card['illustration_id']]
|
||||||
|
ind = -1
|
||||||
|
write_art(
|
||||||
|
art_names, card_face['illustration_id'], ind, card)
|
||||||
|
elif 'illustration_id' not in card or card['illustration_id'] in art_names and (art_names[card['illustration_id']] < 0 or card['digital']):
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
ind = len(data)
|
||||||
|
if (card['illustration_id'] in art_names):
|
||||||
|
digital_holder = art_names[card['illustration_id']]
|
||||||
|
ind = -1
|
||||||
|
write_art(art_names, card['illustration_id'], ind, card)
|
||||||
|
return digital_holder
|
||||||
|
|
||||||
|
|
||||||
|
def write_to_artist_list(response, artists, prev_artist):
|
||||||
|
for card in response['data']:
|
||||||
|
artist_id = card['artist_ids'][0]
|
||||||
|
artist = card['artist']
|
||||||
|
if artist_id not in artists:
|
||||||
|
if artists[prev_artist][1] < 10:
|
||||||
|
del artists[prev_artist]
|
||||||
|
prev_artist = artist_id
|
||||||
|
print(artist)
|
||||||
|
artists[artist_id] = [artist, 1]
|
||||||
|
else:
|
||||||
|
if len(artist) < len(artists[artist_id][0]):
|
||||||
|
artists[artist_id][0] = artist
|
||||||
|
artists[artist_id][1] += 1
|
||||||
|
return prev_artist
|
||||||
|
|
||||||
|
|
||||||
# only write images needed
|
# only write images needed
|
||||||
|
@ -181,4 +365,8 @@ if __name__ == "__main__":
|
||||||
fetch_and_write_all(category, generate_initial_query(category))
|
fetch_and_write_all(category, generate_initial_query(category))
|
||||||
for category in specialCategories:
|
for category in specialCategories:
|
||||||
print(category)
|
print(category)
|
||||||
fetch_and_write_all_special(category, generate_initial_special_query(category))
|
fetch_and_write_all_special(
|
||||||
|
category, generate_initial_special_query(category))
|
||||||
|
# uncomment this once in a while, but it's expensive to run
|
||||||
|
fetch_and_write_initial_artist_query()
|
||||||
|
fetch_and_write_all_artist()
|
||||||
|
|
|
@ -18,11 +18,13 @@
|
||||||
})(window, document, 'script', 'dataLayer', 'GTM-M3MBVGG')
|
})(window, document, 'script', 'dataLayer', 'GTM-M3MBVGG')
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
function updateSettingDefault(digital, un, original) {
|
function updateSettingDefault(digital, un, ub, original, original_label) {
|
||||||
window.console.log(digital, un, original)
|
window.console.log(digital, un, original)
|
||||||
document.getElementById('digital').checked = digital
|
document.getElementById('digital').checked = digital
|
||||||
document.getElementById('un').checked = un
|
document.getElementById('un').checked = un
|
||||||
|
document.getElementById('ub').checked = ub
|
||||||
document.getElementById('original').checked = original
|
document.getElementById('original').checked = original
|
||||||
|
document.getElementById('original_label').innerText = original_label
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<!-- End Google Tag Manager -->
|
<!-- End Google Tag Manager -->
|
||||||
|
@ -151,7 +153,7 @@
|
||||||
id="counterspell"
|
id="counterspell"
|
||||||
name="whichguesser"
|
name="whichguesser"
|
||||||
value="counterspell"
|
value="counterspell"
|
||||||
onchange="updateSettingDefault(true, true, false)"
|
onchange="updateSettingDefault(true, true, true, false, 'only first printing')"
|
||||||
checked
|
checked
|
||||||
/>
|
/>
|
||||||
<label class="radio-label" for="counterspell">
|
<label class="radio-label" for="counterspell">
|
||||||
|
@ -174,7 +176,7 @@
|
||||||
id="burn"
|
id="burn"
|
||||||
name="whichguesser"
|
name="whichguesser"
|
||||||
value="burn"
|
value="burn"
|
||||||
onchange="updateSettingDefault(true, true, false)"
|
onchange="updateSettingDefault(true, true, true, false, 'only first printing')"
|
||||||
/>
|
/>
|
||||||
<label class="radio-label" for="burn">
|
<label class="radio-label" for="burn">
|
||||||
<img
|
<img
|
||||||
|
@ -196,7 +198,7 @@
|
||||||
id="beast"
|
id="beast"
|
||||||
name="whichguesser"
|
name="whichguesser"
|
||||||
value="beast"
|
value="beast"
|
||||||
onchange="updateSettingDefault(true, true, false)"
|
onchange="updateSettingDefault(true, true, false, false, 'only first printing')"
|
||||||
/>
|
/>
|
||||||
<label class="radio-label" for="beast">
|
<label class="radio-label" for="beast">
|
||||||
<img
|
<img
|
||||||
|
@ -218,7 +220,7 @@
|
||||||
id="basic"
|
id="basic"
|
||||||
name="whichguesser"
|
name="whichguesser"
|
||||||
value="basic"
|
value="basic"
|
||||||
onchange="updateSettingDefault(true, true, true)"
|
onchange="updateSettingDefault(true, true, false, true, 'only expansions')"
|
||||||
/>
|
/>
|
||||||
<label class="radio-label" for="basic">
|
<label class="radio-label" for="basic">
|
||||||
<img
|
<img
|
||||||
|
@ -240,7 +242,7 @@
|
||||||
id="commander"
|
id="commander"
|
||||||
name="whichguesser"
|
name="whichguesser"
|
||||||
value="commander"
|
value="commander"
|
||||||
onchange="updateSettingDefault(false, false, false)"
|
onchange="updateSettingDefault(false, false, true, false, 'only first printing')"
|
||||||
/>
|
/>
|
||||||
<label class="radio-label" for="commander">
|
<label class="radio-label" for="commander">
|
||||||
<img
|
<img
|
||||||
|
@ -256,6 +258,50 @@
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
|
<div class="option-row">
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
id="watermark"
|
||||||
|
name="whichguesser"
|
||||||
|
value="watermark"
|
||||||
|
onchange="updateSettingDefault(false, true, false, true, 'only affiliations')"
|
||||||
|
/>
|
||||||
|
<label class="radio-label" for="watermark">
|
||||||
|
<img
|
||||||
|
class="thumbnail"
|
||||||
|
src="https://c1.scryfall.com/file/scryfall-cards/art_crop/front/b/6/b6188abb-2402-4ac8-96e9-d4ee8d52ef1b.jpg?1562708703"
|
||||||
|
/>
|
||||||
|
<h3>Watermark It</h3></label
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
class="level-badge"
|
||||||
|
src="https://static.wikia.nocookie.net/mtgsalvation_gamepedia/images/0/00/Starter_level.jpg"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div class="option-row">
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
id="artist"
|
||||||
|
name="whichguesser"
|
||||||
|
value="artist"
|
||||||
|
onchange="updateSettingDefault(false, true, false, true, 'only include cards')"
|
||||||
|
/>
|
||||||
|
<label class="radio-label" for="artist">
|
||||||
|
<img
|
||||||
|
class="thumbnail"
|
||||||
|
src="https://c1.scryfall.com/file/scryfall-cards/art_crop/front/0/4/0464a507-20e5-42d5-8aca-12504a869f21.jpg?1562487441"
|
||||||
|
/>
|
||||||
|
<h3>Aesthetic Consultation</h3></label
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
class="level-badge"
|
||||||
|
src="https://static.wikia.nocookie.net/mtgsalvation_gamepedia/images/a/af/Expert_level.jpg"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
|
||||||
<details id="addl-options">
|
<details id="addl-options">
|
||||||
<summary>
|
<summary>
|
||||||
<img
|
<img
|
||||||
|
@ -265,13 +311,18 @@
|
||||||
Options
|
Options
|
||||||
</summary>
|
</summary>
|
||||||
<input type="checkbox" name="digital" id="digital" checked />
|
<input type="checkbox" name="digital" id="digital" checked />
|
||||||
<label for="digital">include digital cards</label>
|
<label for="digital">digital cards</label>
|
||||||
<br />
|
<br />
|
||||||
<input type="checkbox" name="un" id="un" checked />
|
<input type="checkbox" name="un" id="un" checked />
|
||||||
<label for="un">include un-cards</label>
|
<label for="un">un-cards</label>
|
||||||
|
<br />
|
||||||
|
<input type="checkbox" name="ub" id="ub" checked />
|
||||||
|
<label for="ub">Universes Beyond</label>
|
||||||
<br />
|
<br />
|
||||||
<input type="checkbox" name="original" id="original" />
|
<input type="checkbox" name="original" id="original" />
|
||||||
<label for="original">only original set printing</label>
|
<label for="original"
|
||||||
|
><span id="original_label">only first printing</span></label
|
||||||
|
>
|
||||||
</details>
|
</details>
|
||||||
<input type="submit" id="submit" value="Play" />
|
<input type="submit" id="submit" value="Play" />
|
||||||
</form>
|
</form>
|
||||||
|
|
File diff suppressed because one or more lines are too long
389
web/public/mtg/jsons/artistList.json
Normal file
389
web/public/mtg/jsons/artistList.json
Normal file
|
@ -0,0 +1,389 @@
|
||||||
|
{
|
||||||
|
"f21b412c-aef5-4d15-88be-4f40615acde3": ["Aaron J. Riley", 14],
|
||||||
|
"fc021f3d-773a-4706-bbe7-f602324f511f": ["Aaron Miller", 93],
|
||||||
|
"89023dad-e6c0-41e0-83fb-eb2bfbbdc3f2": ["Adam Paquette", 225],
|
||||||
|
"445bd2fb-4a70-4599-87a4-83cf5979fc56": ["Adam Rex", 40],
|
||||||
|
"be42f6f3-66d4-4957-9f1e-0591f8b95364": ["Adrian Smith", 24],
|
||||||
|
"70c20ea3-5ad6-4082-a337-6e994ae5828e": ["Alan Pollack", 39],
|
||||||
|
"bb677b1a-ce51-4888-83d6-5a94de461ff9": ["Alayna Danner", 82],
|
||||||
|
"5e470014-31cb-41b0-b054-e23374484449": ["Aleksi Briclot", 62],
|
||||||
|
"15869690-bf3c-4498-a577-409a6bde5c83": ["Alessandra Pisano", 12],
|
||||||
|
"85908891-3cc7-42b0-9b54-27ed0fe89c53": ["Alexander Forssberg", 14],
|
||||||
|
"3a6a9d37-e62c-44bd-90f2-f5126324e3f0": ["Alexander Mokhov", 19],
|
||||||
|
"ce381d25-868c-4f13-b1e9-e7cd2f67e994": ["Alex Brock", 10],
|
||||||
|
"1631a2ad-bf03-4ab9-b86c-60da982d58a1": ["Alex Horley-Orlandelli", 44],
|
||||||
|
"58b2a57c-50ca-4047-b4e7-efb28cb22851": ["Alex Konstad", 34],
|
||||||
|
"4f0a0e38-d74c-4e0b-ad91-fecccb1afa5d": ["Alix Branwyn", 16],
|
||||||
|
"8a56d854-b424-45ec-9262-e993a382a961": ["Allen Williams", 39],
|
||||||
|
"3605d81f-5c97-4958-9dcc-d44a85e10305": ["Anastasia Ovchinnikova", 72],
|
||||||
|
"05d233e7-4958-4f79-83e6-f9bf8b6ff78e": ["Anato Finnstark", 28],
|
||||||
|
"d084e74b-f63a-4107-b72c-ed6250ecc93b": ["Andreas Rocha", 22],
|
||||||
|
"e2f13a9a-57c5-40de-81d4-3b0723899cdf": ["Andreas Zafiratos", 19],
|
||||||
|
"f4a65a04-9e2e-4541-8d0e-f34e9517f092": ["Andrew Goldhawk", 25],
|
||||||
|
"adad79bf-cd52-456a-b170-740ed8bff0fc": ["Andrew Mar", 47],
|
||||||
|
"cb577db7-7f47-4f78-8682-6eaef8a77bd1": ["Andrew Robinson", 16],
|
||||||
|
"c04ff0b2-67a1-4238-82f7-6c67de734b56": ["Andrey Kuzinskiy", 37],
|
||||||
|
"1874cb2c-f690-475f-a217-c14f11166758": ["Anna Podedworna", 11],
|
||||||
|
"3516496c-c279-4b56-8239-720683d03ae0": ["Anna Steinbauer", 82],
|
||||||
|
"6ac24c4b-70e9-4286-8f4b-b40c92ab5847": ["Anthony Francisco", 33],
|
||||||
|
"afd2d541-4140-41ae-a28f-862436458fcb": ["Anthony Palumbo", 84],
|
||||||
|
"f009de11-3c8d-4663-b996-ca0c3e997fad": ["Anthony S. Waters", 105],
|
||||||
|
"74986d28-0001-4a78-827c-e490b325d0e3": ["Antonio Jos\u00e9 Manzanedo", 50],
|
||||||
|
"af10ecf2-eb82-4100-97b2-6c236b0fa644": ["Arnie Swekel", 50],
|
||||||
|
"02f6cdda-7a80-4184-853d-20b28d580868": ["Aurore Folny", 13],
|
||||||
|
"c5e439d8-b3db-4c13-ae93-4e129e3b9478": ["Austin Hsu", 29],
|
||||||
|
"798f63ec-41ad-474e-9708-df08193345c6": ["Bastien L. Deharme", 64],
|
||||||
|
"b089963c-610a-4d50-9206-d64b7caedef1": ["Bayard Wu", 23],
|
||||||
|
"7bc582c5-4733-4022-8cef-844b800be9f7": ["Ben Maier", 17],
|
||||||
|
"31cdca96-ecde-4245-bfb6-653929d57d9c": ["Ben Wootten", 12],
|
||||||
|
"10f26f94-64fc-4174-856e-701bea4f1521": ["Billy Christian", 28],
|
||||||
|
"a2e47e0e-68e6-4b7a-b91e-0ded197b94d1": ["Bob Petillo", 11],
|
||||||
|
"24d81dfa-3745-4386-93f8-7e67dddb3c8a": ["Bradley Williams", 25],
|
||||||
|
"f17194b9-10e9-44ea-9b65-6812ab398624": ["Brad Rigney", 27],
|
||||||
|
"2e90d3c1-e8ac-45c7-9d5a-63385c1a384d": ["Bram Sels", 40],
|
||||||
|
"0330b5e8-2cf0-4ecb-8fd7-e20a18bdeb20": ["Brandon Kitkouski", 35],
|
||||||
|
"19d4900c-f5a1-4c08-b5e0-b8d7ba733ec2": ["Brent Hollowell", 10],
|
||||||
|
"b4733d20-d538-4dd6-81fe-408c958ca54b": ["Brian Despain", 17],
|
||||||
|
"770b4e16-de76-49ed-949f-84e6d2e06d25": ["Brian Sn\u00f5ddy", 127],
|
||||||
|
"bb2a9339-bbe4-445f-9736-3c43379ee076": ["Brian Valeza", 32],
|
||||||
|
"bd79c951-2552-45dd-aae7-a333c2b7c1ef": ["Brom", 18],
|
||||||
|
"e6879299-a28b-48bc-8db1-9cafcf36de09": ["Bryan Sola", 40],
|
||||||
|
"4c3be2d4-73e6-4005-b897-8ac65b9c8660": ["Bud Cook", 18],
|
||||||
|
"d5053eb6-af72-47a0-b6e8-023cc3b9aefb": ["Caio Monteiro", 39],
|
||||||
|
"d281eab4-463a-4ba8-9039-8943737960a0": ["Campbell White", 64],
|
||||||
|
"17948f16-611a-44b8-8d10-9895a0bdfff1": ["Carl Critchlow", 220],
|
||||||
|
"61a4c572-3d1b-4b71-aeb0-1a5a6b82c524": ["Caroline Gariba", 20],
|
||||||
|
"ec2c14ea-79eb-4c55-963f-c46f7cef1c22": ["Charles Gillespie", 19],
|
||||||
|
"507c67d2-1514-40ab-b7cb-a9f3b96a08e8": ["Charles Urbach", 12],
|
||||||
|
"2d753f61-5f5b-468e-97ea-8e0fdd347340": ["Chase Stone", 111],
|
||||||
|
"a36f01a0-e51a-48b2-a556-b9b3bc73f969": ["Chippy", 101],
|
||||||
|
"2622d22b-3fd8-4831-9b2b-adc5fac01b85": ["Chris Cold", 25],
|
||||||
|
"b5f1bd34-abee-40c9-99f7-a6ee089fb30b": ["Chris Ostrowski", 10],
|
||||||
|
"7742047e-0f80-4c0f-a530-d07460165e86": ["Chris Rahn", 66],
|
||||||
|
"a8e7b854-b15a-421a-b66d-6e68187ae285": ["Chris Rallis", 126],
|
||||||
|
"b9c49463-6f55-4039-9d32-c02a658af100": ["Chris Seaman", 57],
|
||||||
|
"b8266529-1ffe-41e7-9969-fcf39f61426b": ["Christine Choi", 68],
|
||||||
|
"21e10012-06ae-44f2-b38d-3824dd2e73d4": ["Christopher Moeller", 148],
|
||||||
|
"c96773f0-346c-4f7d-9271-2d98cc5d86e1": ["Christopher Rush", 21],
|
||||||
|
"2bdf4da7-c66c-4c46-a253-284c856ccfab": ["Chuck Lukacs", 16],
|
||||||
|
"1761c216-72b5-4a9b-afee-ad47a00fe1ad": ["Ciruelo", 19],
|
||||||
|
"ed6f7e03-20ba-4c73-bdda-4a4928480721": ["Cliff Childs", 86],
|
||||||
|
"7416bbed-fa7f-426b-b712-8b3ccd9fd858": ["Cliff Nielsen", 10],
|
||||||
|
"03b75350-d5a0-4e3a-b3b4-8d4a5554385b": ["Clint Cearley", 96],
|
||||||
|
"9c201dbe-db56-429a-87e6-189ea70c2632": ["Colin Boyer", 22],
|
||||||
|
"91adf165-e324-461c-baf3-0d22e390a40c": ["Cosmin Podar", 10],
|
||||||
|
"b0f15e74-0dd6-4156-959e-c5e30c5cdc52": ["Craig J Spearing", 80],
|
||||||
|
"c09ede88-a1b5-4a18-9895-dc8a965d28a5": ["Cristi Balanescu", 73],
|
||||||
|
"9dfbdd58-65e6-40cf-951a-80e141061939": ["Cynthia Sheppard", 57],
|
||||||
|
"90edbd2e-9462-4394-b0b4-02885b4e56b3": ["Cyril Van Der Haegen", 16],
|
||||||
|
"e607a0d4-fc12-4c01-9e3f-501f5269b9cb": ["Daarken", 235],
|
||||||
|
"38433e15-f0f5-4223-a985-2d13c4aa0922": ["D. Alexander Gregory", 58],
|
||||||
|
"606a37b0-9d2d-477b-b679-100bc30b46b3": ["Dameon Willich", 25],
|
||||||
|
"4eac683c-8c96-4f57-b8a4-ad7f7b7c44c7": ["Dana Knutson", 15],
|
||||||
|
"9b55c657-5b5b-4152-a6e2-51180517bfa9": ["Dan Dos Santos", 20],
|
||||||
|
"059bba56-5feb-42e4-8c2e-e2f1e6ba11f9": ["Dan Frazier", 119],
|
||||||
|
"63ac31a8-dd1a-4679-9f82-ece89429a084": ["Daniel Gelon", 61],
|
||||||
|
"0fbd4798-76eb-46d5-a5d4-1e3a25870e34": ["Daniel Ljunggren", 165],
|
||||||
|
"266fe58e-bcd6-4294-8e42-0a234ed9fb8d": ["Dan Mumford", 10],
|
||||||
|
"f852fa13-137e-40f2-bbc1-0f01df09c0e0": ["Dan Scott", 146],
|
||||||
|
"fcd5ea36-64e0-4af0-992a-3c68a34a400f": ["Dany Orizio", 20],
|
||||||
|
"904ed2e7-9850-4472-802f-2657c53dd4d8": ["Darek Zabrocki", 34],
|
||||||
|
"7da1a585-c875-45e4-b322-5da9e8e1f651": ["Daren Bader", 22],
|
||||||
|
"262c8e55-4efc-467b-a042-6f734b9d2e01": ["Darrell Riche", 58],
|
||||||
|
"14c7f83c-d0fb-43f0-90f3-703f910f8bb9": ["Darren Tan", 14],
|
||||||
|
"99b8310a-4fd6-4ded-8ab7-3b5185821cbe": ["Dave Allsop", 55],
|
||||||
|
"9235458b-ce92-45bd-a430-a72ecd8e6176": ["Dave Dorman", 16],
|
||||||
|
"8a5540a8-18c9-4fa9-802c-59d6866114d5": ["Dave Kendall", 121],
|
||||||
|
"092827e0-03f2-4e73-852e-d95eba0fef20": ["David Auden Nash", 16],
|
||||||
|
"3496c5b4-57bf-4e5e-8bac-a1e05a911a2d": ["David Gaillet", 50],
|
||||||
|
"996ad764-4ae0-4952-8bb5-5a75c9d68275": ["David Martin", 25],
|
||||||
|
"bd8dcf6f-4ab3-4854-bfb0-f2e21610fc16": ["David O'Connor", 16],
|
||||||
|
"04ce1c75-e30c-4b7a-8cb0-b53e4ecc2f39": ["David Palumbo", 100],
|
||||||
|
"c5a2318d-5d04-499f-b121-57dee5a9dfe6": ["David Rapoza", 47],
|
||||||
|
"5eedbc4b-34a3-4ca5-b3f5-9ac2f6b6adf7": ["Denman Rooke", 15],
|
||||||
|
"806f6ff9-6ed4-4e93-998a-a562c0b792e6": ["Deruchenko Alexander", 72],
|
||||||
|
"ad53afd6-d00f-4bc8-98ec-deab3f6aec50": ["Dimitar Marinski", 31],
|
||||||
|
"ed44dce4-30cf-4c2c-b2e1-a19ba2295690": ["DiTerlizzi", 14],
|
||||||
|
"9872f5c0-274a-48ce-a9ad-6f0d5654e29c": ["Dmitry Burmak", 53],
|
||||||
|
"64374332-23aa-4f5c-ad70-511ed2fb7b7d": ["Dominick Domingo", 10],
|
||||||
|
"c3439c4a-1fee-4e33-9b89-18dac27ac927": ["Dominik Mayer", 48],
|
||||||
|
"90332db2-aecb-4d79-917b-95cbeb8d0cb6": ["Donato Giancola", 100],
|
||||||
|
"b4117364-73af-47e5-8cf0-901eeea09e01": ["Don Hazeltine", 11],
|
||||||
|
"dd587b27-dca3-4219-aa55-b285a7a77030": ["Doug Chaffee", 10],
|
||||||
|
"a9ddb513-51c7-455c-ab8f-5b90aae9f75b": ["Douglas Shuler", 20],
|
||||||
|
"a8c4ef83-94ad-41c7-861f-95debea16868": ["Drew Baker", 23],
|
||||||
|
"22eef389-7b21-4dda-95dc-4c9a0f1bf4dd": ["Drew Tucker", 41],
|
||||||
|
"b967e930-39f5-4fbb-a054-800e5d330ee0": ["DZO", 11],
|
||||||
|
"2a9f3780-fcc8-4ec5-b403-ee1d1370d3b4": ["Ekaterina Burmak", 36],
|
||||||
|
"7a9aaa63-73ae-492c-948e-7531415fdf31": ["E. M. Gist", 24],
|
||||||
|
"fcc15b63-b280-49da-9fee-f862824a2fc8": ["Erica Yang", 40],
|
||||||
|
"37970e22-9cee-44c1-af44-5ee27cf26b76": ["Eric Deschamps", 173],
|
||||||
|
"c5562592-3387-495a-96fb-618a6a424a45": ["Eric Fortune", 11],
|
||||||
|
"0fc26d3b-4c0e-41d1-8eb3-286ab55a2328": ["Eric Peterson", 75],
|
||||||
|
"9f85c6c1-5cf4-4092-bb65-006eaca188d4": ["Eric Velhagen", 11],
|
||||||
|
"eea284ce-9377-49c1-9d96-f34b7d487cdf": ["Evan Shipard", 22],
|
||||||
|
"127faa6a-6c02-49a0-beba-ae76d06dd153": ["Even Amundsen", 23],
|
||||||
|
"6777be9f-5724-4fdb-b6a0-a83f63efa4ca": ["Evyn Fong", 24],
|
||||||
|
"0d8d6726-4051-445a-8374-a919aad98f38": ["Eytan Zana", 50],
|
||||||
|
"0cc534e0-be18-4cb1-8521-50fabd0dac6f": ["Fajareka Setiawan", 11],
|
||||||
|
"66082c3b-a623-4d34-be51-2475214b85d3": ["Filip Burburan", 105],
|
||||||
|
"f28c54ff-bbe3-485d-81a4-b2cb49430a52": ["Florian de Gesincourt", 38],
|
||||||
|
"64fc383d-de34-4151-87d6-27b82e58086e": ["Forrest Imel", 11],
|
||||||
|
"fa64fc53-a243-4a94-a4d2-97625ea24b4f": ["Francisco Miyara", 15],
|
||||||
|
"3a243c17-3baa-4b53-9599-645311cd7d3d": ["Franz Vohwinkel", 58],
|
||||||
|
"9c77c81a-3b3f-4e94-a834-327d01cd6b35": ["Fred Fields", 11],
|
||||||
|
"44c3877f-8771-43dc-9e40-f4c765f59d2e": ["Gabor Szikszai", 39],
|
||||||
|
"9456da4e-410b-4932-8bf3-a69a2da3cdc9": ["Games Workshop", 57],
|
||||||
|
"0d253eb0-2579-4201-bde4-f0a9f0963827": ["Gao Yan", 10],
|
||||||
|
"fb608209-fd37-435a-b2fb-a158aeb3f927": ["Gary Leach", 21],
|
||||||
|
"086111c7-93f0-4bab-b339-6fe1c00d693c": ["Gary Ruddell", 35],
|
||||||
|
"09922e8b-c57f-4374-97e4-c0b86b66ef4b": ["Gerry Grace", 19],
|
||||||
|
"009fe350-a82b-430f-92bc-04fe08d78f50": ["G-host Lee", 20],
|
||||||
|
"7be3b9e4-de9b-4a3d-884e-e67b9681d409": ["Glen Angus", 49],
|
||||||
|
"020f967b-0d2f-4166-aabe-901dba8bc7ec": ["Greg Hildebrandt", 72],
|
||||||
|
"b864fecb-d491-4f8d-b915-f6c93d0885fa": ["Greg Opalinski", 34],
|
||||||
|
"93d65564-bf00-447b-8406-e2031f03b6b1": ["Greg Staples", 123],
|
||||||
|
"b5f49d0d-8056-48e3-b614-090e656b4f9c": ["Grzegorz Rutkowski", 80],
|
||||||
|
"4441fe52-9e41-40c1-9b74-8510426279ab": ["Heather Hudson", 31],
|
||||||
|
"b12df60b-57df-47d9-8f3e-cfc5fa3b8519": ["Hector Ortiz", 12],
|
||||||
|
"ce415f9e-8a20-4d64-bcba-2b1b7e94012e": ["Heonhwa Choe", 37],
|
||||||
|
"49b6270b-1b28-4e03-b503-522f97dc3a78": ["Hideaki Takamura", 27],
|
||||||
|
"6dd06426-59fe-4b9c-aad5-6da8446a5c3d": ["Howard Lyon", 130],
|
||||||
|
"8d244b88-ef56-4523-8c0c-9fecccc4ab9d": ["Iain McCaig", 17],
|
||||||
|
"d2200e9f-c40d-45d4-8d87-3f1412c61770": ["Ian Miller", 28],
|
||||||
|
"9c3e9d17-509f-485c-9360-46d897ce716b": ["Igor Kieryluk", 191],
|
||||||
|
"12070c2e-4de6-46bc-b379-8a580dfb34c5": ["Ilse Gort", 43],
|
||||||
|
"1e4cb52d-476e-4c68-ac87-2e620aede6d4": ["Irina Nordsol", 36],
|
||||||
|
"aa807c8c-d07f-4f09-90d3-b2cbf5b86dbf": ["Iris Compiet", 11],
|
||||||
|
"d3a47c28-84e9-4b53-a236-5066ae1bb62f": ["Ittoku", 10],
|
||||||
|
"2c3d2473-ff5d-4309-8194-e0b2def2ab65": ["Izzy", 162],
|
||||||
|
"331942ac-401c-4af3-9d70-85f67717496c": ["Jack Wang", 37],
|
||||||
|
"92f6c2c1-fa57-4b52-99c4-0fd866c13dc9": ["Jaime Jones", 113],
|
||||||
|
"be53e4e1-ab31-494a-b154-e00ee97eb463": ["Jake Murray", 16],
|
||||||
|
"36901417-ce61-4636-8b77-6db14a9cb68a": ["Jakub Kasper", 61],
|
||||||
|
"dd6ac36b-bdb4-48d5-9fae-1b017437669d": ["Jama Jurabaev", 12],
|
||||||
|
"1a7be0a2-d8ac-45c7-b0a0-eb0886f47b5f": ["James Paick", 128],
|
||||||
|
"3852bbc9-11c0-4fe3-8722-a06ad7e2bcc5": ["James Ryman", 99],
|
||||||
|
"c93d6885-ef0f-45cc-8339-423b6f86ab8d": ["James Zapata", 17],
|
||||||
|
"02e2b5de-4341-464c-8fdb-a1adbf873bc0": ["Jason A. Engle", 134],
|
||||||
|
"8062d5a9-51b6-4822-933f-fa9e9dba8416": ["Jason Chan", 42],
|
||||||
|
"064b9176-e325-44f6-a413-2cadb7505851": ["Jason Kang", 33],
|
||||||
|
"6ed7e669-579b-443d-b223-e5cbcb2a7483": ["Jason Rainville", 111],
|
||||||
|
"0eb4c7d4-92b9-4d3f-983c-983ef46729e5": ["Jasper Sandner", 12],
|
||||||
|
"da17055e-693c-461a-b132-67dd88b42ca6": ["Jeff Easley", 38],
|
||||||
|
"7c5b6391-2a5a-4b78-b19d-2b181149cb0f": ["Jeff Laubenstein", 16],
|
||||||
|
"9b465bde-3656-4495-ace4-af4ce29999ed": ["Jeff Miracola", 37],
|
||||||
|
"bb21cc10-54bf-4d10-b90c-72ba55dd3d37": ["Jeff Simpson", 16],
|
||||||
|
"515df9fe-9c29-4e75-9e49-6ce5be4ec8c8": ["Jehan Choo", 26],
|
||||||
|
"b40ac320-89b4-4c51-a85f-4a4b63ae614e": ["Jeremy Jarvis", 43],
|
||||||
|
"54366fc1-c5b1-4faa-a7a5-de2abc119de1": ["Jerry Tiritilli", 33],
|
||||||
|
"a5f8354a-8b51-4e59-96b2-0e3aeae4fa1d": ["Jesper Ejsing", 139],
|
||||||
|
"1c906f9b-5bbe-4643-8f5c-90eb1c7f0c43": ["Jim Murray", 73],
|
||||||
|
"aa9f64d1-29e1-4c82-877e-44c18183f40b": ["Jim Nelson", 54],
|
||||||
|
"1431bdd4-c187-40ea-847a-e1dcd835598a": ["Jim Pavelec", 17],
|
||||||
|
"b09e6cd1-0257-425a-9bbb-5cac3f803443": ["Jodie Muir", 10],
|
||||||
|
"13b6c9ee-f7a8-46a4-934f-ea6b4a1b14b2": ["Joe Slucher", 53],
|
||||||
|
"465e38b8-7eed-4d22-a6d2-d3603ee0c00b": ["Johan Grenier", 32],
|
||||||
|
"d92e2dd9-9ef6-43f6-81f8-df87f9066983": ["Johann Bodin", 111],
|
||||||
|
"3593dd7e-c547-4a32-81cd-7da725f60118": ["Johannes Voss", 97],
|
||||||
|
"798f3932-30e0-4420-aa3f-db4d613f89ca": ["John Avon", 94],
|
||||||
|
"a1685587-4b55-446b-b420-c37b202ed3f1": ["John Matson", 64],
|
||||||
|
"a4f50310-4b01-4cd3-8ab8-85b31e6876db": ["John Severin Brassell", 34],
|
||||||
|
"b0f038a0-73b5-4806-918e-9cd11b5f92e1": ["John Stanko", 69],
|
||||||
|
"2c14303e-97a3-45fa-9bd8-59e5332a65f9": ["Jokubas Uogintas", 19],
|
||||||
|
"561ebf9e-8d93-4b57-8156-8826d0c19601": ["Jonas De Ro", 127],
|
||||||
|
"babb75bd-4c75-4b13-ad61-c34597ab79ff": ["Jonathan Kuo", 23],
|
||||||
|
"be1fa767-c905-49b1-afcf-77a8e9ebbd31": ["Jon Foster", 19],
|
||||||
|
"6befd6d5-7f8d-4b7c-87e3-5511391a3359": ["Joseph Meehan", 70],
|
||||||
|
"8fa1fdf0-96d6-46f4-a7ff-b1c0257c3735": ["Josh Hass", 57],
|
||||||
|
"553b2a73-780f-414b-b2d7-3b7888821082": ["Joshua Raphael", 29],
|
||||||
|
"74246024-92b4-43d0-a5af-a3f9f2a35d5f": ["Josu Hernaiz", 78],
|
||||||
|
"7f1868e3-325f-4df9-8f27-a381fed4f0fc": ["Julian Kok Joon Wen", 13],
|
||||||
|
"bba720a4-46b3-493b-8653-8980e6a8c252": ["Julie Baroh", 13],
|
||||||
|
"ce8605ad-6d5a-45a3-a7b6-84be4f5209cd": ["Julie Dillon", 10],
|
||||||
|
"269392ac-4c06-4650-98e2-d49a5a7f2371": ["Jung Park", 80],
|
||||||
|
"4d6acc42-7bac-42cb-ac57-a56355292e89": ["Justine Cruz", 22],
|
||||||
|
"792963b0-5dec-4b79-9035-71ce48bf77e9": ["Justine Mara Andersen", 12],
|
||||||
|
"9af01712-e56b-4865-80d8-c77a69750077": ["Justin Hampton", 11],
|
||||||
|
"bb15780e-8f96-4823-b258-a7a9fd79b02c": ["Justin Sweet", 31],
|
||||||
|
"d2340aef-8ca9-4e0d-864c-6a4e8d5e350a": ["Justyna Dura", 20],
|
||||||
|
"77f6cd9e-e625-4526-bfc5-97039f21375e": ["Kari Christensen", 13],
|
||||||
|
"286a7773-06e5-465c-8a2a-76dfcb4ad110": ["Karla Ortiz", 16],
|
||||||
|
"0fad2c48-a56e-4a0b-b512-224f6f238f20": ["Karl Kopinski", 118],
|
||||||
|
"a662cb71-4770-4b49-8b03-2cf8497049a7": ["Kasia 'Kafis' Zieli\u0144ska", 10],
|
||||||
|
"6ab2144d-a579-4aff-bce9-e6d76427ff04": ["Keith Garletts", 20],
|
||||||
|
"4b771085-c049-4308-930d-ec9665f803a4": ["Kekai Kotaki", 47],
|
||||||
|
"f366a0ee-a0cd-466d-ba6a-90058c7a31a6": ["Kev Walker", 140],
|
||||||
|
"aa7e89ed-d294-4633-9057-ce04dacfcfa4": ["Kieran Yanner", 151],
|
||||||
|
"fa058291-5283-4b33-a65e-d4911cb319bb": ["Kimonas Theodossiou", 12],
|
||||||
|
"f2bd4ad3-6359-4592-9b34-90a70cfe1b61": ["Kim Sokol", 11],
|
||||||
|
"3677c64b-55e6-4a0d-a952-bdbb05531220": ["Lake Hurwitz", 57],
|
||||||
|
"73932957-e76e-4ff0-8f0a-b3ad2d8dfae2": ["Larry MacDougall", 27],
|
||||||
|
"21ed6499-c4d3-4965-ab02-6c7228275bec": ["Lars Grant-West", 124],
|
||||||
|
"6f771d3f-310e-4aa4-841f-5ba4ba9f025a": ["Lie Setiawan", 70],
|
||||||
|
"5a50ced2-b301-4195-8af4-f7e1bae07d28": ["Liiga Smilshkalne", 15],
|
||||||
|
"95bc132d-37aa-4063-8ed8-04d489e826cd": ["Lindsey Look", 29],
|
||||||
|
"0a0e9093-ce44-4a69-93a7-09b63e7c330d": ["Lius Lasahido", 91],
|
||||||
|
"0f41e561-bc26-4d85-aab6-66c384e01b74": ["Livia Prima", 55],
|
||||||
|
"70213e7d-47e0-4543-a1ae-451009053e2d": ["Lorenzo Mastroianni", 13],
|
||||||
|
"ce98f39c-7cdd-47e6-a520-6c50443bb4c2": ["Lucas Graciano", 120],
|
||||||
|
"aa57d42a-72c1-4d94-a200-3571233c4b20": ["Luca Zontini", 20],
|
||||||
|
"f1d0c5e9-747f-4885-a5cd-a2ea42a792ef": ["Maciej Kuciara", 11],
|
||||||
|
"9e6a55ae-be4d-4c23-a2a5-135737ffd879": ["Magali Villeneuve", 155],
|
||||||
|
"35f11eeb-36ff-4059-bb70-d1274f5bd858": ["Manuel Casta\u00f1\u00f3n", 36],
|
||||||
|
"d50dd2c3-34ae-4eb1-8948-cb4b38d7e4b9": ["Marc Fishman", 12],
|
||||||
|
"c0f95ec3-c7ca-47d6-be5c-b37dfce37be5": ["Marco Nelor", 31],
|
||||||
|
"8089db55-5105-47b0-8c64-f320e08c97f0": ["Marc Simonetti", 10],
|
||||||
|
"a10f59a4-36fd-4ef3-966b-5570ca118062": ["Mark A. Nelson", 10],
|
||||||
|
"ccf77963-723f-4137-b364-7417079e8ab9": ["Mark Behm", 39],
|
||||||
|
"85deac3f-b647-4893-993d-3ea4d16d93ef": ["Mark Hyzer", 11],
|
||||||
|
"bfdeaf09-f915-4058-8e8b-bcac3bc43c33": ["Mark Poole", 48],
|
||||||
|
"4ec62588-d6cc-41a2-a9be-a0f95b9613cc": ["Mark Romanoski", 26],
|
||||||
|
"9ee9a9cc-c09e-486f-918b-69f80cbc4188": ["Mark Tedin", 33],
|
||||||
|
"3d8a379d-f4e8-440d-99d5-5ec107757348": ["Mark Winters", 43],
|
||||||
|
"48e2b98c-5467-4671-bd42-4c3746115117": ["Mark Zug", 82],
|
||||||
|
"266ab861-ed64-4ba5-865c-f18758421cc3": ["Marta Nael", 32],
|
||||||
|
"6338124e-8e53-498d-8bf9-93a55db2f61c": ["Martina Fackova", 16],
|
||||||
|
"30fead7c-da53-4c1b-b514-4be6e5ce487c": ["Martina Pilcerova", 37],
|
||||||
|
"2ae0dd12-047c-4efb-80d7-bccc3bac5fba": ["Mathias Kollros", 138],
|
||||||
|
"2e6a0611-9411-4ba4-98e3-c0e18cbf9f83": ["Matt Cavotta", 164],
|
||||||
|
"4fbafd13-0cf9-42a1-870d-7f8ea276f140": ["Matthew D. Wilson", 16],
|
||||||
|
"20871267-2d8a-41d5-b03a-be3d557c5734": ["Matt Stewart", 173],
|
||||||
|
"957ec398-9a5e-4f54-9090-37a06d57b96c": ["Micah Epstein", 31],
|
||||||
|
"e8f8a5b5-20bc-4aeb-a5ea-257b5c16a488": ["Michael Bruinsma", 10],
|
||||||
|
"d119119f-9ee1-4cf1-a01f-e90b6a042155": ["Michael C. Hayes", 28],
|
||||||
|
"96a53b95-fe5f-4fbb-9411-ccf4ee150aca": ["Michael Komarck", 29],
|
||||||
|
"3bda7dbe-1d9f-47c6-95ce-d283859ffab1": ["Michael Phillippi", 13],
|
||||||
|
"5ce7b3bd-53d2-49e6-b504-37191e8e9b17": ["Michael Sutfin", 34],
|
||||||
|
"e5f52ef5-1a2e-4128-90b0-ccc71cd47ea7": ["Mike Bierek", 94],
|
||||||
|
"a1407afa-0f54-43f8-938b-88b268074f91": ["Mike Dringenberg", 11],
|
||||||
|
"4a9465c4-1545-4ab6-91e7-60252b90bed4": ["Mike Ploog", 33],
|
||||||
|
"155bc2cb-038d-4b1f-9990-6178db1d1a21": ["Mike Sass", 14],
|
||||||
|
"81c5ec23-220b-4efa-b7df-9e49dd371e8d": ["Mila Pesic", 37],
|
||||||
|
"1eced451-4da5-42bc-b49d-70c41246581f": ["Milivoj \u0106eran", 49],
|
||||||
|
"95f2b92b-3031-4abb-85f1-bcebf0a032f5": ["Minttu Hynninen", 12],
|
||||||
|
"9cb65d6f-8851-4d56-9add-9eefa274bd1b": ["Min Yum", 58],
|
||||||
|
"23547f21-a6c7-44e0-bbb7-fd5e5e32d97c": ["Mitchell Malloy", 10],
|
||||||
|
"185ea3f2-0b95-4f96-ab62-f7754ba591d8": ["Muhammad Firdaus", 13],
|
||||||
|
"c74ef1dd-0341-44c4-8f9f-5f243151cce3": ["N\u00e9N\u00e9 Thomas", 21],
|
||||||
|
"7a6f1667-a8ac-47f5-a302-f71cb54b2adf": ["Nestor Ossandon Leal", 22],
|
||||||
|
"a1bba8ff-63b4-4786-b1c4-f1bfe5d3ab1c": ["Nicholas Gregory", 78],
|
||||||
|
"d5dc3c78-b4d0-4e0a-8bfb-fd7b1c36a5e4": ["Nick Percival", 13],
|
||||||
|
"c540d1fc-1500-457f-93cf-d6069ee66546": ["Nils Hamm", 175],
|
||||||
|
"78ae4348-24fb-401f-bfba-0d5c34c106ab": ["Nottsuo", 13],
|
||||||
|
"fad4282c-49d1-4b5b-be1d-713369fc8bc8": ["Olena Richards", 28],
|
||||||
|
"11c6f325-68c2-4f2a-972d-98d2ffe6c224": ["Olivier Bernard", 12],
|
||||||
|
"256b61a2-b9af-4ff5-b485-47a61818f818": ["Omar Rayyan", 16],
|
||||||
|
"d48dd097-720d-476a-8722-6a02854ae28b": ["Paolo Parente", 84],
|
||||||
|
"4902294d-a1e5-495b-8526-49b2bfdda056": ["Pat Lee", 10],
|
||||||
|
"3130411f-ddd5-4cab-a2f4-0a9c3b95a26e": ["Pat Morrissey", 15],
|
||||||
|
"db74e463-9c78-4f45-80a9-efa5cc4f9841": ["Paul Bonner", 10],
|
||||||
|
"c19bfb77-5099-4f7c-8585-6eaf367712c9": ["Paul Scott Canavan", 40],
|
||||||
|
"c8f27311-46a5-4eaf-9b2e-d660ed1db649": ["Peter Mohrbacher", 51],
|
||||||
|
"d54c4a1a-c0c5-4834-84db-125d341f3ad8": ["Pete Venters", 59],
|
||||||
|
"43cdce85-e4bc-424e-ac95-fd0886b66ff3": ["Philip Straub", 15],
|
||||||
|
"b1f04826-a04f-4bb8-b8be-5fcd97bd00c5": ["Phill Simmer", 10],
|
||||||
|
"86942b2a-49d3-4edd-908c-551f6f07dd00": ["Phil Stone", 12],
|
||||||
|
"f333a7f0-7330-40e9-8c58-667eea2f0f60": ["PINDURSKI", 23],
|
||||||
|
"aff176e8-1d15-432e-ad1d-207a474decba": ["Piotr Dura", 57],
|
||||||
|
"b082dd2b-8fff-4b1b-b2cf-26396ac3ba53": ["Puddnhead", 11],
|
||||||
|
"a51444a8-eb4b-4615-a663-d1d418591ccb": ["Ralph Horsley", 28],
|
||||||
|
"a5048cc7-438a-4378-98e4-da99b78e1db0": ["Randy Gallegos", 89],
|
||||||
|
"d20672ca-0555-4238-a984-fd171d36b247": ["Randy Vargas", 120],
|
||||||
|
"c7c15d49-f84b-4d98-9a34-e80e8347b756": ["Raoul Vitale", 58],
|
||||||
|
"e24bc1d0-446b-45e0-b215-89f581837aa4": ["Ravenna Tran", 26],
|
||||||
|
"a72b1f7b-b72a-4e8b-bc97-d6720c0e5837": ["Ray Lago", 10],
|
||||||
|
"e956bacc-077d-4c12-b6bc-ba798b718af9": ["Raymond Swanland", 40],
|
||||||
|
"f8f662fa-d597-46a3-afb2-91d6e13243e2": ["Rebecca Guay", 53],
|
||||||
|
"191620ed-2361-444e-96a6-1fe7ce32ef3b": ["Richard Kane Ferguson", 17],
|
||||||
|
"a3cce4f0-fbf5-4883-aac7-fb28b993b132": ["Richard Sardinha", 13],
|
||||||
|
"596b3aac-b331-4e1e-ae41-9ec2d3b653e1": ["Richard Thomas", 40],
|
||||||
|
"7b1b0ce9-2c58-4321-a2a7-cdc94feae082": ["Richard Wright", 76],
|
||||||
|
"81ae0f3f-1d88-4125-9aeb-b15b4c734c82": ["rk post", 65],
|
||||||
|
"35906871-6c78-4ab2-9ed1-e6792c8efb74": ["Rob Alexander", 71],
|
||||||
|
"34f236c4-d646-4e48-9723-9df5f507754d": ["Robbie Trevino", 31],
|
||||||
|
"adb9ad6d-6173-454b-8b50-a102b182548b": ["Robin Olausson", 12],
|
||||||
|
"fce9030b-86bd-4439-b06a-920a1eeb184c": ["Ron Spears", 33],
|
||||||
|
"dab52c11-0564-4207-a4a1-c1735c946a65": ["Ron Spencer", 57],
|
||||||
|
"b64d0979-4028-4409-8285-eec2fa282dd4": ["Rovina Cai", 17],
|
||||||
|
"23f86db1-9103-49bb-83d5-0fda18143921": ["Rudy Siswanto", 21],
|
||||||
|
"f4d194b4-958a-4830-8d87-1a84e0b9ffbc": ["Ryan Alexander Lee", 36],
|
||||||
|
"a4e0102e-bbeb-497c-babc-1c0741fea914": ["Ryan Barger", 48],
|
||||||
|
"89cc9475-dda2-4d13-bf88-54b92867a25c": ["Ryan Pancoast", 124],
|
||||||
|
"8955dca7-3e37-42b4-83a9-167c78a2178f": ["Ryan Yee", 86],
|
||||||
|
"f89f4b78-cefb-41f7-b7cb-4f4d28de0c4f": ["Sam Burley", 106],
|
||||||
|
"22dbb488-6195-43cc-9927-73bfd239fe30": ["Sam Rowan", 18],
|
||||||
|
"66756146-32f8-4513-9aae-75a8e5117585": ["Sam White", 10],
|
||||||
|
"77cecfa2-2494-42a2-b14a-55ad40c6adbb": ["Sam Wood", 16],
|
||||||
|
"56be33dc-a2da-40e9-a4f7-94077dcea31e": ["Sara Winters", 34],
|
||||||
|
"9e048547-f9c3-4958-9c2c-91e45df7c6ae": ["Scott Chou", 20],
|
||||||
|
"1675947d-e663-4200-a6ce-5ad7bb3c83b1": ["Scott Hampton", 11],
|
||||||
|
"23b0cf43-3e43-44c6-8329-96446eca5bce": ["Scott M. Fischer", 57],
|
||||||
|
"07c7ac65-dfa6-4273-9c66-ec9d8f3e2226": ["Scott Murphy", 61],
|
||||||
|
"ad4caca0-8d89-44ce-a1a6-d5ca905bd6fb": ["Seb McKinnon", 136],
|
||||||
|
"bc1722f2-95d4-462d-948b-35be540ef4c2": ["Shelly Wan", 17],
|
||||||
|
"1d175ae2-a9bd-492d-8ce0-fa07c8963c5c": ["Shreya Shetty", 13],
|
||||||
|
"55e6d846-2f73-4fba-9b88-441686bb8dcb": ["Sidharth Chaturvedi", 74],
|
||||||
|
"b0e80135-db5a-4b88-a0bc-815a0e94faa1": ["Simon Dominic", 81],
|
||||||
|
"d887bc66-2779-416c-a1ff-d8720242063e": ["Slawomir Maniak", 183],
|
||||||
|
"018799f5-76d7-4849-9375-f1b9030977e6": ["Stephan Martiniere", 20],
|
||||||
|
"a267f9bb-072b-410a-a704-50f4d19020d8": ["Stephen Daniele", 25],
|
||||||
|
"bb596c13-9c39-4b11-8a7b-c88944826e70": ["Stephen Tappin", 37],
|
||||||
|
"a44ddda4-5331-4f83-aac9-3e00ed36bd7b": ["Steve Argyle", 60],
|
||||||
|
"39d8411c-2187-426c-8ad3-d4f688b22db1": ["Steve Ellis", 13],
|
||||||
|
"e2b0133e-a28d-45d1-8843-26285b41d61d": ["Steve Luke", 21],
|
||||||
|
"f07d73b9-52a0-4fe5-858b-61f7b42174a5": ["Steven Belledin", 148],
|
||||||
|
"a1139fb8-41f5-4a9e-9a74-f662e1a23b35": ["Steve Prescott", 72],
|
||||||
|
"674a172f-e11a-458b-a681-964726a0c320": ["Steve White", 14],
|
||||||
|
"8df59511-f31c-461f-8a7d-0271aa1f973d": ["Stuart Griffin", 17],
|
||||||
|
"4b149402-618d-4f54-9db8-788e4a5bce70": ["Sung Choi", 18],
|
||||||
|
"65d77b0b-6cca-4adf-a7ee-610c96d02371": ["Suzanne Helmigh", 18],
|
||||||
|
"ffd063ae-c097-4f26-b2e6-b1e2137708bc": ["Svetlin Velinov", 191],
|
||||||
|
"4601d9e5-616b-47c4-b9ca-e2b4ab257bc9": ["Ted Naifeh", 11],
|
||||||
|
"ff346569-557d-4043-ae44-97c2c7cabd7d": ["Thomas M. Baxa", 34],
|
||||||
|
"da0e98c9-28a9-41ed-a617-ea94737438c0": ["Tianhua X", 15],
|
||||||
|
"caa7228c-f74c-4145-91fb-1af8d623c353": ["Tim Hildebrandt", 29],
|
||||||
|
"b11e6b3a-f4ca-4cf1-8fd7-475696de5f5c": ["Titus Lunter", 148],
|
||||||
|
"d0b9f3cc-13fb-42b6-bc43-b034728e5c7b": ["Todd Lockwood", 25],
|
||||||
|
"ceb3ce65-efa6-4bcc-b2a3-33e83a047528": ["Tomas Duchek", 10],
|
||||||
|
"bba69285-2445-4a4b-a847-59397be972ea": ["Tomasz Jedruszek", 142],
|
||||||
|
"8f43afbf-ce7e-4c01-8815-6d51eaa801cd": ["Tom Kyffin", 16],
|
||||||
|
"1130bcd0-c8b1-48be-85d7-3ddb2abc6b1a": ["Tommy Arnold", 24],
|
||||||
|
"1ab97a5f-9abb-42f4-bbc4-954899619d6f": ["Tony Foti", 15],
|
||||||
|
"5d9af000-0148-4319-b573-3d6bf06bc7bb": ["Tony Roberts", 20],
|
||||||
|
"1952c90b-a5a7-4328-9f7c-e11064f59daf": ["Tony Szczudlo", 35],
|
||||||
|
"d72fed18-68fb-4a66-b369-978ae372fa07": ["Torstein Nordstrand", 12],
|
||||||
|
"35d39e75-5d6c-4318-9136-38cdfff34a05": ["Trevor Claxton", 41],
|
||||||
|
"7c1d7b59-dbf1-4ca8-9975-8e01c593da6e": ["Trevor Hairsine", 25],
|
||||||
|
"433a40d2-2caa-4cba-ba8d-0308a951d026": ["Tsutomu Kawade", 19],
|
||||||
|
"d84246f9-a536-485f-a21d-a237302ed100": ["Tuan Duong Chu", 16],
|
||||||
|
"522af130-8db4-4b4b-950c-6e2b246339cf": ["Tyler Jacobson", 104],
|
||||||
|
"70c4c8c7-61a8-44e7-8fb1-161b7f943e7e": ["Tyler Walpole", 27],
|
||||||
|
"0471a371-1bf8-49f2-8e76-cbe3a0bfa7e8": ["Una Fricker", 41],
|
||||||
|
"14cf4c0c-1a83-4366-ba61-6d0a26ee5a69": ["Uriah Voth", 41],
|
||||||
|
"289e552e-3b58-484f-a939-64a01426e84d": ["Val Mayerik", 36],
|
||||||
|
"b5516011-4722-4fc8-8542-102cecc52b71": ["Vance Kovacs", 28],
|
||||||
|
"41084244-a313-4d14-8123-db05855f9cfe": ["V\u00e9ronique Meignaud", 32],
|
||||||
|
"bd8f7368-5b10-4554-b6b8-d052c6aca89f": ["Victor Adame Minguez", 120],
|
||||||
|
"92dfef2a-d0fa-42fd-bdd6-bc4c9286cb56": ["Viko Menezes", 14],
|
||||||
|
"2270c0b0-afb4-42b0-bcb6-25fe4ad6eef2": ["Viktor Titov", 64],
|
||||||
|
"d82b1138-76d3-49f7-9d8c-bc2e2d3e0b0a": ["Vincent Proce", 116],
|
||||||
|
"93bec3c0-0260-4d31-8064-5d01efb4153f": ["Volkan Ba\u01f5a", 154],
|
||||||
|
"002c739e-aa1f-4c1d-921b-37cb2d1b1c5b": ["Warren Mahy", 66],
|
||||||
|
"62dc90c0-4bc2-4d42-ad76-59cad9243566": ["Wayne England", 111],
|
||||||
|
"afc47cec-3ccc-404e-a8c6-4d83dd504271": ["Wayne Reynolds", 70],
|
||||||
|
"b98c9d94-8bdb-49af-871d-7bac92274535": ["Wesley Burt", 65],
|
||||||
|
"5a553c8e-e3b9-40e0-bde5-1db621c53939": ["Willian Murai", 52],
|
||||||
|
"e45fe8d3-75d6-42c9-a2df-e945ad81ea27": ["Winona Nelson", 117],
|
||||||
|
"f2d36cdd-a4e9-43ba-b2ad-9d514f6706d4": ["Wisnu Tan", 43],
|
||||||
|
"074daf3d-0849-4c4a-b5a5-c276384e81e5": ["Wylie Beckert", 12],
|
||||||
|
"f8e7f8d6-6dde-4059-973c-30f1fd1bbe4e": ["Yeong-Hao Han", 154],
|
||||||
|
"a24479f8-6d9e-40f9-bede-f29899922b97": ["Yigit Koroglu", 21],
|
||||||
|
"c40c8ec8-d8b3-48a5-8de2-a7c96cbded5b": ["Yohann Schepacz", 17],
|
||||||
|
"5ab91c3b-a6da-4751-a56e-81d0f61a67ab": ["Yongjae Choi", 97],
|
||||||
|
"63b2909b-7102-49c5-8f9d-6116a1913308": ["YW Tang", 27],
|
||||||
|
"17bc7f55-958b-43f4-bb40-09746d05b3f9": ["Zack Stella", 95],
|
||||||
|
"329a7971-c37e-47f7-9143-58dc929420a7": ["Zara Alfonso", 11],
|
||||||
|
"810677e5-a502-4c03-b726-78cd808a75d4": ["Zezhou Chen", 65],
|
||||||
|
"1885e6cb-c827-4896-994e-3d0a027d602f": ["Zoltan Boros", 181]
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
web/public/mtg/jsons/watermark.json
Normal file
1
web/public/mtg/jsons/watermark.json
Normal file
File diff suppressed because one or more lines are too long
26
web/public/mtg/jsons/wm.json
Normal file
26
web/public/mtg/jsons/wm.json
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
"Orderofthewidget": "Order of the Widget",
|
||||||
|
"Agentsofsneak": "Agents of S.N.E.A.K.",
|
||||||
|
"Goblinexplosioneers": "Goblin Explosioneers",
|
||||||
|
"Leagueofdastardlydoom": "League of Dastardly Doom",
|
||||||
|
"Crossbreedlabs": "Crossbreed Labs",
|
||||||
|
"Mtg": "Magic: The Gathering",
|
||||||
|
"Wotc": "Wizards of the Coast",
|
||||||
|
"Junioreurope": "Junior Series Europe",
|
||||||
|
"D&d": "D&D",
|
||||||
|
"Dengekimaoh": "Dengeki Maoh Logo",
|
||||||
|
"Mlpgems": "My Little Pony Gems",
|
||||||
|
"Judgeacademy": "Judge Academy",
|
||||||
|
"Fnm": "Friday Night Magic",
|
||||||
|
"Herospath": "Hero's Path",
|
||||||
|
"Mps": "MPS",
|
||||||
|
"Wpn": "Wizards Play Network",
|
||||||
|
"Mlpsparkle": "My Little Pony Sparkle",
|
||||||
|
"Colorpie": "Color pie",
|
||||||
|
"Mtg10": "Magic 10th Anniversary",
|
||||||
|
"Dci": "DCI",
|
||||||
|
"Trumpkatsumai": "Trump Katsumai Logo",
|
||||||
|
"Protour": "Pro Tour",
|
||||||
|
"Mlpwaningmoon": "My Little Pony Waning Moon",
|
||||||
|
"Mtg15": "Magic 15th Anniversary"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user