Skip to content

Instantly share code, notes, and snippets.

@adborden
Created July 2, 2015 04:17
Show Gist options
  • Save adborden/86cd3b9076e2279d6d9c to your computer and use it in GitHub Desktop.
Save adborden/86cd3b9076e2279d6d9c to your computer and use it in GitHub Desktop.
Fetch transaction ids for F460A and F460E, fetch 2015 transactions for SFEC
import json
import csv
import sys
import itertools
from swaggerpy.client import SwaggerClient
CONNECT2_SPEC = "https://netfile.com/Connect2/api/resources"
class Connect2API(object):
"""Netfile Connect2 API"""
def __init__(self):
self.api = SwaggerClient(CONNECT2_SPEC)
def getpubliccampaignagencies(self):
"""
GET /pubic/campaign/agencies
"""
response = self.api.public.getpubliccampaignagencies()
assert response.status_code == 200
data = response.json()
assert data.has_key('agencies')
return data['agencies']
def postpubliccampaignsearchtransactionquery(self, query):
"""
POST /public/campaign/search/transaction/query
"""
page_index = 0
query.update({
'currentPageIndex': page_index,
})
response = self.api.public.postpubliccampaignsearchtransactionquery(Query=query)
assert response.status_code == 200
pages = response.json()['totalMatchingPages']
print "%d pages available" % (pages)
pages = max(pages, 2) #TODO Once the queries are set, unlimit this. For now, limit to two pages of data
results = response.json()['results']
while True:
page_index += 1
for result in results:
yield result
if page_index >= pages:
break
# Fetch another page
query['currentPageIndex'] = page_index
response = self.api.public.postpubliccampaignsearchtransactionquery(Query=query)
assert response.status_code == 200
results = response.json()['results']
def getpubliccampaignlisttransactiontypes(self):
"""
GET /pubic/campaign/list/transaction/types
"""
response = self.api.public.getpubliccampaignlisttransactiontypes()
assert response.status_code == 200
data = response.json()
assert data.has_key('items')
return data['items']
def demo():
connect2 = Connect2API()
csvfile = sys.stdout
transaction_types = connect2.getpubliccampaignlisttransactiontypes()
#print transaction_types
transaction_ids = [item['id'] for item in transaction_types if item['abbreviation'] in ['F460A', 'F460E']]
#print transaction_ids
transactions = []
for transaction_id in transaction_ids:
transactions = itertools.chain(transactions, connect2.postpubliccampaignsearchtransactionquery({
'TransactionType': transaction_id,
'Agency': 52, # SF Ethics Commission
#'Agency': 129, # California SOS
#'transactionType': 30, # Form 460
'DateStart': '2015-01-01T00:00:00Z',
'sortOrder': 1, # DateDescending
})
)
# Transactions in SF
transaction = transactions.next() # Work-around generator magic
headers = transaction.keys()
transaction_csv = csv.DictWriter(csvfile, headers)
transaction_csv.writeheader()
for transaction in transactions:
transaction_csv.writerow(transaction)
return
# Agencies
agencies = connect2.getpubliccampaignagencies()
headers = agencies[0].keys()
agency_csv = csv.DictWriter(csvfile, headers)
agency_csv.writeheader()
for agency in agencies:
agency_csv.writerow(agency)
transactions = connect2.postpubliccampaignsearchtransactionquery({
'Agency': 52, # SF Ethics Commission
#'Agency': 129, # California SOS
#'transactionType': 30, # Form 460
'DateStart': '2015-01-01T00:00:00Z',
'sortOrder': 1, # DateDescending
})
# Transactions in SF
transaction = transactions.next() # Work-around generator magic
headers = transaction.keys()
transaction_csv = csv.DictWriter(csvfile, headers)
transaction_csv.writeheader()
for transaction in transactions:
transaction_csv.writerow(transaction)
if __name__ == '__main__':
demo()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment