本文介绍了使用 Google Civic Information API 需要了解的内容。您可以查看这篇 Civic Info API 常见问题解答,其中有一些有关该 API 的基本信息以及来自用户论坛的常见问题解答。 此外,您还可以看到以下两个示例,一个用于在选举期间查找选民信息,第二个用于查找民选代表。
向 Google 标识您的应用
您的应用在每次向 Google Civic Information API 发送请求时都需要标识自身身份,方法是在每个请求中添加 API 密钥。
获取和使用 API 密钥
要获取 API 密钥,请执行以下操作:
- 打开 API 控制台中的“凭据”页面。
-
此 API 支持两种类型的凭据。
创建适合您的项目的凭据:
-
OAuth 2.0:当您的应用请求非公开用户数据时,该应用必须将 OAuth 2.0 令牌随请求一起发送。要获取令牌,您的应用应先发送客户端 ID(也可能需要发送客户端密钥)。您可以为网页应用、服务账号或已安装应用生成 OAuth 2.0 凭据。
注意:由于此 API 没有任何方法需要 OAuth 2.0 授权,因此您可能只需获取下文所述的 API 密钥。但是,如果您的应用调用需要用户授权的其他 API,那么您仍然需要 OAuth 2.0 凭据。
如需了解详情,请参阅 OAuth 2.0 文档。
-
API 密钥:未提供 OAuth 2.0 令牌的请求必须发送 API 密钥。 该密钥用于标识您的项目,并提供 API 访问权限、配额和报告。
此 API 支持多种类型的 API 密钥限制。如果您需要的 API 密钥尚不存在,请在控制台中创建 API 密钥,方法是:依次点击创建凭据 > API 密钥。您可以先对密钥设定相关限制,然后再在生产环境中使用密钥,方法是点击限制密钥,然后选择一项限制。
-
为保障 API 密钥的安全,请遵循以安全的方式使用 API 密钥的最佳做法。
在您获得 API 密钥后,您的应用便可在所有请求网址后附加查询参数 key=yourAPIKey
。
API 密钥可以安全地嵌入网址中,而无需进行任何编码。
API 密钥限制
默认情况下,您的 API 密钥不受限制,如果任何人都可以读取此密钥(例如,放置在浏览器中)或访问存放该密钥的设备,则 API 密钥不安全。我们建议您对此 API 密钥设置限制,以防止未经授权的使用。
如需添加限制,请在已创建的 API 密钥对话框中点击限制密钥。系统随即会显示 API 密钥配置面板:
您应选择哪种限制类型取决于您的应用需求:
- 直接与 API 交互(即不通过任何后端或中间件)的 Web 应用应添加 HTTP 引荐来源网址限制。但请注意,此类应用将公开其 API 密钥;请改为使用服务帐号身份验证方案。
- 无法以其他方式支持服务帐号的后端应用(例如,客户端库中没有支持的语言的嵌入式设备)应添加 IP 地址限制,以防止不同 IP 地址的客户端使用该地址。
- Android 应用应添加“Android 应用”限制,并添加您的软件包名称和 SHA-1 签名证书指纹。
- iOS 应用应添加“iOS 应用”限制,并添加任何 iOS 软件包标识符,以便将 API 调用限制为这些 iOS 软件包。
对于测试,您可能根本不想设置任何限制。不过,我们建议您在将应用部署到生产环境后对此密钥添加限制或删除该密钥。
选举查询示例
以下示例(使用 API 版本“v2”)调用 electionQuery API 以获取有效选举 ID 的列表,然后使用 voterInfoQuery API 获取选民的注册地址来获取所选选举的信息。
使用 ElectionQuery 获取有效选举 ID 的列表:
https://www.googleapis.com/civicinfo/v2/elections?key=<YOUR_API_KEY>
ChooseQuery 响应:
{ "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" } ] }
使用 curl 的 voterInfoQuery
使用 curl
发送 voterInfoQuery 请求,获取 VIP 测试选举 ID 2000 以及(测试)地址 1263 Pacific Ave. Kansas City, KS 的选民(请参阅下面的 voterInfoQuery 响应):
curl "https://www.googleapis.com/civicinfo/v2/voterinfo?key=<YOUR_API_KEY>&address=1263%20Pacific%20Ave.%20Kansas%20City%20KS&electionId=2000"
使用适用于 JavaScript 的 Google API 客户端库的 voterInfoQuery
此示例发出与上一个 curl 示例相同的 voterInfoQuery,但它使用 JavaScript 客户端库。voterInfoQuery 响应与 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>
voterInfoQuery 响应:
{ "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 } ] } ] }
使用 curl 的 presentInfoQuery
以下示例展示了如何查找某个地址的民选代表。使用 curl
向(测试)地址 1263 Pacific Ave. Kansas City, KS 发送 representativeInfoByAddress 请求(请参阅下面的 representativeInfoByAddress 响应):
curl "https://www.googleapis.com/civicinfo/v2/representatives?key=<YOUR_API_KEY>&address=1263%20Pacific%20Ave.%20Kansas%20City%20KS"
报告错误
您是否发现某位民选官员的信息缺失或不正确?公职人员有时在任期结束前离职或更改其联系信息。告诉我们有哪些更改尚未反映在我们返回的数据中。
我们会通过其他用户、数据提供方或政府官方数据源来确认您的举报。由于所报告问题的数量较多,我们可能无法直接回复您。如果获得批准,您所做的更改可能需要一段时间才能在 API 结果中显示。
如要报告错误,请填写此表单。
originInfoByAddress 响应:
{ "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" } ] } ] }