To collect my data I used get requests to retrieve information from two ProPublica APIs in .json format, and exported the data into two separate .csv files.
In [ ]:
# Import required libraries
import requests
import urllib
import json
from __future__ import division
import math
import time
https://propublica.github.io/campaign-finance-api-docs/#candidates
In [10]:
# set key
key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# set base url
base_url="https://api.propublica.org/campaign-finance/v1/"
# set headers
headers = {'X-API-Key': key}
# set url parameters
cycle = "2014/"
method = "candidates/"
file_format = ".json"
# create a list of FEC IDs from http://www.fec.gov/data/DataCatalog.do to run the API request on more than one ID
fec_id_list = []
with open('fecid2014.txt') as file:
for line in file:
fec_id_list.append(line.strip())
In [ ]:
# make request, build list of results for each FEC ID
data = []
for fec_id in fec_id_list:
r = requests.get(base_url+cycle+method+fec_id+file_format, headers=headers)
candidate = r.json()['results']
data.append(candidate)
time.sleep(3)
print(data)
In [ ]:
# format data for export
data = [v for sublist in data for v in sublist]
data_keys = data[0].keys()
In [ ]:
# export to csv
import csv
with open('ppcampfin.csv', 'w') as file:
dict_writer = csv.DictWriter(file, data_keys)
dict_writer.writeheader()
dict_writer.writerows(data)
https://propublica.github.io/congress-api-docs/?shell#lists-of-members
In [ ]:
# set key
key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# set base url
base_url="https://api.propublica.org/congress/v1/"
# set url parameters
congress = "114/" #102-114 for House, 80-114 for Senate
chamber = "senate" #house or senate
method="/members"
file_format = ".json"
#set headers
headers = {'X-API-Key': key}
In [ ]:
# make request
r = requests.get(base_url+congress+chamber+method+file_format, headers=headers)
In [ ]:
# parse data for component nested dictionaries
data=(r.json())
bio_keys = data['results'][0]['members'][0]
bio_list = data['results'][0]['members']
In [ ]:
# export to csv
import csv
with open('bio.csv', 'w') as file:
dict_writer = csv.DictWriter(file, bio_keys)
dict_writer.writeheader()
dict_writer.writerows(bio_list)