# NAME WebService::OpenStates - client for the Plural Open States API # DESCRIPTION State-level legislator information for US locations, provided via the Plural Open States API. You must obtain an API key (free) from Open States to use this package. See [https://open.pluralpolicy.com/accounts/login/?next=/accounts/profile/#apikey](https://open.pluralpolicy.com/accounts/login/?next=/accounts/profile/#apikey). # SYNOPSIS my $client = WebService::OpenStates->new( api_key => '***' ); my $res = $client->legislators_for_location(lat => '37.302268', lon => '-78.39263); if ( $res->{status} eq 'error') { # handle the error returned (JSON obj, see below) } else { for my $legislator ( @{$res->{legislators} ) { # use the data (JSON obj, see below) } } # METHODS - **legislators\_for\_location (NumRange\[-90,90\] :$lat, NumRange\[-180,180\] :$lon)** Requires a latitude numeric value as the first argument and a longtitude numeric value as the second argument. Returns a JSON object containing the `status` key with values 'success' or 'error', allowing you to examine and handle any error content if the call does not succeed. If the status is 'success', the response contains a key 'legislators' with a list of objects providing information about the legislators returned. Examples: Fatal error with bad params: my $resp = $client->legislators_for_location(lat => 91, lon => 85); # dies with message like 'In method legislators_for_location: parameter 1 ($lat): Value "91" did not pass type constraint "NumRange["-90",90]" ...'. Error response with bad API key: my $resp = $client->legislators_for_location(lat => 37, lon => 85); # with bad API key { content => {detail => 'Invalid API Key. Login and visit https://openstates.org/account/profile/ for your API key.'}, status => 'error' }; Empty response when no results are found my $resp = $client->legislators_for_location(lat => 37, lon => 85); { status => 'sucess', 'legislators' => [] } Success response my $resp = $client->legislators_for_location(lat => 37.302268, lon => -78.39263) { 'legislators' => [ { 'party' => 'Republican', 'title' => 'United States Representative', 'offices' => [ { 'address' => '1013 Longworth House Office Building, Washington, DC 20515', 'phone' => '202-225-4711', 'name' => 'Capitol Office' }, { 'phone' => '434-791-2596', 'name' => 'District Office', 'address' => '20564 Timberlake Road, Lynchburg, VA 24502' } ], 'links' => [ 'https://mcguire.house.gov/' ], 'name' => 'John McGuire', 'email' => 'https://mcguire.house.gov/address_authentication?form=/contact/email-me' }, { 'title' => 'Virginia Senator', 'offices' => [ { 'address' => 'Room 620, General Assembly Building P.O. Box 396, Richmond, VA 23218', 'name' => 'Capitol Office', 'phone' => '804-698-7510' }, { 'phone' => '804-372-0953', 'name' => 'District Office', 'address' => 'VA' } ], 'party' => 'Republican', 'links' => [ 'https://apps.senate.virginia.gov/Senator/memberpage.php?id=S132' ], 'email' => 'senatorcifers@senate.virginia.gov', 'name' => 'Luther Cifers' }, { 'links' => [ 'https://www.warner.senate.gov', 'https://www.warner.senate.gov/public/index.cfm?p=Contact', 'https://www.warner.senate.gov/public/' ], 'name' => 'Mark Warner', 'email' => 'https://www.warner.senate.gov/public/index.cfm?p=contact', 'title' => 'United States Senator', 'offices' => [ { 'address' => '703 Hart Senate Office Building, Washington, DC 20510', 'name' => 'Capitol Office', 'phone' => '202-224-2023' }, { 'address' => '919 E. Main St. Suite 630, Richmond, VA 23219', 'phone' => '804-775-2314', 'name' => 'Capitol Office' }, { 'phone' => '757-441-3079', 'name' => 'District Office', 'address' => '101 W. Main St. Suite 7771, Norfolk, VA 23510' }, { 'address' => '120 Luck Ave. SW Suite 108, Roanoke, VA 24011', 'name' => 'District Office', 'phone' => '540-857-2676' }, { 'phone' => '276-628-8158', 'name' => 'District Office', 'address' => '180 W. Main St. Suite 235, Abingdon, VA 24210' }, { 'phone' => '703-442-0670', 'name' => 'District Office', 'address' => '8150 Leesburg Pike Suite 700, Vienna, VA 22182' } ], 'party' => 'Democratic' }, { 'links' => [ 'https://www.kaine.senate.gov', 'https://www.kaine.senate.gov/contact', 'https://www.kaine.senate.gov/' ], 'email' => 'https://www.kaine.senate.gov/contact', 'name' => 'Tim Kaine', 'title' => 'United States Senator', 'offices' => [ { 'address' => '231 Russell Senate Office Building, Washington, DC 20510', 'name' => 'Capitol Office', 'phone' => '202-224-4024' }, { 'address' => '919 E. Main St. Suite 970, Richmond, VA 23219', 'name' => 'Capitol Office', 'phone' => '804-771-2221' }, { 'name' => 'District Office', 'phone' => '276-525-4790', 'address' => '121 Russell Road Suite 2, Abingdon, VA 24210' }, { 'address' => '222 Central Park Ave. Suite 120, Virginia Beach, VA 23462', 'name' => 'District Office', 'phone' => '757-518-1674' }, { 'address' => '611 S. Jefferson St. Suite 5B, Roanoke, VA 24011', 'phone' => '540-682-5693', 'name' => 'District Office' }, { 'name' => 'District Office', 'phone' => '540-369-7667', 'address' => '816 William St. Suite B, Fredericksburg, VA 22401' }, { 'address' => '9408 Grant Ave. Suite 202, Manassas, VA 20110', 'name' => 'District Office', 'phone' => '703-361-3192' } ], 'party' => 'Democratic' }, { 'party' => 'Republican', 'offices' => [ { 'phone' => '804-698-1050', 'name' => 'Capitol Office', 'address' => 'Room 1109, General Assembly Building 201 N. 9th St., Richmond, VA 23219' }, { 'name' => 'District-Mail Office', 'phone' => '434-696-3061', 'address' => 'P.O. Box 1323, Victoria, VA 23974' } ], 'title' => 'Virginia Delegate', 'email' => 'deltwright@house.virginia.gov', 'name' => 'Tommy Wright', 'links' => [ 'https://lis.virginia.gov/cgi-bin/legp604.exe?191+mbr+H136', 'https://lis.virginia.gov/cgi-bin/legp604.exe?201+mbr+H136', 'https://lis.virginia.gov/cgi-bin/legp604.exe?221+mbr+H136', 'https://lis.virginia.gov/cgi-bin/legp604.exe?241+mbr+H136', 'https://virginiageneralassembly.gov/house/members/members.php?id=H0136' ] } ], 'status' => 'success' };