policymap/add_bill_type.py

69 lines
1.9 KiB
Python
Raw Permalink Normal View History

2025-03-14 03:35:23 -07:00
import os
import requests
from dotenv import load_dotenv
from neo4j import GraphDatabase
# Load environment variables from .env file
load_dotenv()
# Neo4j connection details
NEO4J_URI = os.getenv('NEO4J_URI')
NEO4J_USER = os.getenv('NEO4J_USER')
NEO4J_PASSWORD = os.getenv('NEO4J_PASSWORD')
# Congress API key
CONGRESS_API_KEY = os.getenv('CONGRESS_API_KEY')
# Initialize Neo4j driver
driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USER, NEO4J_PASSWORD))
def fetch_bills(offset):
url = f"https://api.congress.gov/v3/bill/117/sres?offset={offset}&api_key={CONGRESS_API_KEY}"
print(f"Fetching data from {url}")
response = requests.get(url)
if response.status_code == 200:
return response.json()
else:
raise Exception(f"Failed to fetch data: {response.status_code}")
def flatten_json(y):
out = {}
def flatten(x, name=''):
if type(x) is dict:
for a in x:
flatten(x[a], name + a + '_')
elif type(x) is list:
i = 0
for a in x:
flatten(a, name + str(i) + '_')
i += 1
else:
out[name[:-1]] = x
flatten(y)
return out
def create_bill_node(tx, bill_data):
flat_bill_data = flatten_json(bill_data)
print(f"Creating Bill node with properties: {flat_bill_data}")
query = "CREATE (b:Bill $properties)"
tx.run(query, properties=flat_bill_data)
def main():
offset = 0
while True:
try:
bills_data = fetch_bills(offset)
if not bills_data or len(bills_data['bills']) == 0:
break
with driver.session() as session:
for bill in bills_data['bills']:
session.write_transaction(create_bill_node, bill)
offset += 250
except Exception as e:
print(f"Error: {e}")
break
if __name__ == "__main__":
main()
driver.close()