sl

package module
v0.0.0-...-868ff7d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2017 License: MIT Imports: 12 Imported by: 0

README

sl Build Status GoDoc Go Report Card

Go package for dealing with sl.se's apis.

Installation

go get -u github.com/frozzare/go-sl

APIs that are implemented

Example

package main

import (
	"fmt"
	"log"

	"github.com/frozzare/go-sl"
)

func main() {
	api := sl.NewClient(nil)
	res, err := api.Realtime.Search(context.Background(), &sl.RealtimeSearchOptions{
		Key:    "YOUR_API_KEY",
		SiteID: "1002", // 1002 = Stockholm Central/City
	})
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(res)
}

License

MIT © Fredrik Forsmo

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrTrailingSlash = errors.New("BaseURL must have a trailing slash")
	ErrNoKey         = errors.New("API key can't be empty")
	ErrNoSiteID      = errors.New("SiteID can't be empty")
)
View Source
var (
	ErrNoSearchString = errors.New("Search string is empty")
)
View Source
var (
	ErrNoTripFound = errors.New("No trip found")
)

Functions

This section is empty.

Types

type Client

type Client struct {

	// Base URL for API requests. Defaults to the SL API base url.
	BaseURL *url.URL

	// User agent used when communicating with the SL API.
	UserAgent string

	// Services used for talking to different parts of the SL API.
	Location      *LocationService
	Realtime      *RealtimeService
	TravelPlanner *TravelPlannerService
	// contains filtered or unexported fields
}

A Client manages communication with the SL API.

func NewClient

func NewClient(httpClient *http.Client) *Client

NewClient returns a new SL API client. If a nil httpClient is provided, http.DefaultClient will be used.

func (*Client) Do

func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*http.Response, error)

Do sends an API request and returns the API response.

func (*Client) NewRequest

func (c *Client) NewRequest(method, urlStr string, body interface{}) (*http.Request, error)

NewRequest creates an API request.

type Journey

type Journey struct {
	ErrorCode  string `json:"errorCode"`
	ErrorText  string `json:"errorText"`
	Message    string `json:"Message"`
	Directions struct {
		Direction []struct {
			RouteIdxFrom int    `json:"routeIdxFrom"`
			RouteIdxTo   int    `json:"routeIdxTo"`
			Value        string `json:"value"`
		} `json:"Direction"`
	} `json:"Directions"`
	JourneyStatus string `json:"JourneyStatus"`
	Names         struct {
		Name []struct {
			Product struct {
				Admin        string `json:"admin"`
				CatCode      string `json:"catCode"`
				CatIn        string `json:"catIn"`
				CatOut       string `json:"catOut"`
				CatOutL      string `json:"catOutL"`
				CatOutS      string `json:"catOutS"`
				Line         string `json:"line"`
				Name         string `json:"name"`
				Num          string `json:"num"`
				Operator     string `json:"operator"`
				OperatorCode string `json:"operatorCode"`
			} `json:"Product"`
			Category     string `json:"category"`
			Name         string `json:"name"`
			Number       string `json:"number"`
			RouteIdxFrom int    `json:"routeIdxFrom"`
			RouteIdxTo   int    `json:"routeIdxTo"`
		} `json:"Name"`
	} `json:"Names"`
	ServiceDays []struct {
		SDaysB string `json:"sDaysB"`
		SDaysI string `json:"sDaysI"`
		SDaysR string `json:"sDaysR"`
	} `json:"ServiceDays"`
	Stops struct {
		Stop []struct {
			DepDate          string  `json:"depDate"`
			DepPrognosisType string  `json:"depPrognosisType"`
			DepTime          string  `json:"depTime"`
			DepTrack         string  `json:"depTrack"`
			ExtID            string  `json:"extId"`
			HasMainMast      bool    `json:"hasMainMast"`
			ID               string  `json:"id"`
			Lat              float64 `json:"lat"`
			Lon              float64 `json:"lon"`
			MainMastExtID    string  `json:"mainMastExtId"`
			MainMastID       string  `json:"mainMastId"`
			Name             string  `json:"name"`
			RouteIdx         int     `json:"routeIdx"`
		} `json:"Stop"`
	} `json:"Stops"`
	LastPassRouteIdx int    `json:"lastPassRouteIdx"`
	LastPassStopRef  int    `json:"lastPassStopRef"`
	Ref              string `json:"ref"`
}

Journey represents a journey.

type JourneyOptions

type JourneyOptions struct {
	// Trip date. Example: 2014-08-23. Default is today.
	Date string `url:"date,omitempty"`

	// The reference from Trip, see above.
	ID string `url:"id,omitempty"`

	// API Key.
	Key string `url:"key,omitempty"`

	// Indicates whether detailed routes should be calculated for the results. 0 or 1. Default is 0.
	Poly int `url:"poly,omitempty"`
}

JourneyOptions specifies optional parameters to the TravelPlannerService.Journey.

type Location

type Location struct {
	Name   string `json:"Name"`
	SiteID string `json:"SiteId"`
	Type   string `json:"Type"`
	X      string `json:"X"`
	Y      string `json:"Y"`
}

Location represents a location from the SL API.

type LocationSearchOptions

type LocationSearchOptions struct {
	// Exclude buses if true. Default is false that are reversed to true.
	Bus bool `url:"bus,omitempty"`

	// API Key.
	Key string `url:"key,omitempty"`

	// Max results. Default is 10. Max 50.
	MaxResults bool `url:"maxResults,omitempty"`

	// SearchString.
	SearchString string `url:"searchstring,omitempty"`

	// Include only stations. Default is false.
	StationsOnly bool `url:"stationsonly,omitempty"`
}

LocationSearchOptions specifies optional parameters to the LocationSearch.Search.

type LocationService

type LocationService service

LocationService handles communication with the location related methods of the SL API.

SL API docs: https://www.trafiklab.se/api/sl-platsuppslag/dokumentation

func (*LocationService) Search

Search does a location lookup and response with the location list or a error.

type RealtimeResponse

type RealtimeResponse struct {
	Buses               []*Transport `json:"Buses"`
	DataAge             int          `json:"DataAge"`
	LatestUpdate        string       `json:"LatestUpdate"`
	Metros              []*Transport `json:"Metros"`
	Ships               []*Transport `json:"Ships"`
	StopPointDeviations []struct {
		Deviation struct {
			Consequence     interface{} `json:"Consequence"`
			ImportanceLevel int         `json:"ImportanceLevel"`
			Text            string      `json:"Text"`
		} `json:"Deviation"`
		StopInfo struct {
			GroupOfLine    string `json:"GroupOfLine"`
			StopAreaName   string `json:"StopAreaName"`
			StopAreaNumber int    `json:"StopAreaNumber"`
			TransportMode  string `json:"TransportMode"`
		} `json:"StopInfo"`
	} `json:"StopPointDeviations"`
	Trains []*Transport `json:"Trains"`
	Trams  []*Transport `json:"Trams"`
}

RealtimeResponse represents the realtime response from SL.

type RealtimeResponseData

type RealtimeResponseData struct {
	ExecutionTime int               `json:"ExecutionTime"`
	Message       string            `json:"Message"`
	ResponseData  *RealtimeResponse `json:"ResponseData"`
	StatusCode    int               `json:"StatusCode"`
}

RealtimeResponseData represents the realtime response data SL API.

type RealtimeSearchOptions

