Cómo usar la API

En este documento se describe lo que necesitas saber para usar la API de Civic Information de Google. Puedes consultar estas Preguntas frecuentes sobre la API de Civic Info, que contiene información básica sobre la API y las preguntas frecuentes de nuestro foro de usuarios. Además, puedes ver dos ejemplos a continuación: el primero para buscar información del votante durante una elección y el segundo para buscar representantes electos.

Cómo identificar tu aplicación ante Google

Tu aplicación necesita identificarse cada vez que envía una solicitud a la API de Civic Information de Google; para ello, debe incluir una clave de API con cada solicitud.

Adquiere y usa una clave de API

Para adquirir una clave de API, haz lo siguiente:

  1. Abre la página Credenciales en la Consola de API.
  2. En esta API, se admiten dos tipos de credenciales. Crea las credenciales apropiadas para tu proyecto:
    • OAuth 2.0: Siempre que se soliciten datos privados del usuario, mediante tu aplicación se debe enviar un token OAuth 2.0 junto con la solicitud. En primer lugar, se envía un ID de cliente y, posiblemente, un secreto de cliente para obtener un token a través de la aplicación. Puedes generar credenciales OAuth 2.0 para aplicaciones web, cuentas de servicio o aplicaciones instaladas.

      Nota: Dado que esta API no tiene ningún método que requiera autorización de OAuth 2.0, es posible que solo necesites obtener claves de API, como se describen a continuación. Sin embargo, si tu aplicación llama a otras API que requieren la autorización del usuario, aún necesitarás credenciales de OAuth 2.0.

      Para obtener más información, consulta la documentación de OAuth 2.0.

    • Claves de API: Una solicitud que no proporciona un token de OAuth 2.0 debe enviar una clave de API. Con la clave de API, se identifica tu proyecto y se proporciona acceso a la API, la cuota y los informes.

      En la API, se admiten varios tipos de restricciones sobre las claves de API. Si la clave de API que necesitas aún no existe, crea una en la consola. Para ello, haz clic en Crear credenciales > Clave de API. Puedes restringir la clave antes de usarla en producción. Para ello, haz clic en Restringir clave y selecciona una de las Restricciones.

Para garantizar la seguridad de tus claves de API, sigue las prácticas recomendadas de uso seguro de las claves de API.

Una vez que tienes una clave de API, puedes usar tu aplicación para adjuntar el parámetro de consulta key=yourAPIKey a todas las URL de solicitud.

La clave de API en las URL se incorpora de manera segura, por lo que no necesita codificación.

Restricciones de la clave de API

De forma predeterminada, tu clave de API no está restringida, lo cual no es seguro si cualquier persona puede leerla (por ejemplo, si se encuentra en un navegador) o acceder al dispositivo en el que se encuentra ubicada la clave. Te recomendamos aplicar una restricción a esta clave de API para evitar el uso no autorizado.

Para agregar una restricción, haz clic en Restringir clave en el cuadro de diálogo Se creó la clave de API. Aparecerá el panel de configuración Clave de API:

El tipo de restricción que selecciones dependerá de las necesidades de tu aplicación:

  • Las aplicaciones web que interactúan de forma directa con la API (es decir, no a través de ningún backend o middleware) deben agregar una restricción de URLs de referencia HTTP. Sin embargo, ten en cuenta que esas aplicaciones expondrán sus claves de API públicamente. Te recomendamos que uses el esquema de autenticación de una cuenta de servicio en su lugar.
  • Las aplicaciones de backend que no pueden admitir cuentas de servicio (por ejemplo, los dispositivos incorporados que no tienen un lenguaje compatible en la biblioteca cliente) deben agregar una restricción de direcciones IP para evitar el uso de clientes con diferentes direcciones IP.
  • Las aplicaciones para Android deben agregar una restricción de apps de Android, así como el nombre de tu paquete y la huella digital del certificado de firma SHA-1.
  • En las aplicaciones para iOS, se debe agregar una restricción de apps para iOS y todos los identificadores de paquete de iOS a fin de restringir las llamadas a la API a estos paquetes de iOS.

Para las pruebas, es posible que no desees aplicar ninguna restricción en absoluto. Sin embargo, te recomendamos que agregues una restricción a esta clave o la borres una vez que implementes tu aplicación en producción.

Ejemplo deElectionQuery

A continuación, se muestra un ejemplo (con la versión de la API "v2") para llamar a la API de electionQuery a fin de obtener una lista de ID electorales válidos y, luego, usar la API de voterInfoQuery con la dirección registrada de un votante a fin de obtener información para una elección seleccionada.

Usa choiceQuery para obtener una lista de los IDs de elecciones válidos:

  https://www.googleapis.com/civicinfo/v2/elections?key=<YOUR_API_KEY>
  

Respuesta de elecciónQuery:

{
 "kind": "civicinfo#electionsqueryresponse",
 "elections": [
  {
   "id": "2000",
   "name": "VIP Test Election",
   "electionDay": "2013-06-06"
  },
  {
   "id": "2124",
   "name": "Rhode Island 2012 Primary Election",
   "electionDay": "2012-09-11"
  },
  {
   "id": "2126",
   "name": "Delaware 2012 Primary Election",
   "electionDay": "2012-09-11"
  }
 ]
}

VotInfoQuery con curl

Usa curl para enviar una solicitud de voterInfoQuery con el ID de elección 2000 para la prueba VIP y un votante en la dirección (prueba) 1263 Pacific Ave. Kansas City, Kansas (consulta la respuesta voterInfoQuery a continuación):

curl "https://www.googleapis.com/civicinfo/v2/voterinfo?key=<YOUR_API_KEY>&address=1263%20Pacific%20Ave.%20Kansas%20City%20KS&electionId=2000"

VotInfoQuery a través de la biblioteca cliente de la API de Google para JavaScript

En este ejemplo, se emite la misma VotInfoQuery que en el ejemplo de curl anterior, pero se usa la biblioteca cliente de JavaScript. La respuesta de voterInfoQuery es la misma que la del ejemplo de curl.

<!doctype html>
<html>
  <head>
    <script>
      /**
       * Build and execute request to look up voter info for provided address.
       * @param {string} address Address for which to fetch voter info.
       * @param {function(Object)} callback Function which takes the
       *     response object as a parameter.
       */
       function lookup(address, callback) {
       /**
         * Election ID for which to fetch voter info.
         * @type {number}
         */
        var electionId = 2000;
 
        /**
         * Request object for given parameters.
         * @type {gapi.client.HttpRequest}
         */
        var req = gapi.client.request({
            'path' : '/civicinfo/v2/voterinfo',
            'params' : {'electionId' : electionId, 'address' : address}
        });
       req.execute(callback);
      }

      /**
       * Render results in the DOM.
       * @param {Object} response Response object returned by the API.
       * @param {Object} rawResponse Raw response from the API.
       */
      function renderResults(response, rawResponse) {
        var el = document.getElementById('results');
        if (!response || response.error) {
          el.appendChild(document.createTextNode(
              'Error while trying to fetch polling place'));
          return;
        }
        var normalizedAddress = response.normalizedInput.line1 + ' ' +
            response.normalizedInput.city + ', ' +
            response.normalizedInput.state + ' ' +
            response.normalizedInput.zip;
        if (response.pollingLocations.length > 0) {
          var pollingLocation = response.pollingLocations[0].address;
          var pollingAddress = pollingLocation.locationName + ', ' +
              pollingLocation.line1 + ' ' +
              pollingLocation.city + ', ' +
              pollingLocation.state + ' ' +
              pollingLocation.zip;
          var normEl = document.createElement('strong');
          normEl.appendChild(document.createTextNode(
              'Polling place for ' + normalizedAddress + ': '));
          el.appendChild(normEl);
          el.appendChild(document.createTextNode(pollingAddress));
        } else {
          el.appendChild(document.createTextNode(
              'Could not find polling place for ' + normalizedAddress));
        }
      }

      /**
       * Initialize the API client and make a request.
       */
      function load() {
        gapi.client.setApiKey('YOUR API KEY GOES HERE');
        lookup('1263 Pacific Ave. Kansas City KS', renderResults);
      }
    </script>
    <script src="https://apis.google.com/js/client.js?onload=load"></script>
  </head>
  <body>
    <div id="results"></div>
  </body>
