Mooncats GraphQL
mooncats-graphql - web client (helpers) for using MoonCats (HTTP JSON) GraphQL APIs
Usage
A lite web client wrapper for the Moon Cats Rescue open graph api
powered by the Graph.
See thegraph.com/explorer/subgraph/merklejerk/moon-cats-rescue ».
require 'mooncats/graphql'
c = Mooncats::GraphQL::Client.new
data = c.query( <<GRAPHQL )
{
cats(first: 12, orderBy: maxAdoptionPrice, orderDirection: desc)
{
id
rescueIndex
rescueBlock
rescueTime
name
isGenesis
maxAdoptionPrice
}
}
GRAPHQL
resulting in:
{"data"=>
{"cats"=>
[{"id"=>"0xff52000ca7",
"isGenesis"=>true,
"maxAdoptionPrice"=>"55500000000000000000",
"name"=>nil,
"rescueBlock"=>4363303,
"rescueIndex"=>2878,
"rescueTime"=>1507932258},
{"id"=>"0xff50000ca7",
"isGenesis"=>true,
"maxAdoptionPrice"=>"55500000000000000000",
"name"=>nil,
"rescueBlock"=>4363303,
"rescueIndex"=>2876,
"rescueTime"=>1507932258},
]
}
}
Or use pre-configured / built-in queries. Example:
data = c.query_bestsellers( first: 12 )
resulting in:
[{"id" => "0xff52000ca7",
"isGenesis" => true,
"maxAdoptionPrice" => "55500000000000000000",
"name" => nil,
"rescueBlock" => 4363303,
"rescueIndex" => 2878,
"rescueTime" => 1507932258},
{"id" => "0xff50000ca7",
"isGenesis" => true,
"maxAdoptionPrice" => "55500000000000000000",
"name" => nil,
"rescueBlock" => 4363303,
"rescueIndex" => 2876,
"rescueTime" => 1507932258},
]
Note: Depending on the pre-defined / built-in query either a data array (zero, one or more records)
e.g. query_bestsellers
or a hash table or nil (one or no record) e.g. query_cat_by_id
gets returned. Use like:
data.each_with_index do |rec,i|
print '%2d. ' % (i+1)
print '%3d ETH' % (rec['maxAdoptionPrice'].to_i / 1000000000000000000)
print ' - '
print rec['id']
print "\n"
end
printing:
1. 55 ETH - 0xff52000ca7
2. 55 ETH - 0xff50000ca7
3. 49 ETH - 0x00816eb855
4. 32 ETH - 0x00ac2b3f23
5. 13 ETH - 0x00f28bec4f
6. 12 ETH - 0x00304c8e29
7. 12 ETH - 0x002179a08d
8. 10 ETH - 0xff0b000ca7
9. 10 ETH - 0x0080ea1503
10. 8 ETH - 0x00e38e784c
11. 8 ETH - 0x00c1832514
12. 8 ETH - 0x0002b77279
More pre-configured / built-in queries include:
query_cats
query_mint_2017( first: 10 )
query_cat_by_id( id: '0xff52000ca7' )
query_cat_by_wrapper_id( id: 0 )
query_cheap_mints_2017
query_latest_adoptions
query_latest_donations
query_top_collectors
query_wrapped
See the query source for more.
Note: The open graph api has a 1000 records limit per request.
The recommended way for pagination is to use
a greater than last record id in the where clause in the query
to get the next page / batch.
Example - query_cats
:
{
cats(first: 1000,
where: { id_gt: $last_id }) {
id
}
}
Get all 25 440 MoonCat blockchain data
in 26 batches / requests of a thousand each:
last_id = '0x0000000000'
26.times do |i|
puts "downloading batch #{i}..."
data = c.query_cats( last_id: last_id )
puts " #{data.size} records(s)"
last_id = data[-1]['id']
puts " last_id: #{last_id}"
sleep( 1 )
end
resulting in:
downloading batch 0...
1000 record(s)
last_id: 0x000a05b9ac
downloading batch 1...
1000 record(s)
last_id: 0x0013b68a2f
...
That's it.
New to MoonCats?
See the
Programming MoonCats & MarsCats Step-by-Step Booklet / Guide »
Install
Just install the gem:
$ gem install mooncats-graphql
License
The scripts are dedicated to the public domain.
Use it as you please with no restrictions whatsoever.
Post them on the mooncatrescue reddit. Thanks.