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

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)

ProPublica Congress API - list of all members

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)