</html>

Respuesta de votoInfoQuery:

{
 "kind": "civicinfo#voterinforesponse",
 "status": "success",
 "election": {
  "id": "2000",
  "name": "VIP Test Election",
  "electionDay": "2013-06-06"
 },
 "normalizedInput": {
  "line1": "1263 Pacific Ave",
  "city": "Kansas City",
  "state": "KS",
  "zip": "66102"
 },
 "pollingLocations": [
  {
   "address": {
    "locationName": "National Guard Armory",
    "line1": "100 S 20th St",
    "line2": "",
    "line3": "",
    "city": "Kansas City",
    "state": "KS",
    "zip": "66102 "
   },
   "pollingHours": " - "
  }
 ],
 "contests": [
  {
   "type": "General",
   "office": "Attorney"
  },
  {
   "type": "General",
   "office": "Sheriff"
  },
  {
   "type": "General",
   "office": "Kansas Representative 32",
   "district": {
    "name": "Kansas Representative 32",
    "scope": "stateLower",
    "id": "32"
   },
   "sources": [
    {
     "name": "Voting Information Project",
     "official": true
    }
   ]
  },
  {
   "type": "General",
   "office": "Governor/Lt. Governor",
   "candidates": [
    {
     "name": "Andrew P.  Gray",
     "party": "Libertarian",
     "email": "chair@lpks.org"
    },
    {
     "name": "Kenneth (ken) W. Cannon",
     "party": "Reform"
    },
    {
     "name": "Tom Holland",
     "party": "Democratic",
     "candidateUrl": "www.tomhollandforkansas.com",
     "email": "info@tomhollandforkansas.com"
    },
    {
     "name": "Sam Brownback",
     "party": "Republican",
     "candidateUrl": "www.brownbackforkansas.com",
     "email": "media@brownback.com"
    }
   ]
  },
  {
   "type": "General",
   "office": "KCKCC Member AL Brd of Trustee"
  },
  {
   "type": "General",
   "office": "Secretary of State",
   "candidates": [
    {
     "name": "Chris Biggs",
     "party": "Democratic"
    },
    {
     "name": "Kris Kobach",
     "party": "Republican"
    },
    {
     "name": "Phillip Horatio Lucas",
     "party": "Libertarian"
    },
    {
     "name": "Derek Langseth",
     "party": "Reform"
    }
   ]
  },
  {
   "type": "General",
   "office": "U.S. Senate",
   "district": {
    "name": "U.S. Senate",
    "scope": "statewide",
    "id": "5"
   },
   "candidates": [
    {
     "name": "Lisa Johnston",
     "party": "Democratic",
     "candidateUrl": "www.lisaforkansas.com",
     "phone": "913-662-1457",
     "email": "lisa@lisaforkansas.com"
    },
    {
     "name": "Jerry Moran",
     "party": "Republican"
    },
    {
     "name": "Michael Wm. Dann",
     "party": "Libertarian"
    },
    {
     "name": "Joseph (joe) K. Bellis",
     "party": "Reform"
    }
   ],
   "sources": [
    {
     "name": "Voting Information Project",
     "official": true
    }
   ]
  },
  {
   "type": "General",
   "office": "BD of Public Utilities 2"
  },
  {
   "type": "General",
   "office": "Attorney General",
   "candidates": [
    {
     "name": "Steve Six",
     "party": "Democratic"
    },
    {
     "name": "Derek Schmidt",
     "party": "Republican"
    },
    {
     "name": "Dennis Hawver",
     "party": "Libertarian"
    }
   ]
  },
  {
   "type": "General",
   "office": "U.S. Representative 3"
  },
  {
   "type": "General",
   "office": "Governor/Lt. Governor",
   "district": {
    "name": "Governor/Lt. Governor",
    "scope": "statewide",
    "id": "1"
   },
   "candidates": [
    {
     "name": "Andrew P.  Gray",
     "party": "Libertarian",
     "email": "chair@lpks.org"
    },
    {
     "name": "Kenneth (ken) W. Cannon",
     "party": "Reform"
    },
    {
     "name": "Tom Holland",
     "party": "Democratic",
     "candidateUrl": "www.tomhollandforkansas.com",
     "email": "info@tomhollandforkansas.com"
    },
    {
     "name": "Sam Brownback",
     "party": "Republican",
     "candidateUrl": "www.brownbackforkansas.com",
     "email": "media@brownback.com"
    }
   ],
   "sources": [
    {
     "name": "Voting Information Project",
     "official": true
    }
   ]
  },
  {
   "type": "General",
   "office": "Commissioner-At-Large 2"
  },
  {
   "type": "General",
   "office": "Kansas Senate 6"
  },
  {
   "type": "General",
   "office": "Clerk"
  },
  {
   "type": "General",
   "office": "President / Vice President"
  },
  {
   "type": "General",
   "office": "Register of Deeds"
  },
  {
   "type": "General",
   "office": "BD of Public Utilities (AL)"
  },
  {
   "type": "General",
   "office": "Commissioner 2"
  },
  {
   "type": "General",
   "office": "USD 500"
  },
  {
   "type": "General",
   "office": "State Board of Education 1"
  },
  {
   "type": "General",
   "office": "Treasurer"
  }
 ],
 "state": [
  {
   "name": "State of Kansas",
   "electionAdministrationBody": {
    "name": "Kansas",
    "electionOfficials": [
     {
      "name": "Brad Bryant",
      "title": "Election Director",
      "officePhoneNumber": "785-296-4561",
      "emailAddress": "cclark@essvote.com"
     }
    ]
   },
   "local_jurisdiction": {
    "name": "Wyandotte",
    "electionAdministrationBody": {
     "name": "Wyandotte",
     "electionInfoUrl": "http://www.wycokck.org/election",
     "electionOfficials": [
      {
       "name": "Bruce Newby",
       "title": "Election Commissioner",
       "officePhoneNumber": "(913) 573-8500",
       "emailAddress": "hbbrooks@essvote.com"
      }
     ]
    },
    "sources": [
     {
      "name": "Voting Information Project",
      "official": true
     }
    ]
   },
   "sources": [
    {
     "name": "Voting Information Project",
     "official": true
    }
   ]
  }
 ]
}

