IMport with Redis Server:
namespace :import_db_to_redis do
desc "Import API's data to REDIS"
task import: :environment do
@api_url = []
for n in 0..1075
@api_url << "https://data.gov.in/api/ datastore/resource.json? resource_id=cb579e8f-e4e0- 48eb-a058-1fc812a38ff2&api- key= ae0612afc91e5595f4806c0a93ed7e 0f&offset=#{n}"
end
for n in 0..294
@api_url << "https://data.gov.in/api/ datastore/resource.json? resource_id=03a4f696-d003- 4a06-ae85-0116b1c94d2e&api- key= ae0612afc91e5595f4806c0a93ed7e 0f&offset=#{n}"
end
for n in 0..167
@api_url << "https://data.gov.in/api/ datastore/resource.json? resource_id=134fa677-4fa1- 427b-9608-a0c226339ae2&api- key= ae0612afc91e5595f4806c0a93ed7e 0f&offset=#{n}"
end
for n in 0..16
@api_url << "https://data.gov.in/api/ datastore/resource.json? resource_id=4fc1510b-883a- 419a-9cf2-efc3221bdada&api- key= ae0612afc91e5595f4806c0a93ed7e 0f&offset=#{n}"
end
for n in 0..444
@api_url << "https://data.gov.in/api/ datastore/resource.json? resource_id=189cab67-c7fa- 4e58-995c-fb467434169d&api- key= ae0612afc91e5595f4806c0a93ed7e 0f&offset=#{n}"
end
@api_url << "https://data.gov.in/api/ datastore/resource.json? resource_id=0ee2ec3f-c1a2- 4008-87de-ef5ece8adb9d&api- key= ae0612afc91e5595f4806c0a93ed7e 0f"
puts @api_url.uniq.count
@api_url.each do |url|
data=Nokogiri::HTML(open(url))
@records = JSON.parse(data)["records"]
@dists = {}
@sub_dists = {}
@cities = {}
set_json_data
import_data
end
puts "Done!"
end
def set_json_data
@records.group_by { |d| d["STATENAME"]}.each do |st_key, st_value|
puts "Collecting #{st_key} state records..."
st_value.group_by { |d| d["DISTRICTNAME"]}.each do |key, value|
puts "Collecting #{key} district records..."
value.group_by { |d| d["SUBDISTRICTNAME"]}.each do |key1, value1|
puts "Collecting #{key1} sub-district records..."
@cities_array = []
value1.each do |k,v|
@cities_array << k["AreaName"]
end
@cities[key1] = @cities_array.uniq
end
@sub_dists_array = []
value.each do |k,v|
@sub_dists_array << k["SUBDISTRICTNAME"]
end
@sub_dists[key] = @sub_dists_array.uniq
end
@dists_array = []
st_value.each do |st_k,st_v|
@dists_array << st_k["DISTRICTNAME"]
end
@dists[st_key] = @dists_array.uniq
end
end
def import_data
redis = REDIS.hgetall('State')
st = redis["Name"].present? ? JSON.parse(redis["Name"]) : []
state = st.push(@records.first[" STATENAME"]).uniq.sort
dis = redis["Dist"].present? ? JSON.parse(redis["Dist"]) : {}
dist = dis.merge(@dists)
sub_dis = redis["SubDist"].present? ? JSON.parse(redis["SubDist"]) : {}
sub_dists = sub_dis.merge(@sub_dists)
ct = redis["City"].present? ? JSON.parse(redis["City"]) : {}
cities = ct.merge(@cities)
puts "Importing states records..."
REDIS.mapped_hmset 'State', "Name" => state.to_json
puts "Importing districts records..."
REDIS.mapped_hmset 'State', "Dist" => dist.to_json
puts "Importing sub-district records..."
REDIS.mapped_hmset 'State', "SubDist" => sub_dists.to_json
puts "Importing cities records..."
REDIS.mapped_hmset 'State', "City" => cities.to_json
end
end
namespace :import_db_to_redis do
desc "Import API's data to REDIS"
task import: :environment do
@api_url = []
for n in 0..1075
@api_url << "https://data.gov.in/api/
end
for n in 0..294
@api_url << "https://data.gov.in/api/
end
for n in 0..167
@api_url << "https://data.gov.in/api/
end
for n in 0..16
@api_url << "https://data.gov.in/api/
end
for n in 0..444
@api_url << "https://data.gov.in/api/
end
@api_url << "https://data.gov.in/api/
puts @api_url.uniq.count
@api_url.each do |url|
data=Nokogiri::HTML(open(url))
@records = JSON.parse(data)["records"]
@dists = {}
@sub_dists = {}
@cities = {}
set_json_data
import_data
end
puts "Done!"
end
def set_json_data
@records.group_by { |d| d["STATENAME"]}.each do |st_key, st_value|
puts "Collecting #{st_key} state records..."
st_value.group_by { |d| d["DISTRICTNAME"]}.each do |key, value|
puts "Collecting #{key} district records..."
value.group_by { |d| d["SUBDISTRICTNAME"]}.each do |key1, value1|
puts "Collecting #{key1} sub-district records..."
@cities_array = []
value1.each do |k,v|
@cities_array << k["AreaName"]
end
@cities[key1] = @cities_array.uniq
end
@sub_dists_array = []
value.each do |k,v|
@sub_dists_array << k["SUBDISTRICTNAME"]
end
@sub_dists[key] = @sub_dists_array.uniq
end
@dists_array = []
st_value.each do |st_k,st_v|
@dists_array << st_k["DISTRICTNAME"]
end
@dists[st_key] = @dists_array.uniq
end
end
def import_data
redis = REDIS.hgetall('State')
st = redis["Name"].present? ? JSON.parse(redis["Name"]) : []
state = st.push(@records.first["
dis = redis["Dist"].present? ? JSON.parse(redis["Dist"]) : {}
dist = dis.merge(@dists)
sub_dis = redis["SubDist"].present? ? JSON.parse(redis["SubDist"]) : {}
sub_dists = sub_dis.merge(@sub_dists)
ct = redis["City"].present? ? JSON.parse(redis["City"]) : {}
cities = ct.merge(@cities)
puts "Importing states records..."
REDIS.mapped_hmset 'State', "Name" => state.to_json
puts "Importing districts records..."
REDIS.mapped_hmset 'State', "Dist" => dist.to_json
puts "Importing sub-district records..."
REDIS.mapped_hmset 'State', "SubDist" => sub_dists.to_json
puts "Importing cities records..."
REDIS.mapped_hmset 'State', "City" => cities.to_json
end
end
No comments:
Post a Comment