All legislator calls complete
This commit is contained in:
parent
db7d2a4cc2
commit
6fdf497703
@ -17,8 +17,11 @@ func main() {
|
|||||||
}
|
}
|
||||||
o := openstates.Create(apiKey)
|
o := openstates.Create(apiKey)
|
||||||
//d, err := o.StateMetadata(states.Kansas)
|
//d, err := o.StateMetadata(states.Kansas)
|
||||||
d, err := o.GetBillDetailFromID("KSB00002165")
|
//d, err := o.GetBillDetailFromID("KSB00002165")
|
||||||
//d, err := o.GetBillDetail(states.Kansas, "2013-2014", "HR 6020")
|
//d, err := o.GetBillDetail(states.Kansas, "2013-2014", "HR 6020")
|
||||||
|
//d, err := o.GetLegislatorsForState(states.Kansas)
|
||||||
|
//d, err := o.GetLegislatorDetail("KSL000018")
|
||||||
|
d, err := o.GetLegislatorsForGeo(35.79, -78.78)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err.Error())
|
fmt.Println(err.Error())
|
||||||
return
|
return
|
||||||
|
@ -1,7 +1,64 @@
|
|||||||
package openstates
|
package openstates
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
// Legislator is a legislator
|
// Legislator is a legislator
|
||||||
type Legislator struct {
|
type Legislator struct {
|
||||||
LegID string `json:"leg_id"`
|
FirstName string `json:"first_name"`
|
||||||
|
LastName string `json:"last_name"`
|
||||||
|
MiddleName string `json:"middle_name"`
|
||||||
|
District string `json:"district"`
|
||||||
|
Chamber string `json:"chamber"`
|
||||||
|
URL string `json:"url"`
|
||||||
|
CreatedAtStr string `json:"created_at"`
|
||||||
|
CreatedAt time.Time `json:"-"`
|
||||||
|
UpdatedAtStr string `json:"updated_at"`
|
||||||
|
UpdatedAt time.Time `json:"-"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Active bool `json:"active"`
|
||||||
|
State string `json:"state"`
|
||||||
|
Offices []Office `json:"offices"`
|
||||||
|
OfficeAddress string `json:"office_address"`
|
||||||
|
VotesmartID string `json:"votesmart_id"`
|
||||||
|
FullName string `json:"full_name"`
|
||||||
|
LegID string `json:"leg_id"`
|
||||||
|
Party string `json:"party"`
|
||||||
|
Suffixes string `json:"suffixes"`
|
||||||
|
ID string `json:"id"`
|
||||||
|
PhotoURL string `json:"photo_url"`
|
||||||
|
Fax string `json:"+fax"`
|
||||||
|
Level string `json:"level"`
|
||||||
|
Phone string `json:"+phone"`
|
||||||
|
OldRoles map[string][]Role `json:"old_roles"`
|
||||||
|
Roles []Role `json:"roles"`
|
||||||
|
|
||||||
NameOnBill string `json:"name"` // Shows up when pulling bill detail
|
NameOnBill string `json:"name"` // Shows up when pulling bill detail
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Office is a legislators office
|
||||||
|
type Office struct {
|
||||||
|
Fax string `json:"fax"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Phone string `json:"phone"`
|
||||||
|
Address string `json:"address"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Role is a legislators role
|
||||||
|
type Role struct {
|
||||||
|
Term string `json:"term"`
|
||||||
|
StartDateStr string `json:"start_date"`
|
||||||
|
StartDate time.Time `json:"-"`
|
||||||
|
EndDateStr string `json:"end_date"`
|
||||||
|
EndDate time.Time `json:"-"`
|
||||||
|
District string `json:"district"`
|
||||||
|
Chamber string `json:"chamber"`
|
||||||
|
State string `json:"state"`
|
||||||
|
Party string `json:"party"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
CommitteeID string `json:"committee_id"`
|
||||||
|
SubCommittee string `json:"subcommittee"`
|
||||||
|
Committee string `json:"committee"`
|
||||||
|
Position string `json:"position"`
|
||||||
|
}
|
||||||
|
@ -2,7 +2,11 @@ package openstates
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/br0xen/sunlight-api/openstates/states"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SearchLegislators retrieves a list of legislators based on a number of
|
// SearchLegislators retrieves a list of legislators based on a number of
|
||||||
@ -27,8 +31,74 @@ func (o *OpenStates) SearchLegislators(v url.Values) ([]Legislator, error) {
|
|||||||
}
|
}
|
||||||
err = json.Unmarshal(getVal, &ret)
|
err = json.Unmarshal(getVal, &ret)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
//for i := range ret {
|
for i := range ret {
|
||||||
//}
|
o.fixLegislatorTimes(&ret[i])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ret, err
|
return ret, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetLegislatorsForState returns all legislators for a specific state
|
||||||
|
func (o *OpenStates) GetLegislatorsForState(st string) ([]Legislator, error) {
|
||||||
|
st, err := states.ScrubToAbbr(st)
|
||||||
|
if err != nil {
|
||||||
|
return []Legislator{}, err
|
||||||
|
}
|
||||||
|
v := url.Values{}
|
||||||
|
v.Set("state", st)
|
||||||
|
return o.SearchLegislators(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetLegislatorDetail returns the detail for a legislator
|
||||||
|
func (o *OpenStates) GetLegislatorDetail(id string) (*Legislator, error) {
|
||||||
|
var ret *Legislator
|
||||||
|
var err error
|
||||||
|
var getVal []byte
|
||||||
|
v := url.Values{}
|
||||||
|
if getVal, err = o.call("legislators/"+id, v); err != nil {
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(getVal, &ret)
|
||||||
|
o.fixLegislatorTimes(ret)
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetLegislatorsForGeo return all legislators for a latitude & longitude
|
||||||
|
func (o *OpenStates) GetLegislatorsForGeo(lat, lng float64) ([]Legislator, error) {
|
||||||
|
var ret []Legislator
|
||||||
|
var err error
|
||||||
|
var getVal []byte
|
||||||
|
v := url.Values{}
|
||||||
|
v.Set("lat", strconv.FormatFloat(lat, 'f', -1, 64))
|
||||||
|
v.Set("long", strconv.FormatFloat(lng, 'f', -1, 64))
|
||||||
|
if getVal, err = o.call("legislators/geo/", v); err != nil {
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(getVal, &ret)
|
||||||
|
if err == nil {
|
||||||
|
for i := range ret {
|
||||||
|
o.fixLegislatorTimes(&ret[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *OpenStates) fixLegislatorTimes(l *Legislator) error {
|
||||||
|
if err := UnmarshalTimeString(l.CreatedAtStr, &l.CreatedAt); err != nil {
|
||||||
|
return errors.New("No Created At Time")
|
||||||
|
}
|
||||||
|
if err := UnmarshalTimeString(l.UpdatedAtStr, &l.UpdatedAt); err != nil {
|
||||||
|
return errors.New("No Updated At Time")
|
||||||
|
}
|
||||||
|
for i := range l.Roles {
|
||||||
|
UnmarshalTimeString(l.Roles[i].EndDateStr, &l.Roles[i].EndDate)
|
||||||
|
UnmarshalTimeString(l.Roles[i].StartDateStr, &l.Roles[i].StartDate)
|
||||||
|
}
|
||||||
|
for k := range l.OldRoles {
|
||||||
|
for i := range l.OldRoles[k] {
|
||||||
|
UnmarshalTimeString(l.OldRoles[k][i].EndDateStr, &l.OldRoles[k][i].EndDate)
|
||||||
|
UnmarshalTimeString(l.OldRoles[k][i].StartDateStr, &l.OldRoles[k][i].StartDate)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -56,12 +56,9 @@ func (o *OpenStates) AllMetadata() ([]StateMeta, error) {
|
|||||||
func (o *OpenStates) StateMetadata(st string) (*StateMeta, error) {
|
func (o *OpenStates) StateMetadata(st string) (*StateMeta, error) {
|
||||||
var ret *StateMeta
|
var ret *StateMeta
|
||||||
var err error
|
var err error
|
||||||
orig := st
|
st, err = states.ScrubToAbbr(st)
|
||||||
if states.IsValidName(st) {
|
if err != nil {
|
||||||
st, err = states.NameToAbbr(st)
|
return ret, err
|
||||||
}
|
|
||||||
if !states.IsValidAbbr(st) {
|
|
||||||
return ret, errors.New("Invalid State: " + orig)
|
|
||||||
}
|
}
|
||||||
var getVal []byte
|
var getVal []byte
|
||||||
vals := url.Values{}
|
vals := url.Values{}
|
||||||
@ -84,16 +81,3 @@ func UnmarshalTimeString(s string, t *time.Time) error {
|
|||||||
*t, err = time.Parse("2006-01-02 15:04:05", s)
|
*t, err = time.Parse("2006-01-02 15:04:05", s)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
resp, err := http.Get("http://openstates.org/api/v1/legislators/geo/?apikey=" + site.OpenStatesKey + "&lat=" + lat + "&long=" + lng)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprint(w, "{\"status\":\"error\"}")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
|
||||||
fmt.Fprint(w, string(body))
|
|
||||||
// http://openstates.org/api/v1/legislators/geo/?lat=35.79&long=-78.78
|
|
||||||
// https://sunlightlabs.github.io/openstates-api/legislators.html#examples/geo-lookup
|
|
||||||
*/
|
|
||||||
|
Loading…
Reference in New Issue
Block a user