type RealtimeSearchOptions struct {
	// Exclude buses if true. Default is false that are reversed to true.
	Bus bool `url:"bus,omitempty"`

	// Exclude metros if true. Default is false that are reversed to true.
	Metro bool `url:"metro,omitempty"`

	// API Key.
	Key string `url:"key,omitempty"`

	// Station ID.
	SiteID string `url:"siteId,omitempty"`

	// Exclude ships if true. Default is false that are reversed to true.
	Ship bool `url:"ship,omitempty"`

	// Exclude train if true. Default is false that are reversed to true.
	Train bool `url:"train,omitempty"`

	// Exclude trams if true. Default is false that are reversed to true.
	Tram bool `url:"tram,omitempty"`

	// Time window to search departures within. Max 60 minutes.
	TimeWindow int `url:"timeWindow,omitempty"`
}

RealtimeSearchOptions specifies optional parameters to the RealtimeService.Search.

type RealtimeService

type RealtimeService service

RealtimeService handles communication with the realtime related methods of the SL API.

SL API docs: https://www.trafiklab.se/node/15754/documentation

func (*RealtimeService) Search

Search does a realtime search and response with the realtime list or a error.

type ReconstructionOptions

type ReconstructionOptions struct {
	// Trip date. Example: 2014-08-23. Default is today.
	Date string `url:"date,omitempty"`

	// The value I CtxRecon as I get the response from travel.
	Ctx string `url:"ctx,omitempty"`

	// API Key.
	Key string `url:"key,omitempty"`

	// Indicates whether detailed routes should be calculated for the results. 0 or 1. Default is 0.
	Poly int `url:"poly,omitempty"`
}

ReconstructionOptions specifies optional parameters to the TravelPlannerService.Reconstruction.

type Transport

type Transport struct {
	Destination string `json:"Destination"`
	Deviations  []struct {
		Consequence     string `json:"Consequence"`
		ImportanceLevel int    `json:"ImportanceLevel"`
		Text            string `json:"Text"`
	} `json:"Deviations"`
	DisplayTime          string `json:"DisplayTime"`
	ExpectedDateTime     string `json:"ExpectedDateTime"`
	GroupOfLine          string `json:"GroupOfLine"`
	JourneyDirection     int    `json:"JourneyDirection"`
	JourneyNumber        int    `json:"JourneyNumber"`
	LineNumber           string `json:"LineNumber"`
	StopAreaName         string `json:"StopAreaName"`
	StopAreaNumber       int    `json:"StopAreaNumber"`
	StopPointDesignation string `json:"StopPointDesignation"`
	StopPointNumber      int    `json:"StopPointNumber"`
	TimeTabledDateTime   string `json:"TimeTabledDateTime"`
	TransportMode        string `json:"TransportMode"`
}

Transport represents a transport type (bus, metro, ship, tram, train) struct.

type TravelPlannerService

type TravelPlannerService service

TravelPlannerService handles communication with the travel planner related methods of the SL API.

SL API docs: https://www.trafiklab.se/node/16717/documentation

func (*TravelPlannerService) Journey

func (s *TravelPlannerService) Journey(ctx context.Context, opt *JourneyOptions) (*Journey, error)

Journey does a journey request to SL API and response with the journey list or a error.

func (*TravelPlannerService) Reconstruction

func (s *TravelPlannerService) Reconstruction(ctx context.Context, opt *ReconstructionOptions) (*Trip, error)

Reconstruction does a reconstruction request to SL API and response with a trip or a error.

func (*TravelPlannerService) Trip

func (s *TravelPlannerService) Trip(ctx context.Context, opt *TripOptions) ([]*Trip, error)

Trip does a trip request to SL API and response with the trip list or a error.

type Trip

type Trip struct {
	LegList struct {
		Leg []struct {
			Destination struct {
				Date          string  `json:"date"`
				ExtID         string  `json:"extId"`
				HasMainMast   bool    `json:"hasMainMast"`
				ID            string  `json:"id"`
				Lat           float64 `json:"lat"`
				Lon           float64 `json:"lon"`
				MainMastExtID string  `json:"mainMastExtId"`
				MainMastID    string  `json:"mainMastId"`
				Name          string  `json:"name"`
				PrognosisType string  `json:"prognosisType"`
				Time          string  `json:"time"`
				Track         string  `json:"track"`
				Type          string  `json:"type"`
			} `json:"Destination"`
			JourneyDetailRef struct {
				Ref string `json:"ref"`
			} `json:"JourneyDetailRef"`
			JourneyStatus string `json:"JourneyStatus"`
			Origin        struct {
				Date          string  `json:"date"`
				ExtID         string  `json:"extId"`
				HasMainMast   bool    `json:"hasMainMast"`
				ID            string  `json:"id"`
				Lat           float64 `json:"lat"`
				Lon           float64 `json:"lon"`
				MainMastExtID string  `json:"mainMastExtId"`
				MainMastID    string  `json:"mainMastId"`
				Name          string  `json:"name"`
				PrognosisType string  `json:"prognosisType"`
				Time          string  `json:"time"`
				Track         string  `json:"track"`
				Type          string  `json:"type"`
			} `json:"Origin"`
			Product struct {
				Admin        string `json:"admin"`
				CatCode      string `json:"catCode"`
				CatIn        string `json:"catIn"`
				CatOut       string `json:"catOut"`
				CatOutL      string `json:"catOutL"`
				CatOutS      string `json:"catOutS"`
				Line         string `json:"line"`
				Name         string `json:"name"`
				Num          string `json:"num"`
				Operator     string `json:"operator"`
				OperatorCode string `json:"operatorCode"`
			} `json:"Product"`
			Category  string `json:"category"`
			Direction string `json:"direction"`
			Idx       string `json:"idx"`
			Name      string `json:"name"`
			Number    string `json:"number"`
			Reachable bool   `json:"reachable"`
			Type      string `json:"type"`
		} `json:"Leg"`
	} `json:"LegList"`
	ServiceDays []struct {
		PlanningPeriodBegin string `json:"planningPeriodBegin"`
		PlanningPeriodEnd   string `json:"planningPeriodEnd"`
		SDaysB              string `json:"sDaysB"`
		SDaysI              string `json:"sDaysI"`
		SDaysR              string `json:"sDaysR"`
	} `json:"ServiceDays"`
	TariffResult struct {
		FareSetItem []struct {
			Desc     string `json:"desc"`
			FareItem []struct {
				Cur   string `json:"cur"`
				Desc  string `json:"desc"`
				Name  string `json:"name"`
				Price int    `json:"price"`
			} `json:"fareItem"`
			Name string `json:"name"`
		} `json:"fareSetItem"`
	} `json:"TariffResult"`
	Checksum string `json:"checksum"`
	CtxRecon string `json:"ctxRecon"`
	Duration string `json:"duration"`
	Idx      int    `json:"idx"`
	TripID   string `json:"tripId"`
}

Trip represents a trip.

type TripOptions

