njtransit

package module
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Nov 20, 2021 License: MIT Imports: 10 Imported by: 0

README

njtransit

Go 1.12

The library that provides an interface to NJTransit public Bus API.

Register as 3rd Party Developer

Register on NJTransit website to get username and password.

Usage example

import (
    njt "github.com/chuhlomin/njtransit"
    ...
)

...

client := njt.NewBusDataClient(
    os.Getenv("BUSDATA_USERNAME"),
    os.Getenv("BUSDATA_PASSWORD"),
    njt.BusDataProdURL,
)

log.Println("Calling GetBusVehicleData...")
resp, err := client.GetBusVehicleData()
if err != nil {
    log.Fatalf("Failed to call GetBusVehicleData: %v", err)
}
log.Printf("%#v", *resp)

Limits

User access limits are set to allow reasonable daily usage. These limits will not allow further accesses to the web service for the remainder of the day. After midnight these will be reset to zero. There will be a 40,000 limit per day for the current and vehicle data and 10 accesses per day for the full schedule. (Users needing more than 40,000 per day must demonstrate their user base of more than this limit and provide monthly user reports.)

If you are using NJTransit data, you have to provide (and comply with) this disclaimer:

Data provided by NJ TRANSIT, which is the sole owner of the Data. This “App” is not endorsed by, directly affiliated with, maintained, authorized, or sponsored by NJ TRANSIT. All product and company names are the registered trademarks of their original owners. The use of any trade name or trademark is for identification and reference purposes only and does not imply any association with the trademark owner.

By the way, this repository is not endorsed by, directly affiliated with, maintained, authorized, or sponsored by NJ TRANSIT. All product and company names are the registered trademarks of their original owners. The use of any trade name or trademark is for identification and reference purposes only and does not imply any association with the trademark owner.

Documentation

Index

Constants

View Source
const (
	BusDataProdURL = "https://busdata.njtransit.com/NJTBusData.asmx"
	BusDataTestURL = "https://busdata_tst.njtransit.com/NJTBusData.asmx"
)

Web Serivces URLs

View Source
const (
	CamdenBusTerminal        = "CAMD"
	AtlanticCityBusTerminal  = "ATLC"
	HackensackBusTerminal    = "HACK"
	HobokenBusTerminal       = "HBKN"
	IrvingtonBusTerminal     = "IRVN"
	LakewoodBusTerminal      = "LKWD"
	NewarkPennStation        = "NWRK"
	MetroParkBusTerminal     = "MTPK"
	PortAuthorityBusTerminal = "PABT"
	OldBridgeBusTerminal     = "OBRG"
	WayneBusTerminal         = "WYNE"
	TrentonBusTerminal       = "TREN"
	GeorgeWashingtonTerminal = "GWBT"
)

Pre-defined locations That can be used in GetBusDV method

View Source
const (
	TrainDataProdURL = "https://traindata.njtransit.com/NJTTrainData.asmx"
	TrainDataTestURL = "https://njttraindatatst.njtransit.com/NJTTrainData.asmx"
)

Variables

View Source
var ErrNotImplemented = errors.New("not implemented")

Functions

This section is empty.

Types

type BusDVTrip

type BusDVTrip struct {
	PublicRoute   string `xml:"public_route"`  // 123
	Header        string `xml:"header"`        // JERSEY CITY CHRIST HOSP
	Lanegate      string `xml:"lanegate"`      // 303
	DepartureTime string `xml:"departuretime"` // Approaching
	Remarks       string `xml:"remarks"`       //
}

BusDVTrip represents part of GetBusDVResponse

type BusDataClient

type BusDataClient struct {
	// contains filtered or unexported fields
}

BusDataClient holds information between API calls

func NewBusDataClient

func NewBusDataClient(username, password, busDataURL string) *BusDataClient

NewBusDataClient creates new BusDataClient

func (*BusDataClient) GetBusDV

func (c *BusDataClient) GetBusDV(request GetBusDVRequest) (*GetBusDVResponse, error)

GetBusDV - Gets the first layer of data for BusDV This method provides schedule information. The data consist of the next trip to depart for each possible lane at the requested location.

func (*BusDataClient) GetBusLocations

func (c *BusDataClient) GetBusLocations() (*GetBusLocationsResponse, error)

GetBusLocations - This method provides a list of locations that can be used in the GetBusDVXML

func (*BusDataClient) GetBusVehicleData

func (c *BusDataClient) GetBusVehicleData() (*GetBusVehicleDataResponse, error)

GetBusVehicleData - Status By Bus data This Method will provide Bus Vehicle Information. It will list the vehicles currently reporting real-time information.

func (*BusDataClient) GetBusVehicleDataStream

func (c *BusDataClient) GetBusVehicleDataStream(r chan BusVehicleDataRow, e chan error, updateTnterval time.Duration, dedupe bool)

GetBusVehicleDataStream provides a stream or BusVehicleData updates.

func (*BusDataClient) GetMessages

func (c *BusDataClient) GetMessages(request GetMessagesRequest) (*GetMessagesResponse, error)

GetMessages - This method provides a list of messages

func (*BusDataClient) GetNextTrips

func (c *BusDataClient) GetNextTrips(request GetNextTripsRequest) (*GetNextTripsResponse, error)

GetNextTrips retrieves upcoming bus arrivals for given stopID This method provides schedule information. The data consist of the next 20 trips that depart the given stop

func (*BusDataClient) GetScheduleData

func (c *BusDataClient) GetScheduleData(request GetScheduleDataRequest) (*GetScheduleDataResponse, error)

GetScheduleData - This method will provide schedule information. The data consists of the departures for the given site that depart within the given number of minutes. Also included are the remaining stops that each of these trips will be making.

func (*BusDataClient) GetScheduleXGTFS

func (c *BusDataClient) GetScheduleXGTFS(request GetScheduleXGTFSRequest) (*GetScheduleXGTFSResponse, error)

GetScheduleXGTFS -This method will provide schedule information. The data consists of the arrivals and departures for the given site that depart within the given number of minutes.

type BusVehicleDataRow

type BusVehicleDataRow struct {
	VehicleID            string                       `xml:"VEHICLE_ID"`              // 5987
	Route                string                       `xml:"ROUTE"`                   // 1
	RunID                string                       `xml:"RUN_ID"`                  // 21
	TripBlock            string                       `xml:"TRIP_BLOCK"`              // 001HL064
	PatternID            string                       `xml:"PATTERN_ID"`              // 264
	Destination          string                       `xml:"DESTINATION"`             // 1 NEWARK-IVY HILL VIA RIVER TERM
	Longitude            string                       `xml:"LONGITUDE"`               // -74.24513778686523
	Latitude             string                       `xml:"LATITUDE"`                // 40.73779029846192
	GPSTimestmp          string                       `xml:"GPS_TIMESTMP"`            // 25-Apr-2019 12:15:12 AM
	LastModified         string                       `xml:"LAST_MODIFIED"`           // 25-Apr-2019 12:16:10 AM
	AsInternalTripNumber string                       `xml:"AS_INTERNAL_TRIP_NUMBER"` // 13734490
	Timepoints           []BusVehicleDataRowTimepoint `xml:"TIMEPOINTS"`
}

BusVehicleDataRow is part of the GetBusVehicleDataResponse

type BusVehicleDataRowTimepoint

type BusVehicleDataRowTimepoint struct {
	AsTimingPointID string `xml:"AS_TIMING_POINT_ID"` // IVY HILL
	AsDescription   string `xml:"AS_DESCRIPTION"`     // IVY HILL LOOP (MT VERNON PL)
	AsSchedDepTime  string `xml:"AS_SCHED_DEP_TIME"`  // 25-Apr-2019 12:20:00 AM
}

BusVehicleDataRowTimepoint is part of the BusVehicleDataRow

type GetBusDVRequest

type GetBusDVRequest struct {
	Location string
}

GetBusDVRequest represents GetBusDV API request

type GetBusDVResponse

type GetBusDVResponse struct {
	Trip []BusDVTrip `xml:"Trip"`
}

GetBusDVResponse represents GetBusDV API response

type GetBusLocationsResponse

type GetBusLocationsResponse struct {
	Terminal []string `xml:"terminal"`
}

GetBusLocationsResponse represents GetBusLocations API response

type GetBusVehicleDataResponse

type GetBusVehicleDataResponse struct {
	Rows []BusVehicleDataRow `xml:"ROW"`
}

GetBusVehicleDataResponse represents GetBusVehicleData API response

type GetMessagesRequest

type GetMessagesRequest struct {
	StopID int
}

GetMessagesRequest represents GetMessages API response

type GetMessagesResponse

type GetMessagesResponse struct {
	Message []string `xml:"message"`
}

GetMessagesResponse represents GetMessages API response

type GetNextTrip

