API の使用

このドキュメントでは、Google Civic Information API を使用するために必要な知識について説明します。Civic Info API に関するよくある質問には、API に関する基本情報や、ユーザー フォーラムのよくある質問が記載されています。さらに、次の 2 つの例もご覧いただけます。1 つ目は選挙中の有権者情報を検索する例、2 つ目は選出された代表者を検索する例です。

Google に対してアプリケーションを特定する

アプリケーションは、Google Civic Information API にリクエストを送信するたびに、API キーをリクエストに指定して、自身を識別する必要があります。

API キーの取得と使用

API キーを取得するには:

  1. API コンソールで [認証情報] ページを開きます。
  2. この API は 2 種類の認証情報をサポートしています。 プロジェクトに適した認証情報を作成します。
    • OAuth 2.0: アプリケーションからユーザーの限定公開データをリクエストする場合は、リクエストとともに OAuth 2.0 トークンを送信する必要があります。アプリケーションは、トークンを取得するためにまずクライアント ID を送信します。場合によってはクライアント シークレットも送信します。ウェブ アプリケーション、サービス アカウント、インストールしたアプリケーションについて OAuth 2.0 認証情報を生成できます。

      注: この API には OAuth 2.0 認証を必要とするメソッドはないため、必要なのは API キーを取得するだけです。API キーについては、後述します。ただし、ユーザー認証を必要とする他の API を アプリケーションで呼び出す場合は、OAuth 2.0 認証情報が必要となります。

      詳細については、OAuth 2.0 ドキュメントをご覧ください。

    • API キー: OAuth 2.0 トークンを提供しないリクエストは、API キーを送信する必要があります。キーによりプロジェクトが識別され、API アクセス、割り当て、レポートが提供されます。

      API は、いくつかのタイプの API キーをサポートします。必要とする API キーのタイプが存在しない場合は、[認証情報作成]  > [API キー] をクリックして、コンソールで API キーを作成します。本番環境でそれを使用する前にキーを制限するには、[キーを制限] をクリックして、いずれかの制限を選択します。

API キーの安全性を保つには、API キーを安全に使用するためのおすすめの方法に従ってください。

API キーを作成したら、アプリケーションですべてのリクエスト URL の末尾にクエリ パラメータ key=yourAPIKey を追加できます。

API キーは URL に埋め込んでも安全です。エンコーディングの必要はありません。

API キーの制限

API キーはデフォルトでは制限されません。これは、誰かがこのキー(ブラウザ内などに配置されている場合)を読み取ったり、キーが設定されているデバイスにアクセスしたりできなければ、安全ではありません。不正使用を防ぐため、この API キーに制限を設けることをおすすめします。

制限を追加するには、[API キーを作成しました] ダイアログ ボックスの [キーを制限] をクリックします。[API キー] 構成パネルが表示されます。

選択する制限のタイプはアプリケーションのニーズによって異なります。

  • (バックエンドやミドルウェアを経由せずに)API と直接やり取りするウェブ アプリケーションでは、HTTP リファラー制限を追加する必要があります。ただし、このようなアプリケーションでは API キーが一般公開されるため、代わりにサービス アカウントの認証スキームを使用することをおすすめします。
  • サービス アカウントをサポートできないバックエンド アプリケーション(クライアント ライブラリでサポートされている言語がない組み込みデバイスなど)は、異なる IP アドレスのクライアントからの使用を防ぐために、IP アドレスの制限を追加する必要があります。
  • Android アプリの場合、Android アプリの制限を追加して、パッケージ名と SHA-1 署名証明書フィンガープリントを追加する必要があります。
  • iOS アプリケーションの場合は、iOS アプリ制限を追加し、iOS バンドル ID を追加して、iOS バンドルへの API 呼び出しを制限する必要があります。

テストの場合は、制限を設定する必要はありません。ただし、アプリケーションを本番環境にデプロイした後に、このキーに制限を追加するか、キーを削除することをおすすめします。

ElectionQuery の例

以下に、API バージョン「v2」を使用して、electionQuery API を呼び出し、有効な選挙 ID のリストを取得し、投票者の登録住所を指定して voterInfoQuery API を使用して、選択された選挙の情報を取得する例を示します。

destinationQuery を使用して、有効な選挙 ID のリストを取得します。

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

ElectionQuery レスポンス:

{
 "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 を使用して、VIP テスト選挙 ID 2000 と(テスト)住所 1263 Pacific Ave. Kansas City, KS の投票者に voterInfoQuery リクエストを送信します(以下の 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 を使用した代表情報クエリ

住所で選出された代表者を検索する例を次に示します。curl を使用して、住所 1263 Pacific Ave. Kansas City, KS,KS の(テスト)住所の representativeInfoByAddress リクエストを送信します(以下の fourativeInfoByAddress レスポンスを参照)。

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

エラーの報告

公選された議員の情報が不足している、または正しくないと感じますか。公務員は、任期が終了する前に退職したり、連絡先情報を変更したりすることがあります。返されるデータに反映されていない変更についてお知らせください。

Google は報告内容を他のユーザー、データ プロバイダ、政府機関の公式データソースと確認します。多数のご報告をお寄せいただいている関係上、直接回答を差し上げることができない場合もあります。承認された場合、API の結果に変更が反映されるまでに時間がかかることがあります。

エラーを報告するには、こちらのフォームにご記入ください

researchInfoByAddress レスポンス:

{
 "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"
    }
   ]
  }
 ]
}