type TripOptions struct {
	// Number of minutes added to estimated turnaround time.
	AddChangeTime int `url:"addChangeTime,omitempty"`

	// Separated by; in the following format: avoidId | avoidStatus
	// - avoidId, internal or external id for stop / station to avoid,
	// - avoidStatus, one of NPAVO (do not pass), NCAVO (do not change). Optionally.
	Avoid string `url:"avoid,omitempty"`

	// Internal or external ID for stop / station to avoid change.
	AvoidID string `url:"avoidID,omitempty"`

	// Percentage of original estimated time to handle a change.
	// Ex, 200 doubles the time the system will use for the traveler to catch up with a change.
	// Default 100.
	ChangeTimePercent int `url:"changeTimePercent,omitempty"`

	// Parameter that specifies the starting point for searching later or earlier trips.
	Context string `url:"context,omitempty"`

	// Trip date. Example: 2014-08-23. Default is today.
	Date string `url:"date,omitempty"`

	// Destination station id. Example: 300109600, 9600.
	DestID string `url:"destId,omitempty"`

	// Can either be a website id or an alias, website or acronym. Examples: 300109001, 9001, TCE.
	DestExtID string `url:"destExtId,omitempty"`

	// The destination coordinate in latitude.
	DestCoordLat string `url:"destCoordLat,omitempty"`

	// The destination coordinate in longitude.
	DestCoordLong string `url:"destCoordLong,omitempty"`

	// Indicates whether a trip can start with a walking distance. For distance sharing, min and max number of meters can be specified as 1, [min distance], [max distance].
	// Default is 1.
	DestWalk string `url:"destWalk,omitempty"`

	// API Key.
	Key string `url:"key,omitempty"`

	// Response language. Default 'sv', can be 'en' or 'de'.
	Lang string `url:"lang,omitempty"`

	// Line or lines separated by commas to be used to filter results, exclamation points are used for exclusion of lines.
	// Example: lines=55,122
	Lines string `url:"lines,omitempty"`

	// Max change (0-11).
	MaxChange int `url:"maxChange,omitempty"`

	// Max change time in minutes.
	MaxChangeTime int `url:"maxChangeTime,omitempty"`

	// Min change time in minutes.
	MinChangeTime int `url:"minChangeTime,omitempty"`

	// Min number of trips by the specified start time, default 4.
	// NumF and NumB together can not exceed 6.
	NumB string `url:"numB,omitempty"`

	// Min number of trips before the specified start time, default 1.
	// NumF and NumB together can not exceed 6.
	NumF string `url:"numF,omitempty"`

	// Limit the number of returned trips. Note that this is an approximate number. Default = 5
	NumTrips int `url:"numTrips,omitempty"`

	// The station to start at. Example: 300109600, 9600.
	OriginID string `url:"originId,omitempty"`

	// Can either be a website id or an alias, website or acronym. Examples: 300109001, 9001, TCE.
	OriginExtID string `url:"originExtId,omitempty"`

	// The start coordinate in latitude.
	OriginCoordLat string `url:"originCoordLat,omitempty"`

	// The start coordinate in longitude.
	OriginCoordLong string `url:"originCoordLong,omitempty"`

	// Indicates whether a trip can start with a walking distance. For distance sharing, min and max number of meters can be specified as 1, [min distance], [max distance].
	// Default is 1.
	OriginWalk string `url:"originWalk,omitempty"`

	// Indicates whether stops / stations passed on the trip should be retrieved. Default 0.
	Passlist int `url:"passlist,omitempty"`

	// Indicates whether detailed routes should be calculated for the results. 0 or 1. Default is 0.
	Poly int `url:"poly,omitempty"`

	// Combination value of desired traffic mode if not all will be used when traveling.
	Products int `url:"products,omitempty"`

	// By default, you are searching for the time you want the trip to resign.
	// By setting searchForArrival = 1, you will instead travel based on the time you want to reach.
	// Default = 0.
	SearchForArrival int `url:"searchForArrival,omitempty"`

	// Time. Example hour = 19:06. Default now.
	Time string `url:"time,omitempty"`

	// The station to pass through the station. Example: 300109600, 9600.
	ViaID string `url:"viaId,omitempty"`

	// Number of minutes to be spent on the via station indicated by ViaID.
	ViaWaitTime int `url:"viaWaitTime,omitempty"`
}

TripOptions specifies optional parameters to the TravelPlannerService.Trip.

type TripResponseData

type TripResponseData struct {
	ErrorCode string  `json:"errorCode"`
	ErrorText string  `json:"errorText"`
	Message   string  `json:"Message"`
	Trip      []*Trip `json:"Trip"`
	ScrB      string  `json:"scrB"`
	ScrF      string  `json:"scrF"`
}

TripResponseData represents the travel planner trip response data SL API.

type TypeaheadResponseData

type TypeaheadResponseData struct {
	ExecutionTime int         `json:"ExecutionTime"`
	Message       string      `json:"Message"`
	ResponseData  []*Location `json:"ResponseData"`
	StatusCode    int         `json:"StatusCode"`
}

TypeaheadResponseData represents the typeahead response data SL API.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL