cockatrice_feeder 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cockatrice_feeder.rb +139 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35f49ec43fbddcb43336894609d1f110ed83b9c4
|
4
|
+
data.tar.gz: d43a4dc9a50c9f8e8c0dd0e8df2a1d08721ebe4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f185893e9afa3c3cbed1c9217a55d58d7d456d6887c0078dac5b0d37f0c8ab54d5720983ce7e813ff95f2785c2caabf6e4b766f7cd90c6148213fbf230dd34d
|
7
|
+
data.tar.gz: 35bf4d00a14d7b2b7806d84ab8230915082da0f298dced2c0bd4acc3b4eef818b763292fa5b05305f9c04e5a055ca6b2a56badb051830f2c9cc5a752f2ad3c7c
|
data/lib/cockatrice_feeder.rb
CHANGED
@@ -145,6 +145,15 @@ module CockatriceFeeder
|
|
145
145
|
tiers
|
146
146
|
end
|
147
147
|
|
148
|
+
def self.update_full_data
|
149
|
+
File.open(@@meta_dir+"AllPrintings.json", "w") do |file|
|
150
|
+
file.binmode
|
151
|
+
HTTParty.get("https://mtgjson.com/api/v5/AllPrintings.json", stream_body: true) do |fragment|
|
152
|
+
file.write(fragment)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
148
157
|
def self.commanders
|
149
158
|
unless File.exist?(@@meta_dir+"commanders.json")
|
150
159
|
update_commanders()
|
@@ -167,6 +176,13 @@ module CockatriceFeeder
|
|
167
176
|
JSON.parse(File.read(@@meta_dir+"tiers.json"))
|
168
177
|
end
|
169
178
|
|
179
|
+
def self.full_data
|
180
|
+
unless File.exist?(@@meta_dir+"AllPrintings.json")
|
181
|
+
update_full_data()
|
182
|
+
end
|
183
|
+
JSON.parse(File.read(@@meta_dir+"AllPrintings.json"))
|
184
|
+
end
|
185
|
+
|
170
186
|
def self.deck_obj(link = "", name = "", commanders = [], date = nil, price = nil)
|
171
187
|
{
|
172
188
|
link: link,
|
@@ -367,7 +383,7 @@ module CockatriceFeeder
|
|
367
383
|
[
|
368
384
|
(andcolors.nil? ? nil : "true"),
|
369
385
|
(colors.nil? ? nil : "colors=#{URI.encode_www_form_component(colors)}"),
|
370
|
-
(commander.nil? ? nil : "commanders
|
386
|
+
(commander.nil? ? nil : "commanders=\"#{URI.encode_www_form_component(commander)}\""),
|
371
387
|
(owner.nil? ? nil : "owner=#{URI.encode_www_form_component(owner)}"),
|
372
388
|
"formats=#{formats}",
|
373
389
|
"orderBy=#{orderBy}",
|
@@ -495,6 +511,118 @@ module CockatriceFeeder
|
|
495
511
|
content.strip.split(" ").last.split(".").first.gsub(",","")
|
496
512
|
end
|
497
513
|
|
514
|
+
def self.mtgapi_card(params = {multiverse_id: nil, name: nil, set:nil})
|
515
|
+
defaults = {multiverse_id: nil, name: nil}
|
516
|
+
params = defaults.merge(params)
|
517
|
+
|
518
|
+
puts "looking up #{params}"
|
519
|
+
|
520
|
+
card = nil
|
521
|
+
if params[:multiverse_id] != nil
|
522
|
+
card = JSON.parse(
|
523
|
+
HTTParty.get("https://api.magicthegathering.io/v1/cards/#{params[:multiverse_id]}").body
|
524
|
+
)["card"]
|
525
|
+
elsif params[:name] != nil
|
526
|
+
query = [
|
527
|
+
"name=#{URI.encode_www_form_component(params[:name])}",
|
528
|
+
(params[:set] != nil ? "set=#{params[:set]}" : nil)
|
529
|
+
].compact.join("&")
|
530
|
+
|
531
|
+
card = JSON.parse(
|
532
|
+
HTTParty.get("https://api.magicthegathering.io/v1/cards?#{query}").body
|
533
|
+
)["cards"].first
|
534
|
+
end
|
535
|
+
return card
|
536
|
+
end
|
537
|
+
|
538
|
+
# CockatriceFeeder.build_deck_from_sets("Lazav, Dimir Mastermind", ["RAV", "GPT", "DIS", "RTR", "GTC", "DGM", "GRN", "RNA", "WAR"])
|
539
|
+
def self.build_deck_from_sets(commander, sets)
|
540
|
+
#lookup edhrecavg deck for commander
|
541
|
+
c = commanders.select{|c| c["name"] == commander}.first
|
542
|
+
d = deck_obj("https://edhrec-json.s3.amazonaws.com/en/decks/#{c["link"]}.json", c["name"]+" SCRAW", [c["name"]])
|
543
|
+
edhrecavg_deck(d)
|
544
|
+
|
545
|
+
#remember cards to avoid repeat lookups to mtgapi
|
546
|
+
mem = {}
|
547
|
+
|
548
|
+
#throw out any cards not in sets
|
549
|
+
d[:cardlist] = d[:cardlist].select do |cl|
|
550
|
+
name = cl.split(' ')[1..-1].join(" ")
|
551
|
+
unless mem.has_key?(name)
|
552
|
+
mem[name] = mtgapi_card(name: cl.split(' ')[1..-1].join(" "))
|
553
|
+
end
|
554
|
+
card = mem[name]
|
555
|
+
|
556
|
+
(card["printings"] & sets).length > 0
|
557
|
+
end
|
558
|
+
|
559
|
+
#lookup archidekt decks for the commander to find other cards from the set
|
560
|
+
arch_decks = archidekt_decklist(nil, nil, c["name"])
|
561
|
+
arch_decks.each do |ad| archidekt_deck(ad) end
|
562
|
+
arch_decks.each do |ad|
|
563
|
+
in_set = ad[:cardlist].select do |cl|
|
564
|
+
name = cl.split(' ')[1..-1].join(" ")
|
565
|
+
unless mem.has_key?(name)
|
566
|
+
mem[name] = mtgapi_card(name: cl.split(' ')[1..-1].join(" "))
|
567
|
+
end
|
568
|
+
card = mem[name]
|
569
|
+
|
570
|
+
#flip/dual cards don't always work
|
571
|
+
if card != nil
|
572
|
+
(card["printings"] & sets).length > 0
|
573
|
+
end
|
574
|
+
end
|
575
|
+
|
576
|
+
in_set.each do |cl|
|
577
|
+
name = cl.split(' ')[1..-1].join(" ")
|
578
|
+
cur = d[:cardlist].map{|x| x.split(' ')[1..-1].join(" ")}
|
579
|
+
curlen = d[:cardlist].map{|x| x.split(' ').first.to_i}.inject(0){|sum,x| sum + x }
|
580
|
+
unless cur.include?(name) || curlen >= 100
|
581
|
+
d[:cardlist] << cl
|
582
|
+
end
|
583
|
+
end
|
584
|
+
|
585
|
+
curlen = d[:cardlist].map{|x| x.split(' ').first.to_i}.inject(0){|sum,x| sum + x }
|
586
|
+
if curlen >= 100
|
587
|
+
break
|
588
|
+
end
|
589
|
+
end
|
590
|
+
|
591
|
+
#lookup deckstats decks for the commander
|
592
|
+
curlen = d[:cardlist].map{|x| x.split(' ').first.to_i}.inject(0){|sum,x| sum + x }
|
593
|
+
if curlen < 100
|
594
|
+
dstat_decks = deckstats_decklist(c["name"],1..5)
|
595
|
+
dstat_decks.each do |ds| deckstats_deck(ds) end
|
596
|
+
dstat_decks.each do |ds|
|
597
|
+
in_set = ds[:cardlist].select do |cl|
|
598
|
+
name = cl.split(' ')[1..-1].join(" ")
|
599
|
+
unless mem.has_key?(name)
|
600
|
+
mem[name] = mtgapi_card(name: cl.split(' ')[1..-1].join(" "))
|
601
|
+
end
|
602
|
+
card = mem[name]
|
603
|
+
|
604
|
+
(card["printings"] & sets).length > 0
|
605
|
+
end
|
606
|
+
|
607
|
+
in_set.each do |cl|
|
608
|
+
name = cl.split(' ')[1..-1].join(" ")
|
609
|
+
cur = d[:cardlist].map{|x| x.split(' ')[1..-1].join(" ")}
|
610
|
+
curlen = d[:cardlist].map{|x| x.split(' ').first.to_i}.inject(0){|sum,x| sum + x }
|
611
|
+
unless cur.include?(name) || curlen >= 100
|
612
|
+
d[:cardlist] << cl
|
613
|
+
end
|
614
|
+
end
|
615
|
+
|
616
|
+
curlen = d[:cardlist].map{|x| x.split(' ').first.to_i}.inject(0){|sum,x| sum + x }
|
617
|
+
if curlen >= 100
|
618
|
+
break
|
619
|
+
end
|
620
|
+
end
|
621
|
+
end
|
622
|
+
|
623
|
+
d
|
624
|
+
end
|
625
|
+
|
498
626
|
def self.gobble
|
499
627
|
setup(skip_meta = true)
|
500
628
|
update_commanders()
|
@@ -537,6 +665,16 @@ module CockatriceFeeder
|
|
537
665
|
end
|
538
666
|
}
|
539
667
|
|
668
|
+
puts "Fetching the first page of edh decks from archidekt ordered by createdAt"
|
669
|
+
decks = CockatriceFeeder.archidekt_decklist()
|
670
|
+
puts "#{decks.length} decks found."
|
671
|
+
decks.each {|d|
|
672
|
+
CockatriceFeeder.archidekt_deck(d)
|
673
|
+
if d[:cardlist].length > 0
|
674
|
+
total_decks += 1
|
675
|
+
end
|
676
|
+
}
|
677
|
+
|
540
678
|
puts "#{total_decks} decks created at #{@@deck_dir}."
|
541
679
|
|
542
680
|
puts "cleaning up"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cockatrice_feeder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Steinwachs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-12-
|
11
|
+
date: 2020-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|