API docs and sample Ruby scripts

This commit is contained in:
Alberto Miedes Garcés
2017-07-15 13:27:38 +02:00
parent c0d3ccaf46
commit 3142d15eb6
7 changed files with 516 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
require 'http'
API_ENDPOINT = 'https://decide.madrid.es/graphql'
def make_request(query_string)
HTTP.headers('User-Agent' => 'Mozilla/5.0', accept: 'application/json')
.get(
API_ENDPOINT,
params: { query: query_string.gsub("\n", '').gsub(" ", '') }
)
end
def build_query(options = {})
page_size = options[:page_size] || 25
page_size_parameter = "first: #{page_size}"
page_number = options[:page_number] || 0
after_parameter = page_number > 0 ? ", after: \"#{options[:next_cursor]}\"" : ""
"""
{
proposals(#{page_size_parameter}#{after_parameter}) {
pageInfo {
endCursor,
hasNextPage
},
edges {
node {
id,
title,
public_created_at
}
}
}
}
"""
end
page_number = 0
next_cursor = nil
proposals = []
loop do
puts "> Requesting page #{page_number}"
query = build_query(page_size: 25, page_number: page_number, next_cursor: next_cursor)
response = make_request(query)
response_hash = JSON.parse(response.body)
page_info = response_hash['data']['proposals']['pageInfo']
has_next_page = page_info['hasNextPage']
next_cursor = page_info['endCursor']
proposal_edges = response_hash['data']['proposals']['edges']
puts "\tHTTP code: #{response.code}"
proposal_edges.each do |edge|
proposals << edge['node']
end
page_number += 1
break if !has_next_page
end