במסמך הזה מתואר מה צריך לדעת כדי להשתמש ב-Google Civic Information API. אפשר לעיין בשאלות הנפוצות בנושא Civic Info API, שמכילה מידע בסיסי על ה-API וגם שאלות נפוצות מפורום המשתמשים שלנו. בנוסף, בהמשך מפורטות שתי דוגמאות: הראשונה לחיפוש פרטי בעלי זכות הצבעה במהלך בחירות, והשנייה לחיפוש נציגים נבחרים.
זיהוי האפליקציה שלך עבור Google
האפליקציה צריכה לזהות את עצמה בכל פעם שהיא שולחת בקשה ל-Google Civic Information API, על ידי צירוף מפתח API לכל בקשה.
קבלה של מפתח API ושימוש בו
כדי לקבל מפתח API:
- פותחים את דף פרטי הכניסה במסוף ה-API.
-
ה-API הזה תומך בשני סוגים של פרטי כניסה.
יוצרים את פרטי הכניסה שמתאימים לפרויקט:
-
OAuth 2.0: בכל פעם שהאפליקציה שלכם מבקשת משתמש פרטי נתונים, עליו לשלוח אסימון OAuth 2.0 יחד עם הבקשה. האפליקציה שולחת קודם מזהה לקוח, ואולי גם סוד לקוח, כדי לקבל אסימון. אפשר ליצור פרטי כניסה של 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 במסוף. לשם כך, לוחצים על Create credentials > API key. כדי להגביל את המפתח לפני השימוש בו בסביבת הייצור, לוחצים על Restrict key ובוחרים באחת מהRestrictions.
-
כדי להגן על מפתחות ה-API, צריך לפעול לפי השיטות המומלצות באמצעות מפתחות API באופן מאובטח.
אחרי שיש לכם מפתח API, האפליקציה יכולה לצרף את פרמטר השאילתה
key=yourAPIKey
בכל כתובות ה-URL של הבקשות.
מפתח ה-API בטוח להטמעה בכתובות URL. ללא צורך בקידוד.
הגבלות על מפתחות API
כברירת מחדל, מפתח ה-API שלך לא מוגבל, והוא לא מאובטח אם כל אחד יכול לקרוא את המפתח הזה (אם הוא ממוקם בתוך דפדפן, לדוגמה) או לגשת אל המכשיר שבו ממוקם המפתח. אנחנו ממליצים להחיל הגבלה על את מפתח ה-API הזה כדי למנוע שימוש לא מורשה.
כדי להוסיף הגבלה, לוחצים על Restrict key בתוך API key created. בתיבת הדו-שיח. חלונית ההגדרה של מפתח API תופיע:
סוג ההגבלה שבוחרים תלוי בצרכים של האפליקציה:
- אפליקציות אינטרנט שמנהלות אינטראקציה ישירות עם ממשק ה-API (כלומר, לא דרך כל קצה עורפי או תווכה) צריכים להוסיף הגבלה על גורמים מפנים מסוג HTTP. עם זאת, חשוב לשים לב שאפליקציות כאלה יחשפו את מפתח ה-API שלהן באופן ציבורי. עדיף להשתמש בסכמת אימות של חשבון שירות במקום זאת.
- באפליקציות לקצה העורפי שלא ניתן לתמוך בהן בחשבונות שירות בדרכים אחרות (למשל, במכשירים מוטמעים שאין להם שפה נתמכת בספריית הלקוח), צריך להוסיף הגבלה על כתובות IP כדי להגן מפני שימוש מלקוחות בכתובות IP שונות.
- באפליקציות ל-Android צריך להוסיף הגבלה של אפליקציות ל-Android ולהוסיף את שם החבילה ואת טביעת האצבע של אישור החתימה SHA-1.
- באפליקציות ל-iOS צריך להוסיף הגבלה על אפליקציות ל-iOS ולהוסיף כל חבילה ל-iOS מזהים כדי להגביל את הקריאות ל-API לחבילות ה-iOS האלה.
לצורך בדיקה, יכול להיות שלא תרצו להחיל הגבלה בכלל. עם זאת, מומלץ להוסיף הגבלה למפתח הזה או למחוק אותו פעם אחת. לפרוס את האפליקציה בסביבת הייצור.
דוגמה ל-electionQuery
לפניכם דוגמה (בגרסת API v2) לקריאה לממשק ה-API electionQuery כדי לקבל רשימה של מזהי בחירות תקפים, ולאחר מכן שימוש בממשק ה-API voterInfoQuery עם הכתובת הרשומה של הבוחר כדי לקבל מידע על בחירה שנבחרה.
משתמשים בפונקציה electionQuery כדי לקבל רשימה של מזהי בחירות תקפים:
https://www.googleapis.com/civicinfo/v2/elections?key=<YOUR_API_KEY>
campaignQuery Response:
{ "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" } ] }
קריאה של voterInfoQuery באמצעות curl
משתמשים ב-curl
כדי לשלוח אל votesrInfoQuery
בקשה למזהה בחירות VIP 2000 ולמצביעים בכתובת (test) בכתובת 340 Main St, Venice, CA 90291.
מידע נוסף זמין בתגובה ל-voterInfoQuery.
curl "https://www.googleapis.com/civicinfo/v2/voterinfo?key=<YOUR_API_KEY>&address=340%20Main%20St.%20Venice%20CA&electionId=2000"
קריאה של voterInfoQuery באמצעות ספריית הלקוח של Google API ל-JavaScript
בדוגמה הזו מונפקת אותה שאילתה voterInfoQuery כמו בדוגמה הקודמת ל-curl, אבל היא משתמשת בספריית הלקוח של 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>
תגובת votesrInfoQuery
{ "kind": "civicinfo#voterinforesponse", "status": "success", "election": { "id": "2000", "name": "VIP Test Election", "electionDay": "2025-06-06", "ocdDivisionId": "ocd-division/country:us" }, "normalizedInput": { "line1": "340 Main Street", "city": "Venice", "state": "CA", "zip": "90291" }, "pollingLocations": [ { "address": { "locationName": "WESTMINSTER AVENUE ELEMENTARY SCHOOL", "line1": "1010 ABBOT KINNEY BLVD", "city": "VENICE", "state": "CA", "zip": "90291" }, "pollingHours": "", "latitude": 33.9919351, "longitude": -118.4722031, "startDate": "2024-03-05", "endDate": "2024-03-05", "sources": [ { "name": "Voting Information Project", "official": true } ] }, { "address": { "locationName": "POP UP VOTE CENTER 5", "line1": "12400 IMPERIAL HWY", "city": "NORWALK", "state": "CA", "zip": "90650" }, "latitude": 33.915989, "longitude": -118.0677283, "sources": [ { "name": "Voting Information Project", "official": true } ] } ], "dropOffLocations": [ { "address": { "locationName": "FLEX VOTE CENTER 9", "line1": "12400 IMPERIAL HWY", "city": "NORWALK", "state": "CA", "zip": "90650" }, "latitude": 33.915989, "longitude": -118.0677283, "sources": [ { "name": "Voting Information Project", "official": true } ] }, ], "contests": [ { "type": "General", "ballotTitle": "UNITED STATES REPRESENTATIVE, 36th District", "district": { "name": "36TH US CONGRESSIONAL", "scope": "congressional" }, "numberElected": "1", "numberVotingFor": "1", "ballotPlacement": "103", "sources": [ { "name": "Voting Information Project", "official": true } ], "candidates": [ { "name": "ARIANA HAKAMI", "party": "Party Preference: Republican" }, { "name": "CLAIRE RAGGE ANDERSON", "party": "Party Preference: None" }, { "name": "MELISSA TOOMIM", "party": "Party Preference: Republican" }, { "name": "TED W. LIEU", "party": "Party Preference: Democratic" } ] }, { "type": "ballot-measure", "ballotTitle": "LOS ANGELES CITY MUNICIPAL ELECTION - MEASURE HLA", "district": { "name": "CITY OF LOS ANGELES", "scope": "citywide" }, "ballotPlacement": "116", "referendumTitle": "LOS ANGELES CITY MUNICIPAL ELECTION - MEASURE HLA", "referendumText": "CITY MOBILITY PLAN STREET IMPROVEMENT MEASURES. INITIATIVE ORDINANCE HLA. Shall an ordinance providing that when the City of Los Angeles makes a qualifying improvement to a City-owned street (e.g., a paving project), the City must also install certain street enhancements described in the City's Mobility Plan network of pedestrian, bicycle, transit, and vehicle routes; and requiring the City to provide publicly accessible information regarding street improvements; be adopted?", "referendumPassageThreshold": "MAJORITY OF VOTES CAST", "referendumBallotResponses": [ "YES", "NO" ], "sources": [ { "name": "Voting Information Project", "official": true } ] }, { "type": "General", "ballotTitle": "DISTRICT ATTORNEY", "district": { "name": "LOS ANGELES COUNTY", "scope": "countywide" }, "numberElected": "1", "numberVotingFor": "1", "ballotPlacement": "129", "sources": [ { "name": "Voting Information Project", "official": true } ], "candidates": [ { "name": "GEORGE GASCÓN" }, { "name": "JONATHAN HATAMI" }, { "name": "NATHAN HOCHMAN" }, { "name": "DEBRA ARCHULETA" }, { "name": "JEFF CHEMERINSKY" }, { "name": "ERIC SIDDALL" }, { "name": "MARIA RAMIREZ" }, { "name": "DAN KAPELOVITZ" }, { "name": "LLOYD \"BOBCAT\" MASSON" }, { "name": "JOHN MCKINNEY" }, { "name": "CRAIG J. MITCHELL" }, { "name": "DAVID S. MILTON" } ] } ], "state": [ { "name": "California", "electionAdministrationBody": { "name": "Secretary of State", "electionInfoUrl": "https://www.sos.ca.gov/elections/", "electionRegistrationUrl": "https://registertovote.ca.gov/?t=s", "electionRegistrationConfirmationUrl": "https://voterstatus.sos.ca.gov", "absenteeVotingInfoUrl": "https://elections.cdn.sos.ca.gov/vote-by-mail/replacement-application.pdf", "votingLocationFinderUrl": "https://voterstatus.sos.ca.gov", "ballotInfoUrl": "https://www.sos.ca.gov/elections/ballot-status/wheres-my-ballot/", "correspondenceAddress": { "line1": "1500 11th Street, 5th Floor", "city": "Sacramento", "state": "California", "zip": "95814" } }, "local_jurisdiction": { "name": "Los Angeles", "electionAdministrationBody": { "name": "Registrar-Recorder/County Clerk", "electionInfoUrl": "http://www.lavote.gov/", "electionRegistrationUrl": "http://registertovote.ca.gov/", "electionRegistrationConfirmationUrl": "https://lavote.gov/vrstatus/", "absenteeVotingInfoUrl": "", "ballotInfoUrl": "http://www.lavote.gov/Locator", "physicalAddress": { "locationName": "Registrar-Recorder/County Clerk", "line1": "12400 Imperial Highway", "city": "Norwalk", "state": "CA", "zip": "90650" } }, "sources": [ { "name": "Voting Information Project", "official": true } ] } } ] }
representativeInfoQuery באמצעות curl
דוגמה לחיפוש כתובת עבור נציגים נבחרים. משתמשים ב-curl
כדי לשלוח בקשה ל-representativeInfoByAddress עבור הכתובת (לבדיקה) 1263 Pacific Ave. Kansas City, KS (ראו תגובה של representativeInfoByAddress בהמשך):
curl "https://www.googleapis.com/civicinfo/v2/representatives?key=<YOUR_API_KEY>&address=1263%20Pacific%20Ave.%20Kansas%20City%20KS"
דיווח על שגיאה
האם לדעתך מידע חסר או שגוי לגבי נבחר ציבור? לפעמים, נבחרי ציבור יוצאים מהתפקיד לפני סיום כהונתם או משנים את הפרטים שלהם ליצירת קשר. נשמח לשמוע על שינויים כאלה שעדיין לא באים לידי ביטוי בנתונים שאנחנו מחזירים.
אנחנו נוודא את הדיווח שלכם עם משתמשים אחרים, ספקי נתונים או מקורות נתונים רשמיים של הממשלה. בשל היקף הדיווחים, ייתכן שלא נוכל להגיב מיידית. אם השינוי יאושר, יכול להיות שיעבור זמן מה עד שהוא יופיע בתוצאות ה-API.
כדי לדווח על שגיאה, מלאו את הטופס הזה.
תגובה מ-נציגInfoByAddress
{ "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" } ] } ] }