type GetNextTrip struct {
	TripID        string  `xml:"Trip_id"`         // 35971
	ArrivalTime   string  `xml:"arrival_time"`    // 23:00:48
	DepartureTime string  `xml:"departure_time"`  // 23:00:48
	SchedDepTime  string  `xml:"sched_dep_time"`  // 4/22/2019 11:09:00 PM
	StopID        string  `xml:"stop_id"`         // 21884
	StopSequence  string  `xml:"stop_sequence"`   // 84
	Route         string  `xml:"route"`           // 94
	Header        string  `xml:"header"`          // BLOOMFIELD CENTER
	StopName      string  `xml:"stop_name"`       // HESSIAN AVE AT RED BANK AVE#
	TimingPointID string  `xml:"timing_point_id"` // BLFDMUNI
	StopLat       float32 `xml:"stop_lat"`        // 39.862620
	StopLon       float32 `xml:"stop_lon"`        // -75.168910
	SecLate       int     `xml:"sec_late"`        // -60
}

GetNextTrip represents part of the GetNextTripsResponse

type GetNextTripsRequest

type GetNextTripsRequest struct {
	StopID int
}

GetNextTripsRequest represents GetNextTrips API request

type GetNextTripsResponse

type GetNextTripsResponse struct {
	Trips []GetNextTrip `xml:"Trip"`
}

GetNextTripsResponse represents GetNextTrips API response

type GetScheduleDataRequest

type GetScheduleDataRequest struct {
	Site    string
	Minutes int
}

GetScheduleDataRequest represents GetScheduleData API response

type GetScheduleDataResponse

type GetScheduleDataResponse struct {
	Trips []GetScheduleDataTrip `xml:"trip"`
}

GetScheduleDataResponse represents GetScheduleData API response

type GetScheduleDataTrip

type GetScheduleDataTrip struct {
	InternalTripNumber string                  `xml:"internal_trip_number"` // 13694960
	Route              string                  `xml:"route"`                // 123
	BusHeader          string                  `xml:"BusHeader"`            // Jersey City Christ Hosp
	RunID              string                  `xml:"run_id"`               // 624
	ManualLaneGate     string                  `xml:"manual_lane_gate"`     //
	LaneGate           string                  `xml:"LaneGate"`             // 214-3
	SecLate            string                  `xml:"sec_late"`             //
	Remarks            string                  `xml:"Remarks"`              //
	DepartureTime      string                  `xml:"DepartureTime"`        // 8:14 PM
	Stop               GetScheduleDataTripStop `xml:"STOP"`
}

GetScheduleDataTrip represents part of GetScheduleDataResponse

type GetScheduleDataTripStop

type GetScheduleDataTripStop struct {
	ScheduledDepartureDate string `xml:"scheduleddeparturedate"` // 4/24/2019 12:00:00 AM
	ScheduledDepartureTime string `xml:"cheduleddeparturetime"`  // 8:18 PM
	TopName                string `xml:"topname"`                // Port Authority Bus Terminal
	TopCity                string `xml:"topcity"`                // NEW YORK CITY
}

GetScheduleDataTripStop represents part of GetScheduleDataTrip

type GetScheduleXGTFSRequest

type GetScheduleXGTFSRequest struct {
	Site    string
	Minutes int
}

GetScheduleXGTFSRequest represents GetScheduleXGTFS API response

type GetScheduleXGTFSResponse

type GetScheduleXGTFSResponse struct {
	Trips []GetScheduleXGTFSTrip `xml:"trip"`
}

GetScheduleXGTFSResponse represents GetScheduleXGTFS API response

type GetScheduleXGTFSTrip

type GetScheduleXGTFSTrip struct {
	GTFSTripID             int    `xml:"gtfs_trip_id"`
	GTFSStopID             int    `xml:"gtfs_stop_id"`
	GTFSStopCode           string `xml:"gtfs_stop_Code"`
	GTFSRouteID            int    `xml:"gtfs_route_id"`
	GTFSServiceID          int    `xml:"gtfs_service_id"`
	GTFSFileDate           string `xml:"gtfs_file_Date"`
	Route                  string `xml:"route"`
	Lanegate               string `xml:"lanegate"`               // terminal Line or Gate (".." for inbound buses)
	ScheduledLaneGate      string `xml:"scheduled_lane_gate"`    // can be empty
	ManualLaneGate         string `xml:"manual_lane_gate"`       // can be empty
	DepartureTime          string `xml:"departuretime"`          // example: 1:41 AM
	ScheduledDepartureDate string `xml:"scheduleddeparturedate"` // example: 03-JAN-19
	ScheduledDepartureTime string `xml:"scheduleddeparturetime"` // example: 1:41 AM
	SchedDepTime           string `xml:"sched_dep_Time"`         // example: 03-JAN-19 01.41.00.000000 AM
	SecLate                string `xml:"sec_late"`               // can be empty
	BusHeader              string `xml:"busheader"`
	RunID                  int    `xml:"run_id"`
	StopName               string `xml:"stopname"`
	StopCity               string `xml:"stopcity"` // example: NEW YORK CITY
	TripBlock              string `xml:"trip_block"`
	Direction              string `xml:"direction"` // can be "In" or "Ou"
}

