#!/usr/bin/env python import psycopg2, json, traceback from config import DB_PASS, DB_USER, DB_NAME, DB_HOST, saveDefaultNodeInfo, removableFileds from pk2addr import keyTo128BitAddress ##### with open('api/result.json', 'r') as f: data = json.load(f) # connect to database dbconn = psycopg2.connect(host=DB_HOST, database=DB_NAME, user=DB_USER, password=DB_PASS) cur = dbconn.cursor() # start importing for key, node in data['yggnodes'].items(): nodename = "" nodeinfo = {} if "address" in node: ipv6 = keyTo128BitAddress(node['address']) if len(node['address']) == 64 else node['address'] else: ipv6 = keyTo128BitAddress(key) if "coords" in node: coords = node['coords'] else: continue timestamp = node['time'] if "nodeinfo" in node: nodeinfo = node['nodeinfo'] if not saveDefaultNodeInfo: # remove default Node info fields for field in removableFileds: tmprm = nodeinfo.pop(field, None) if "name" in nodeinfo: nodename = nodeinfo['name'] else: nodename = '? %s' % coords nodeinfo = json.dumps(nodeinfo) try: cur.execute( "INSERT INTO yggindex (ipv6, coords, unixtstamp, name) VALUES(%s, %s, %s, %s) ON CONFLICT (ipv6) DO UPDATE SET unixtstamp=%s, coords=%s, name=%s;", (ipv6, coords, timestamp, nodename, timestamp, coords, nodename) ) cur.execute( "INSERT INTO yggnodeinfo (ipv6, nodeinfo, timestamp) VALUES(%s, %s, %s) ON CONFLICT (ipv6) DO UPDATE SET nodeinfo=%s, timestamp=%s;", (ipv6, nodeinfo, timestamp, nodeinfo, timestamp) ) except Exception as e: print("database error inserting") traceback.print_exc() dbconn.commit() cur.close() dbconn.close()