RepresentationInfoQuery con cURL

Este es un ejemplo de cómo buscar representantes electos para una dirección. Usa curl a fin de enviar una solicitud representativeInfoByAddress para la dirección (de prueba) 1263 Pacific Ave. Kansas City, KS (consulta la respuesta representativaInfoByAddress a continuación):

curl "https://www.googleapis.com/civicinfo/v2/representatives?key=<YOUR_API_KEY>&address=1263%20Pacific%20Ave.%20Kansas%20City%20KS"

Cómo informar un error

¿Ve información incorrecta o faltante de un funcionario electo? En ocasiones, los funcionarios públicos dejan cargos antes de que termine su mandato o cambian su información de contacto. Infórmanos sobre cambios como estos que aún no se reflejen en los datos que te mostramos.

Confirmaremos tu informe con otros usuarios, proveedores de datos o fuentes de datos gubernamentales oficiales. Debido al volumen de informes, es posible que no podamos responderte directamente. Si se aprueba, tu cambio podría demorar un tiempo en aparecer en los resultados de la API.

Para informar un error, completa este formulario.

Respuesta de renameInfoByAddress:

{
 "kind": "civicinfo#representativeInfoResponse",
 "status": "success",
 "normalizedInput": {
  "line1": "1263 pacific ave",
  "city": "kansas city",
  "state": "KS",
  "zip": "66102"
 },
 "divisions": {
  "ocd-division/country:us/state:ks/county:wyandotte/council_district:2": {
   "name": "Wyandotte County Commissioner District 2",
   "scope": "countyCouncil"
  },
  "ocd-division/country:us/state:ks/cd:3": {
   "name": "Kansas's 3rd congressional district",
   "scope": "congressional",
   "officeIndices": [ 0 ]
  },
  "ocd-division/country:us/state:ks/sldl:32": {
   "name": "Kansas House of Representatives district 32",
   "scope": "stateLower",
   "officeIndices": [ 1 ]
  },
  "ocd-division/country:us/state:ks/place:kansas_city": {
   "name": "Kansas City city",
   "scope": "citywide",
   "officeIndices": [ 2, 3, 4, 5, 6, 7, 8 ]
  },
  "ocd-division/country:us/state:ks/county:wyandotte": {
   "name": "Wyandotte County",
   "scope": "countywide"
  },
  "ocd-division/country:us": {
   "name": "United States",
   "scope": "national",
   "officeIndices": [ 9, 10 ]
  },
  "ocd-division/country:us/state:ks": {
   "name": "Kansas",
   "scope": "statewide",
   "officeIndices": [ 11, 12, 13, 14, 15, 16, 17 ]
  },
  "ocd-division/country:us/state:ks/sldu:6": {
   "name": "Kansas State Senate district 6",
   "scope": "stateUpper",
   "officeIndices": [ 18 ]
  }
 },
 "offices": [
  {
   "name": "United States House of Representatives KS-03",
   "level": "federal",
   "officialIndices": [ 0 ]
  },
  {
   "name": "KS State House District 32",
   "level": "state",
   "officialIndices": [ 1 ]
  },
  {
   "name": "Sheriff",
   "level": "county",
   "officialIndices": [ 2 ]
  },
  {
   "name": "District Attorney",
   "level": "county",
   "officialIndices": [ 3 ]
  },
  {
   "name": "Register of Deeds",
   "level": "county",
   "officialIndices": [ 4 ]
  },
  {
   "name": "Director of Revenue",
   "level": "county",
   "officialIndices": [ 5 ]
  },
  {
   "name": "Unified Government Clerk",
   "level": "county",
   "officialIndices": [ 6 ]
  },
  {
   "name": "Unified Government Commission, At Large, District 1",
   "level": "county",
   "officialIndices": [ 7 ]
  },
  {
   "name": "Unified Government Commission, At Large, District 2",
   "level": "county",
   "officialIndices": [ 8 ]
  },
  {
   "name": "President",
   "level": "federal",
   "officialIndices": [ 9 ]
  },
  {
   "name": "Vice President",
   "level": "federal",
   "officialIndices": [ 10 ]
  },
  {
   "name": "Governor",
   "level": "state",
   "officialIndices": [ 11 ]
  },
  {
   "name": "State Treasurer",
   "level": "state",
   "officialIndices": [ 12 ]
  },
  {
   "name": "Attorney General",
   "level": "state",
   "officialIndices": [ 13 ]
  },
  {
   "name": "Secretary of State",
   "level": "state",
   "officialIndices": [ 14 ]
  },
  {
   "name": "Lieutenant Governor",
   "level": "state",
   "officialIndices": [ 15 ]
  },
  {
   "name": "United States Senate",
   "level": "federal",
   "officialIndices": [ 16, 17 ]
  },
  {
   "name": "Insurance Commissioner",
   "level": "state",
   "officialIndices": [ 18 ]
  },
  {
   "name": "KS State Senate District 6",
   "level": "state",
   "officialIndices": [ 19 ]
  }
 ],
 "officials": [
  {
   "name": "Kevin Yoder",
   "address": [
    {
     "line1": "215 Cannon HOB",
     "city": "washington d.c.",
     "state": "DC",
     "zip": "20515"
    }
   ],
   "party": "Republican",
   "phones": [
    "(202) 225-2865"
   ],
   "urls": [
    "http://yoder.house.gov/"
   ],
   "photoUrl": "http://yoder.house.gov/images/user_images/headshot.jpg",
   "channels": [
    {
     "type": "Facebook",
     "id": "CongressmanKevinYoder"
    },
    {
     "type": "Twitter",
     "id": "RepKevinYoder"
    }
   ]
  },
  {
   "name": "Mike Peterson",
   "address": [
    {
     "line1": "450 North 17th",
     "city": "kansas city",
     "state": "KS",
     "zip": "66102"
    }
   ],
   "party": "Democratic",
   "phones": [
    "(785) 296-7371"
   ],
   "urls": [
    "http://www.kslegislature.org/li/b2013_14/members/rep_peterson_michael_1/"
   ],
   "photoUrl": "http://www.kslegislature.org/li/m/images/pics/rep_peterson_michael_1.jpg",
   "emails": [
    "michael.peterson@house.ks.gov"
   ]
  },
  {
   "name": "Donald Ash",
   "address": [
    {
     "line1": "701 Nth 7th Street Suite 20",
     "city": "kansas city",
     "state": "KS",
     "zip": "66101"
    }
   ],
   "party": "Democratic",
   "phones": [
    "(913) 573-2861"
   ],
   "urls": [
    "http://www.wycokck.org/DefaultDept32.aspx?id=2614"
   ],
   "emails": [
    "dash@wycokck.org"
   ]
  },
  {
   "name": "Jerome Gorman",
   "address": [
    {
     "line1": "701 Nth 7th Street Suite 10",
     "city": "kansas city",
     "state": "KS",
     "zip": "66101"
    }
   ],
   "party": "Democratic",
   "phones": [
    "(913) 573-2851"
   ],
   "urls": [
    "http://www.wycokck.org/Internet2010DistAttyBanner.aspx?id=176&banner=6912&menu_id=946"
   ]
  },
  {
   "name": "Nancy Burns",
   "address": [
    {
     "line1": "710 n. 7th street",
     "city": "kansas city",
     "state": "KS",
     "zip": "66101"
    }
   ],
   "party": "Unknown",
   "phones": [
    "(913) 573-2841"
   ],
   "urls": [
    "http://www.wycokck.org/Internetdept.aspx?id=2600&menu_id=1024&banner=15284"
   ],
   "emails": [
    "nburns@wycokck.org"
   ]
  },
  {
   "name": "Debbie Pack",
   "address": [
    {
     "line1": "710 n. 7th street",
     "city": "kansas city",
     "state": "KS",
     "zip": "66101"
    }
   ],
   "party": "Unknown",
   "phones": [
    "(913) 573-2821"
   ],
   "urls": [
    "http://www.wycokck.org/treasury/"
   ],
   "emails": [
    "dpack@wycokck.org"
   ]
  },
  {
   "name": "Bridgette D. Cobbins",
   "address": [
    {
     "line1": "710 n. 7th street",
     "city": "kansas city",
     "state": "KS",
     "zip": "66101"
    }
   ],
   "party": "Unknown",
   "phones": [
    "(913) 573-5260"
   ],
   "urls": [
    "http://www.wycokck.org/InternetDept.aspx?id=18992&menu_id=554&terms=Bridgette%20Cobbins"
   ],
   "emails": [
    "clerkwest@wycokck.org"
   ]
  },
  {
   "name": "Vacant",
   "address": [
    {
     "line1": "701 Nth 7th Street Suite 979",
     "city": "kansas city",
     "state": "KS",
     "zip": "66101"
    }
   ],
   "party": "Unknown",
   "phones": [
    "(913) 573-5040"
   ],
   "urls": [
    "http://www.wycokck.org/InternetDept.aspx?id=5750&menu_id=1278&banner=15284"
   ],
   "channels": [
    {
     "type": "Facebook",
     "id": "cityofkck"
    },
    {
     "type": "Twitter",
     "id": "CityofKCK"
    }
   ]
  },
  {
   "name": "John Mendez",
   "address": [
    {
     "line1": "701 Nth 7th Street Suite 979",
     "city": "kansas city",
     "state": "KS",
     "zip": "66101"
    }
   ],
   "party": "Unknown",
   "phones": [
    "(913) 573-5040"
   ],
   "urls": [
    "http://www.wycokck.org/Internetdept.aspx?id=5752&menu_id=1278&banner=15284"
   ],
   "emails": [
    "jmendez@wycokck.org"
   ],
   "channels": [
    {
     "type": "Facebook",
     "id": "cityofkck"
    },
    {
     "type": "Twitter",
     "id": "CityofKCK"
    }
   ]
  },
  {
   "name": "Barack Hussein Obama II",
   "address": [
    {
     "line1": "The White House",
     "line2": "1600 Pennsylvania Avenue NW",
     "line3": "",
     "city": "Washington",
     "state": "DC",
     "zip": "20500"
    }
   ],
   "party": "Democrat",
   "phones": [
    "(202) 456-1111",
    "(202) 456-1414"
   ],
   "urls": [
    "http://www.whitehouse.gov/administration/president_obama/",
    "http://www.barackobama.com/index.php"
   ],
   "photoUrl": "http://www.whitehouse.gov/sites/default/files/imagecache/admin_official_lowres/administration-official/ao_image/president_official_portrait_hires.jpg",
   "channels": [
    {
     "type": "GooglePlus",
     "id": "110031535020051778989"
    },
    {
     "type": "Twitter",
     "id": "barackobama"
    },
    {
     "type": "Facebook",
     "id": "barackobama"
    },
    {
     "type": "YouTube",
     "id": "barackobama"
    }
   ]
  },
  {
   "name": "Joseph (Joe) Robinette Biden Jr.",
   "address": [
    {
     "line1": "The White House",
     "line2": "1600 Pennsylvania Avenue NW",
     "line3": "",
     "city": "Washington",
     "state": "DC",
     "zip": "20500"
    }
   ],
   "party": "Democrat",
   "urls": [
    "http://www.whitehouse.gov/administration/vice-president-biden"
   ],
   "photoUrl": "http://www.whitehouse.gov/sites/default/files/imagecache/admin_official_lowres/administration-official/ao_image/vp_portrait.jpeg",
   "channels": [
    {
     "type": "Twitter",
     "id": "VP"
    },
    {
     "type": "Twitter",
     "id": "JoeBiden"
    },
    {
     "type": "Facebook",
     "id": "joebiden"
    }
   ]
  },
  {
   "name": "Sam Brownback",
   "address": [
    {
     "line1": "Capitol",
     "line2": "300 sw 10th ave.",
     "city": "topeka",
     "state": "KS",
     "zip": "66612"
    }
   ],
   "phones": [
    "(785) 296-3232"
   ],
   "urls": [
    "http://www.governor.ks.gov/"
   ],
   "channels": [
    {
     "type": "Facebook",
     "id": "govsambrownback"
    },
    {
     "type": "Twitter",
     "id": "govsambrownback"
    }
   ]
  },
  {
   "name": "Ron Estes",
   "address": [
    {
     "line1": "Kansas State Treasurer 900 SW Jackson",
     "line2": "Suite 201",
     "city": "topeka",
     "state": "KS",
     "zip": "66612"
    }
   ],
   "phones": [
    "(785) 296-3171"
   ],
   "urls": [
    "http://www.kansasstatetreasurer.com/prodweb/main/index.php"
   ],
   "emails": [
    "ron@treasurer.ks.gov"
   ],
   "channels": [
    {
     "type": "Facebook",
     "id": "130975650300043"
    },
    {
     "type": "Twitter",
     "id": "RonEstesKS"
    }
   ]
  },
  {
   "name": "Derek Schmidt",
   "address": [
    {
     "line1": "120 SW 10th Ave",
     "line2": "2nd Floor",
     "city": "topeka",
     "state": "KS",
     "zip": "66612"
    }
   ],
   "phones": [
    "(785) 296-2215"
   ],
   "urls": [
    "http://ag.ks.gov/"
   ],
   "channels": [
    {
     "type": "Twitter",
     "id": "KSAGOffice"
    }
   ]
  },
  {
   "name": "Kris Kobach",
   "address": [
    {
     "line1": "Kansas Secretary of State Memorial Hall",
     "line2": "1st Floor",
     "line3": "120 sw 10th avenue",
     "city": "topeka",
     "state": "KS",
     "zip": "66612"
    }
   ],
   "phones": [
    "(785) 296-4564"
   ],
   "urls": [
    "http://www.kssos.org/"
   ],
   "emails": [
    "kssos@sos.ks.gov"
   ],
   "channels": [
    {
     "type": "Facebook",
     "id": "Kansas-Secretary-of-State"
    },
    {
     "type": "Twitter",
     "id": "kansassos"
    }
   ]
  },
  {
   "name": "Jeff Coyler",
   "address": [
    {
     "line1": "State Capitol",
     "line2": "2nd Floor",
     "line3": "300 sw 10th ave.",
     "city": "topeka",
     "state": "KS",
     "zip": "66612"
    }
   ],
   "phones": [
    "(785) 296-2214"
   ],
   "urls": [
    "https://governor.ks.gov/about-the-office/lt-govenor-jeff-colyer"
   ]
  },
  {
   "name": "Jerry Moran",
   "address": [
    {
     "line1": "361A Russell Senate Office Building",
     "city": "washington d.c.",
     "state": "DC",
     "zip": "20510"
    }
   ],
   "party": "Republican",
   "phones": [
    "(202) 224-6521"
   ],
   "urls": [
    "http://www.moran.senate.gov/public/"
   ],
   "photoUrl": "http://moran.senate.gov/public/index.cfm/files/serve?File_id=cd666b47-46e3-4a48-bcf1-ea2890f99817",
   "channels": [
    {
     "type": "Facebook",
     "id": "jerrymoran"
    },
    {
     "type": "Twitter",
     "id": "JerryMoran"
    },
    {
     "type": "YouTube",
     "id": "senatorjerrymoran"
    }
   ]
  },
  {
   "name": "Pat Roberts",
   "address": [
    {
     "line1": "109 Hart Senate Office Building",
     "city": "washington d.c.",
     "state": "DC",
     "zip": "20510"
    }
   ],
   "party": "Republican",
   "phones": [
    "(202) 224-4774"
   ],
   "urls": [
    "http://www.roberts.senate.gov/public/"
   ],
   "photoUrl": "http://roberts.senate.gov/public/index.cfm?a=Files.Serve&File_id=b42c6b05-966e-48ea-b3ed-9e5fc4ab1a0d",
   "emails": [
    "pat_roberts@roberts.senate.gov"
   ],
   "channels": [
    {
     "type": "Facebook",
     "id": "SenPatRoberts"
    },
    {
     "type": "Twitter",
     "id": "SenPatRoberts"
    },
    {
     "type": "YouTube",
     "id": "SenPatRoberts"
    }
   ]
  },
  {
   "name": "Sandy Praeger",
   "address": [
    {
     "line1": "420 sw 9th street",
     "city": "topeka",
     "state": "KS",
     "zip": "66612"
    }
   ],
   "phones": [
    "(785) 296-3071"
   ],
   "urls": [
    "http://www.ksinsurance.org/"
   ],
   "emails": [
    "commissioner@ksinsurance.org"
   ],
   "channels": [
    {
     "type": "Facebook",
     "id": "KansasInsuranceDepartment"
    }
   ]
  },
  {
   "name": "Pat Pettey",
   "address": [
    {
     "line1": "Kansas State Capitol",
     "line2": "300 SW 10th St.",
     "line3": "Room 125-E",
     "city": "Topeka",
     "state": "KS",
     "zip": "66612-1504"
    },
    {
     "line1": "5316 Lakewood Street",
     "line2": "",
     "line3": "",
     "city": "Kansas City",
     "state": "KS",
     "zip": "66106"
    }
   ],
   "party": "Democratic",
   "phones": [
    "(785) 296-7375"
   ],
   "urls": [
    "http://www.kslegislature.org/li/b2013_14/members/sen_pettey_pat_1/"
   ],
   "photoUrl": "http://www.kslegislature.org/li/m/images/pics/sen_pettey_pat_1.jpg",
   "emails": [
    "Pat.Pettey@senate.ks.gov"
   ],
   "channels": [
    {
     "type": "Twitter",
     "id": "PatHPettey"
    },
    {
     "type": "Facebook",
     "id": "PetteyForSenate"
    }
   ]
  }
 ]
}