GetScheduleXGTFSTrip represents part of GetScheduleXGTFSResponse

type GetStationListResponse

type GetStationListResponse struct {
	Stations []GetStationListResponseStation `xml:"STATION"`
}

type GetStationListResponseStation

type GetStationListResponseStation struct {
	TwoChar string `xml:"STATION_2CHAR"`
	Name    string `xml:"STATIONNAME"`
}

type GetStationMessageResponse

type GetStationMessageResponse struct {
	TwoChar       string                           `xml:"STATION_2CHAR"`
	Name          string                           `xml:"STATIONNAME"`
	BannerMessage string                           `xml:"BANNERMSGS"`
	Items         []*GetStationMessageResponseItem `xml:"ITEMS>ITEM"`
}

type GetStationMessageResponseItem

type GetStationMessageResponseItem struct {
	ItemIndex         string `xml:"ITEM_INDEX"`
	SchedDepDate      string `xml:"SCHED_DEP_DATE"`
	Destination       string `xml:"DESTINATION"`
	Track             string `xml:"TRACK"`
	Line              string `xml:"LINE"`
	TrainID           string `xml:"TRAIN_ID"`
	ConnectingTrainID string `xml:"CONNECTING_TRAIN_ID"`
	Status            string `xml:"STATUS"`
	SecLate           string `xml:"SEC_LATE"`
	LastModified      string `xml:"LAST_MODIFIED"`
	BackgroundColor   string `xml:"BACKCOLOR"`
	ForegroundColor   string `xml:"FORECOLOR"`
	ShadowColor       string `xml:"SHADOWCOLOR"`
	GPSLatitude       string `xml:"GPSLATITUDE"`
	GPSLongitude      string `xml:"GPSLONGITUDE"`
	GPSTime           string `xml:"GPSTIME"`
	StationPosition   string `xml:"STATION_POSITION"`
	LineAbbreviation  string `xml:"LINEABBREVIATION"`
	InlineMessage     string `xml:"INLINEMSG"`
}

type GetStationScheduleResponse

type GetStationScheduleResponse struct {
	TwoChar string                           `xml:"STATION_2CHAR"`
	Name    string                           `xml:"STATIONNAME"`
	Items   []GetStationScheduleResponseItem `xml:"ITEMS>ITEM"`
}

type GetStationScheduleResponseItem

type GetStationScheduleResponseItem struct {
	ItemIndex             int    `xml:"ITEM_INDEX"`
	SchedDepDate          string `xml:"SCHED_DEP_DATE"`
	Destination           string `xml:"DESTINATION"`
	SchedTrack            string `xml:"SCHED_TRACK"` // see Appendix II
	TrainID               string `xml:"TRAIN_ID"`
	Line                  string `xml:"LINE"`
	StationPosition       string `xml:"STATION_POSITION"` // see Appendix III
	Direction             string `xml:"DIRECTION"`
	DwellTimeSeconds      int    `xml:"DWELL_TIME"`
	PermConnectingTrainID string `xml:"PERM_CONNECTING_TRAIN_ID"`
	PermPickup            string `xml:"PERM_PICKUP"`
	PermDropoff           string `xml:"PERM_DROPOFF"`
	StopCode              string `xml:"STOP_CODE"` // see Appendix IV
	StoppingAt            string `xml:"STOPPING_AT"`
}

type GetTrainSchedule19RecResponse

type GetTrainSchedule19RecResponse struct {
	TwoChar string                               `xml:"STATION_2CHAR"`
	Name    string                               `xml:"STATIONNAME"`
	Items   []*GetTrainSchedule19RecResponseItem `xml:"ITEMS>ITEM"`
}

type GetTrainSchedule19RecResponseItem added in v1.1.0

type GetTrainSchedule19RecResponseItem struct {
	ItemIndex         int    `xml:"ITEM_INDEX"`
	SchedDepDate      string `xml:"SCHED_DEP_DATE"`
	Destination       string `xml:"DESTINATION"`
	Track             string `xml:"TRACK"`
	Line              string `xml:"LINE"`
	TrainID           string `xml:"TRAIN_ID"`
	ConnectingTrainID string `xml:"CONNECTING_TRAIN_ID"`
	Status            string `xml:"STATUS"`
	SecLate           int    `xml:"SEC_LATE"`
	LastModified      string `xml:"LAST_MODIFIED"`
	BackgroundColor   string `xml:"BACKCOLOR"`
	ForegroundColor   string `xml:"FORECOLOR"`
	ShadowColor       string `xml:"SHADOWCOLOR"`
	GPSLatitude       string `xml:"GPSLATITUDE"`
	GPSLongitude      string `xml:"GPSLONGITUDE"`
	GPSTime           string `xml:"GPSTIME"`
	StationPosition   string `xml:"STATION_POSITION"`
	LineAbbreviation  string `xml:"LINEABBREVIATION"`
	InlineMessage     string `xml:"INLINEMSG"`
}

