In [5]:
import json
import requests
import json_delta


'''
------------------------------------------------
---  A note about comparison techniques used ---
------------------------------------------------
json_delta is best for serializing/deserializing structures and
minimizing comm overhead.  It's may not be ideal for specialized
comparison of existing JSON
'''


1
Out[5]:
"\n------------------------------------------------\n---  A note about comparison techniques used ---\n------------------------------------------------\njson_delta is best for serializing/deserializing structures and\nminimizing comm overhead.  It's may not be ideal for specialized\ncomparison of existing JSON\n"

In [21]:
import os
import glob   # Wildcard search

file_pattern = "snapshots/"
file_pattern += "HealthData.gov[_][0-9][0-9][0-9][0-9][-][0-9][0-9][-][0-9][0-9][_]data.json"

#print "glob.glob("+file_pattern+")"
#print glob.glob(file_pattern)

In [35]:
def load_file(json_file_name):
    with open(json_file_name) as json_file:
        json_data_struct = json.load(json_file)
        return json_data_struct

file_pattern = "snapshots/"
file_pattern += "HealthData.gov[_][0-9][0-9][0-9][0-9][-][0-9][0-9][-][0-9][0-9][_]data.json"
file_list = glob.glob(file_pattern)


json_data_list = [dict() for x in range(len(file_list))]


'''
#--- Test comparison ---
json_data_list[0] = load_file(file_list[0])
json_data_list[1] = load_file(file_list[1])
totals = compare_datasets(json_data_list[0],json_data_list[1])
print totals
'''


<generator object generate_udiff_lines at 0x1087d62d0>
 {
 "format": "text/csv",
 ...,
+ "_is_federal_dataset": false,
 
+ "keyword": [
+  "health"
+ ],
 
 "accessURL":
-  "https://data.kcmo.org/api/views/ks2s-yguy/rows.csv?accessType=DOWNLOAD",
+  "https://data.mo.gov/api/views/ks2s-yguy/rows.csv?accessType=DOWNLOAD",
 
 "webService":
-  "https://data.kcmo.org/resource/ks2s-yguy",
+  "https://data.mo.gov/resource/ks2s-yguy",
 
 "distribution":
-  [
-   {
-    "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.csv?accessType=DOWNLOAD", 
-    "identifier": "fb610ec4-d39e-497e-8a07-ca4e68a312bd", 
-    "format": "text/csv"
-   }, 
-   {
-    "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.json?accessType=DOWNLOAD", 
-    "identifier": "69034009-efed-4ee2-bef3-65822b6bd9d4", 
-    "format": "application/json"
-   }, 
-   {
-    "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.xml?accessType=DOWNLOAD", 
-    "identifier": "580bcfa2-f082-422d-abb0-57e08a31ad2e", 
-    "format": "application/xml"
-   }, 
-   {
-    "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.rdf?accessType=DOWNLOAD", 
-    "identifier": "b36faca1-6937-4c8a-805c-7b85de83ec2f", 
-    "format": "application/xml+rdf"
-   }, 
-   {
-    "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.xls?accessType=DOWNLOAD", 
-    "identifier": "fc255b13-7e30-490d-a40f-8bbc3f430ccd", 
-    "format": "application/excel"
-   }, 
-   {
-    "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.xlsx?accessType=DOWNLOAD", 
-    "identifier": "445bf997-6b8f-454b-ad85-82559df12bd0", 
-    "format": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
-   }
-  ],
+  [
+   {
+    "accessURL": "https://data.mo.gov/api/views/ks2s-yguy/rows.csv?accessType=DOWNLOAD", 
+    "identifier": "46654d34-e080-44a3-b66a-a72b9d4b6dad", 
+    "format": "text/csv"
+   }, 
+   {
+    "accessURL": "https://data.mo.gov/api/views/ks2s-yguy/rows.json?accessType=DOWNLOAD", 
+    "identifier": "d8e385dd-5b05-492b-be05-afd8d4147fba", 
+    "format": "application/json"
+   }, 
+   {
+    "accessURL": "https://data.mo.gov/api/views/ks2s-yguy/rows.xml?accessType=DOWNLOAD", 
+    "identifier": "b1213343-6dfb-45f7-927d-22c17b58095c", 
+    "format": "application/xml"
+   }, 
+   {
+    "accessURL": "https://data.mo.gov/api/views/ks2s-yguy/rows.rdf?accessType=DOWNLOAD", 
+    "identifier": "9e78289f-c0ad-447b-a05c-e80691bada68", 
+    "format": "application/xml+rdf"
+   }, 
+   {
+    "accessURL": "https://data.mo.gov/api/views/ks2s-yguy/rows.xls?accessType=DOWNLOAD", 
+    "identifier": "1e53ea62-6461-4467-95c7-13279c6fab13", 
+    "format": "application/excel"
+   }, 
+   {
+    "accessURL": "https://data.mo.gov/api/views/ks2s-yguy/rows.xlsx?accessType=DOWNLOAD", 
+    "identifier": "c2ef2a97-570a-4e95-bb15-eb5314b66b55", 
+    "format": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+   }
+  ],
 
 "landingPage":
-  "https://data.kcmo.org/resource/ks2s-yguy"
+  "https://data.mo.gov/resource/ks2s-yguy"
 }