type GetTrainScheduleResponse

type GetTrainScheduleResponse struct {
}

type GetVehicleDataResponse

type GetVehicleDataResponse struct {
}

type ScheduleXGTFSTrip

type ScheduleXGTFSTrip struct {
	GTFSTripID             int    `xml:"gtfs_trip_id"`
	GTFSStopID             int    `xml:"gtfs_stop_id"`
	GTFSStopCode           string `xml:"gtfs_stop_Code"`
	GTFSRouteID            int    `xml:"gtfs_route_id"`
	GTFSServiceID          int    `xml:"gtfs_service_id"`
	GTFSFileDate           string `xml:"gtfs_file_Date"`
	Route                  string `xml:"route"`
	Lanegate               string `xml:"lanegate"` // terminal Line or Gate (".." for inbound buses)
	ScheduledLaneGate      string `xml:"scheduled_lane_gate"`
	ManualLaneGate         string `xml:"manual_lane_gate"`
	DepartureTime          string `xml:"departuretime"`          // example: 1:41 AM
	ScheduledDepartureDate string `xml:"scheduleddeparturedate"` // example: 03-JAN-19
	ScheduledDepartureTime string `xml:"scheduleddeparturetime"` // example: 1:41 AM
	SchedDepTime           string `xml:"sched_dep_Time"`         // example: 03-JAN-19 01.41.00.000000 AM
	SecLate                string `xml:"sec_late"`
	BusHeader              string `xml:"busheader"`
	RunID                  string `xml:"run_id"`
	StopName               string `xml:"stopname"`
	StopCity               string `xml:"stopcity"` // example: NEW YORK CITY
	TripBlock              string `xml:"trip_block"`
	Direction              string `xml:"direction"` // can be "In" or "Ou"
}

ScheduleXGTFSTrip is part of the GetScheduleXGTFSResponse

type TrainDataClient

type TrainDataClient struct {
	// contains filtered or unexported fields
}

func NewTrainDataClient

func NewTrainDataClient(httpClient httpClient, username, password, trainDataURL string) *TrainDataClient

func (*TrainDataClient) GetStationList

func (t *TrainDataClient) GetStationList() (*GetStationListResponse, error)

GetStationList - List all stations

func (*TrainDataClient) GetStationMessage

func (t *TrainDataClient) GetStationMessage(station, trainLine string) (*GetStationMessageResponse, error)

GetStationMessage - Gets the all station message, but when pass station code, returns station message. Note – this is provided by a third party from our above APIs.

func (*TrainDataClient) GetStationSchedule

func (t *TrainDataClient) GetStationSchedule(station string, njtransitOnly bool) (*GetStationScheduleResponse, error)

GetStationSchedule - Provides a list of the 27 hours of train schedule data for any one station or all stations. Limited access to 10 times per day but only needed once per day after midnight - 12:30 would be better - to show the schedule for the 27 hour period from 12 midnight until 3am the next day. The GTFS data does not always match the daily schedules in our train control system. NJT_Only is a filter, pass value 1 for NJT trains only; pass value 0 for All trains

func (*TrainDataClient) GetTrainSchedule

func (t *TrainDataClient) GetTrainSchedule(station string, njtransitOnly bool) (*GetTrainScheduleResponse, error)

GetTrainSchedule - List train schedule for a given station, data is much the same as DepartureVision with train stop list information

func (*TrainDataClient) GetTrainSchedule19Rec

func (t *TrainDataClient) GetTrainSchedule19Rec(station string) (*GetTrainSchedule19RecResponse, error)

GetTrainScheduleJSON19Rec - List train schedule for a given station, data is much the same as DepartureVision, but without train stop list information.

func (*TrainDataClient) GetVehicleData

func (t *TrainDataClient) GetVehicleData() (*GetVehicleDataResponse, error)

GetVehicleDataXML - Provides the real-time position data for each active train. Provides the latest position, next station and seconds late for any train that has moved in the last 5 minutes. There is a limit of 40,000 requests per day.

Directories

Path Synopsis
examples
run

Jump to

Keyboard shortcuts

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