In [278]:
# json_delta.load_and_diff('{"foo":"bar"}', '{"foo":"baz"}', verbose=False)
# print "\n\n----------------------------\n\n"
test = json_delta.load_and_udiff('{"foo":"bar"}', '{"foo":"baz"}')
print test
print '\n'.join(test)


<generator object generate_udiff_lines at 0x107b1f0f0>
 {
 "foo":
-  "bar"
+  "baz"
 }

In [269]:
test = json_delta.udiff(left='{"foo":"bar"}', right='{"foo":"baz"}')
print test
print '\n'.join(test)


<generator object generate_udiff_lines at 0x10b069d70>
-"{\"foo\":\"bar\"}"
+"{\"foo\":\"baz\"}"

In [29]:
# recursively sort any lists it finds (and convert dictionaries
# to lists of (key, value) pairs so that they're orderable):

def ordered_json(obj):
    if isinstance(obj, dict):
        return sorted((k, ordered_json(v)) for k, v in obj.items())
    if isinstance(obj, list):
        return sorted(ordered_json(x) for x in obj)
    else:
        return obj
    
# print              json_data[1]['dataset'][0]
#print
# print ordered_json(json_data[1]['dataset'][0])

In [21]:
# recursively sort any lists it finds (and convert dictionaries
# to lists of (key, value) pairs so that they're orderable):
import collections

def ordered_json2(obj,max_depth):

    if max_depth == 1: return obj + "(max depth reached)"
    
    if isinstance(obj, dict):
        print "Instance: dictionary -- Type " + str(type(obj))
        return sorted((k, ordered_json2(v, max_depth-1)) for k, v in obj.items())
        #return collections.OrderedDict(sorted(obj.items()))
        ## return sorted(ordered_json2({k:v}, max_depth-1) for k, v in obj.items())
    if isinstance(obj, list):
        print "Instance: list -- Type " + str(type(obj))
        return sorted(ordered_json2(x,max_depth-1) for x in obj)
    else:
        return obj

test = {}
#print ordered_json2(,5)
#print ordered_json2({'def1':['abc2','abc1',{'lab1':"c",'lab0':"b"}],'def0':'xyz'},5)
before_test = {'def1':['abc2','abc1',{'lab1':"a",'lab0':"b"}],'def0':'xyz'}
after_test  = {'def1':['abc2','abc1',{'lab1':"a",'lab0':"c"}],'def0':'xyz'}
print ordered_json2([before_test,after_test],5)

#print              json_data[1]['dataset'][0]
print
#print ordered_json(json_data[1]['dataset'][0])
'''
Convert tuple to dictionary: But this isn't sufficient

'''


Instance: list -- Type <type 'list'>
Instance: dictionary -- Type <type 'dict'>
Instance: list -- Type <type 'list'>
Instance: dictionary -- Type <type 'dict'>
Instance: dictionary -- Type <type 'dict'>
Instance: list -- Type <type 'list'>
Instance: dictionary -- Type <type 'dict'>
[[('def0', 'xyz'), ('def1', [[('lab0', 'b(max depth reached)'), ('lab1', 'a(max depth reached)')], 'abc1', 'abc2'])], [('def0', 'xyz'), ('def1', [[('lab0', 'c(max depth reached)'), ('lab1', 'a(max depth reached)')], 'abc1', 'abc2'])]]

Out[21]:
"\nConvert tuple to dictionary: But this isn't sufficient\n\n"

In [218]:
len(json_data[0]['dataset'])


Out[218]:
1633

In [1]:
# Create a dictionary of values for comparison
import json_delta

def compare_datasets(dataset_list_before, dataset_list_after):
    json_compare_dict = {}
    dataset_list_diff = {"Counts":{"Added":0, "Deleted":0, "Changed":0, "No Change":0},
                         "Diff":""}

    '''    
    #=== Sort entire datasets recursively for easier comparison later ===
    print("\n\n===dataset_before===")
    print(dataset_before)
    print("\n\n===dataset_after===")
    print(dataset_after)
    #dataset_before = ordered_json(dataset_before)
    #dataset_after  = ordered_json(dataset_after )
    print("\n\n===ordered_json(dataset_before===")
    print(dataset_before)
    print("\n\n===ordered_json(dataset_after===")
    print(dataset_after)
   
    '''

    #=== First load the "after" values ===
    for index, dataset_after in enumerate(dataset_list_after):

        check_key = dataset_after['identifier']

        json_compare_dict[check_key] = {'Status'    :"Added",
                                        'Before'    :None,
                                        'After'     :dataset_after,
                                        'Difference':None
                                       }
        dataset_list_diff["Counts"]["Added"] += 1


    #=== Second load the "before" values ===
    for index, dataset_before in enumerate(dataset_list_before):

        check_key = dataset_before['identifier']

        if check_key in json_compare_dict:
            # Not deleted, so check for differences
            
            dataset_after = json_compare_dict[check_key]['After']

            # Must compare sorted versions of json struct
            if ordered_json(dataset_after) == ordered_json(dataset_before):
                diff_status = "No Change"
            else:
                diff_status = "Changed"
           
                # Analyze difference only if changed
                udiff_list = json_delta.udiff(
                    dataset_before, 
                    dataset_after
                     )
                udiff_output = '\n'.join(udiff_list)
                dataset_list_diff["Diff"] = udiff_output
                
                
                print "\n\n==dumps_before==========\n\n"
                print 'type='+str(type(dataset_before))
                print json.dumps(dataset_before)
                print "\n\n==dumps_after==========\n\n"
                print 'type='+str(type(dataset_after))
                print json.dumps(dataset_after)
                print "\n\n==load udiff list==========\n\n"
                print 'type='+str(type(udiff_list))
                print udiff_list
                print "\n\n==load udiff output==========\n\n"
                print 'type='+str(type(udiff_output))
                print udiff_output

                
                return dataset_list_diff

        else:
            # Deleted
            diff_status = "Deleted"
            
            
        json_compare_dict[check_key] = {'Status':diff_status,
                                        'Before':dataset_before
                                        }
        dataset_list_diff["Counts"][diff_status] += 1
        dataset_list_diff["Counts"]["Added"    ] -= 1
            
    dataset_list_diff["Counts"]["Added"] = max(0,dataset_list_diff["Counts"]["Added"])
    return dataset_list_diff
    
    
    
#--- Test it ---
#totals = compare_datasets(json_data[0]['dataset'][:2],json_data[1]['dataset'][:2])
#totals = compare_datasets(json_data[0]['dataset'],json_data[1]['dataset'])
#print totals
totals = compare_datasets(json_data_list[0],json_data_list[1])
print totals["Counts"]
print totals["Diff"]


  File "<ipython-input-1-a02407370c03>", line 62
    print "\n\n==dumps_before==========\n\n"
                                           ^
SyntaxError: Missing parentheses in call to 'print'

In [57]:
if "landingPage" in json_data_list[0][0]: print json_data_list[0][0]["landingPage"]
if "publisher" in json_data_list[0][0]: print json_data_list[0][0]["publisher"]
if "bureauCode" in json_data_list[0][0]: print json_data_list[0][0]["bureauCode"]
print json.dumps(json_data_list[0][0], sort_keys=False, indent=4)


https://data.kcmo.org/resource/ks2s-yguy
State of Missouri
{
    "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.csv?accessType=DOWNLOAD", 
    "publisher": "State of Missouri", 
    "accessLevel": "Public", 
    "description": "Cooling Centers Sites in Missouri", 
    "title": "Missouri Cooling Centers Sites", 
    "format": "text/csv", 
    "landingPage": "https://data.kcmo.org/resource/ks2s-yguy", 
    "modified": "2013-03-19", 
    "theme": [
        "Health"
    ], 
    "dataQuality": true, 
    "contactPoint": "Health Data Initiative", 
    "identifier": "a2bded07-837d-4671-89be-748deb455f36", 
    "mbox": "Healthdata@hhs.gov", 
    "distribution": [
        {
            "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.csv?accessType=DOWNLOAD", 
            "identifier": "fb610ec4-d39e-497e-8a07-ca4e68a312bd", 
            "format": "text/csv"
        }, 
        {
            "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.json?accessType=DOWNLOAD", 
            "identifier": "69034009-efed-4ee2-bef3-65822b6bd9d4", 
            "format": "application/json"
        }, 
        {
            "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.xml?accessType=DOWNLOAD", 
            "identifier": "580bcfa2-f082-422d-abb0-57e08a31ad2e", 
            "format": "application/xml"
        }, 
        {
            "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.rdf?accessType=DOWNLOAD", 
            "identifier": "b36faca1-6937-4c8a-805c-7b85de83ec2f", 
            "format": "application/xml+rdf"
        }, 
        {
            "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.xls?accessType=DOWNLOAD", 
            "identifier": "fc255b13-7e30-490d-a40f-8bbc3f430ccd", 
            "format": "application/excel"
        }, 
        {
            "accessURL": "https://data.kcmo.org/api/views/ks2s-yguy/rows.xlsx?accessType=DOWNLOAD", 
            "identifier": "445bf997-6b8f-454b-ad85-82559df12bd0", 
            "format": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        }
    ], 
    "webService": "https://data.kcmo.org/resource/ks2s-yguy"
}

In [211]:
#=== Check status counts between consecutive days ===

totals = {}
for key, value in json_compare_dict.iteritems():
    #print dataset['identifier']
    check_status = value['Status']
    if check_status in totals:
        totals[check_status] += 1
    else:
        totals[check_status]  = 1
    #break

totals


Out[211]:
{'Added': 33, 'Not New': 1633}

In [244]:
#json_data[0]['dataset'][0,1,3]
for dataset in json_data[0]['dataset'][:2]:
#    print dataset
    check_key = dataset['identifier']
#json_data[0]['dataset'][:2]

In [3]:
import requests
# find list of files
directory_url = 'http://data-staging.civicagency.org/archive/datajson'
directory_response = requests.get(directory_url)

In [25]:
#directory_response.status_code
#directory_response.text

In [ ]:
# Get HTML page
from lxml import html
tree = html.fromstring(directory_response.content)
tree.xpath

In [29]:
from bs4 import BeautifulSoup
directory_soup = BeautifulSoup(directory_response.text)

In [124]:
suffix_url = '/49021.json'
datajson_url_list = []

for a_tag in directory_soup.find_all('a', href=True):
    a_text = a_tag.text.replace("/", "")
    if valid_date(a_text): 
        print(directory_url+"/"+a_text+suffix_url)
        datajson_url_list.append(directory_url+"/"+a_text+suffix_url)
    #print("Found the URL:"+ a_tag['href'] + "   Text: "+ a_tag.text, valid_date(a_tag.text))
    #print re.sub('[/]', '', a_tag.text)

    
# Sorts list to start with most recent
datajson_url_list.sort(reverse=True)


http://data-staging.civicagency.org/archive/datajson/2014-02-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-03-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-04-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-04-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-04-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-05-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-05-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-05-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-05-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-06-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-07-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-07-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-07-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-07-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-07-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-07-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-08-31/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-09-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-10-31/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-11-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2014-12-31/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-01-31/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-02-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-03-31/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-04-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-05-31/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-06-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-07-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-08-31/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-09-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-10-31/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-11/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-12/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-13/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-14/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-15/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-16/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-17/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-18/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-19/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-20/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-21/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-22/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-23/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-24/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-25/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-26/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-27/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-28/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-29/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-11-30/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-01/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-02/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-03/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-04/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-05/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-06/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-07/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-08/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-09/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-10/49021.json
http://data-staging.civicagency.org/archive/datajson/2015-12-11/49021.json

In [137]:
read_limit = 10

for index,url in enumerate(datajson_url_list):
    print url
    head = requests.head(url,headers={'Accept-Encoding': 'identity'})
    # print (head.headers['content-length'])

    if head.status_code == 200:
        break 
    else:
        print head.status_code

    if read_limit:
        if index+1 >= read_limit:
            break


http://data-staging.civicagency.org/archive/datajson/2015-12-11/49021.json
404
http://data-staging.civicagency.org/archive/datajson/2015-12-10/49021.json
404
http://data-staging.civicagency.org/archive/datajson/2015-12-09/49021.json
404
http://data-staging.civicagency.org/archive/datajson/2015-12-08/49021.json
404
http://data-staging.civicagency.org/archive/datajson/2015-12-07/49021.json
404
http://data-staging.civicagency.org/archive/datajson/2015-12-06/49021.json
404
http://data-staging.civicagency.org/archive/datajson/2015-12-05/49021.json
404
http://data-staging.civicagency.org/archive/datajson/2015-12-04/49021.json
404
http://data-staging.civicagency.org/archive/datajson/2015-12-03/49021.json
404
http://data-staging.civicagency.org/archive/datajson/2015-12-02/49021.json
404

In [158]:
# Function to obtain size of page from headers
def get_page_size(url):
    head = requests.head(url,headers={'Accept-Encoding': 'identity'})
    # print (head.headers['content-length'])

    if head.status_code == 200:
        if 'Content-Length' in head.headers:
            size = head.headers['Content-Length']
            return size
    return 0   # When no size is avail


#--- Test function ---
print datajson_url_list[100]+": "+str(get_page_size(datajson_url_list[100]))
print datajson_url_list[0]  +": "+str(get_page_size(datajson_url_list[0  ]))


http://data-staging.civicagency.org/archive/datajson/2015-09-02/49021.json: 1840306
http://data-staging.civicagency.org/archive/datajson/2015-12-11/49021.json: 0

In [ ]:


In [70]:
# Function to help find relevant links 
import datetime
def valid_date(date_text):
    try:
        datetime.datetime.strptime(date_text, '%Y-%m-%d')
        return True
    except ValueError:
        # raise ValueError("Incorrect data format, should be YYYY-MM-DD")
        return False

print(valid_date('2003-12-223'))


False

In [70]:
Accept
requests.head(url,headers={'Accept-Encoding': 'identity'})

r = requests.head('http://pymotw.com/2/urllib/index.html',headers={'Accept-Encoding': 'identity'})
>>> r.headers['content-length']


/Applications/anaconda/anaconda/lib/python2.7/site-packages/IPython/parallel.py:13: ShimWarning: The `IPython.parallel` package has been deprecated. You should import from ipyparallel instead.
  "You should import from ipyparallel instead.", ShimWarning)

In [41]:
#json_data[0] #['Dataset']
json_data[0]['dataset'][0]


Out[41]:
{u'@type': u'dcat:Dataset',
 u'accessLevel': u'public',
 u'bureauCode': [u'009:00'],
 u'contactPoint': {u'fn': u'Jackie Haven',
  u'hasEmail': u'mailto:noemailprovided@usa.gov'},
 u'description': u'<p>MyPyramid Food Data provides information on the total calories; calories from solid fats, added sugars, and alcohol (extras); MyPyramid food group and subgroup amounts; and saturated fat content of over 1,000 commonly eaten foods with corresponding commonly used portion amounts. This information is key to help consumers meet the recommendations of the Dietary Guidelines for Americans and manage their weight by understanding how many calories are consumed from "extras." CNPP has created an interactive tool from this data set available on the web at MyFood-a-pedia.gov. A mobile version is coming soon to provide consumers with assistance on-the-go.</p>\n',
 u'identifier': u'USDA-FNS-00001',
 u'keyword': [u'health'],
 u'language': [u'en'],
 u'modified': u'2015-08-29',
 u'programCode': [u'009:000'],
 u'publisher': {u'@type': u'org:Organization',
  u'name': u'US Department of Agriculture'},
 u'title': u'MyPyramid Food Raw Data'}

In [ ]: