Compare commits
4
Commits
f3120905fe
...
v0.0.8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
72734c7faa | ||
|
|
5deb037fe5 | ||
|
|
6e78235127 | ||
|
|
5d5b893948 |
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
vrnp-static = pkgs.buildGoModule {
|
vrnp-static = pkgs.buildGoModule {
|
||||||
pname = "vrnp";
|
pname = "vrnp";
|
||||||
version = "0.0.6";
|
version = "0.0.8";
|
||||||
vendorHash = null;
|
vendorHash = null;
|
||||||
|
|
||||||
# For building the package, we use only the files not ignored by Git as inputs.
|
# For building the package, we use only the files not ignored by Git as inputs.
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
|
import "cmp"
|
||||||
import "encoding/json"
|
import "encoding/json"
|
||||||
import "errors"
|
import "errors"
|
||||||
import "fmt"
|
import "fmt"
|
||||||
@@ -50,6 +51,12 @@ type EFAClient interface {
|
|||||||
BuildRequest(string) (*http.Request, error)
|
BuildRequest(string) (*http.Request, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var allEfaClients []EFAClient = []EFAClient{
|
||||||
|
BwegtEFAClient{},
|
||||||
|
VRNEFAClient{},
|
||||||
|
KVVEFAClient{},
|
||||||
|
}
|
||||||
|
|
||||||
type VRNEFAClient struct {
|
type VRNEFAClient struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,6 +104,7 @@ func (c KVVEFAClient) BuildRequest(stopId string) (*http.Request, error) {
|
|||||||
form.Set("useRealtime", "1")
|
form.Set("useRealtime", "1")
|
||||||
form.Set("limit", "10")
|
form.Set("limit", "10")
|
||||||
form.Set("mode", "direct")
|
form.Set("mode", "direct")
|
||||||
|
form.Set("useRealtime", "1")
|
||||||
form.Set("outputFormat", "json")
|
form.Set("outputFormat", "json")
|
||||||
body := strings.NewReader(form.Encode())
|
body := strings.NewReader(form.Encode())
|
||||||
|
|
||||||
@@ -179,6 +187,7 @@ type Departure struct {
|
|||||||
Symbol string `json:"symbol"`
|
Symbol string `json:"symbol"`
|
||||||
Direction string `json:"direction"`
|
Direction string `json:"direction"`
|
||||||
Leaving string `json:"leaving"`
|
Leaving string `json:"leaving"`
|
||||||
|
Countdown int `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseDepartures(response DMResponse, allowedPlatform *string) (Departures, error) {
|
func ParseDepartures(response DMResponse, allowedPlatform *string) (Departures, error) {
|
||||||
@@ -223,24 +232,32 @@ func ParseDepartures(response DMResponse, allowedPlatform *string) (Departures,
|
|||||||
d.ServingLine.Symbol,
|
d.ServingLine.Symbol,
|
||||||
direction,
|
direction,
|
||||||
leaving,
|
leaving,
|
||||||
|
countdown,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
slices.SortFunc(ds, func(a Departure, b Departure) int {
|
||||||
|
return cmp.Compare(a.Countdown, b.Countdown)
|
||||||
|
})
|
||||||
|
|
||||||
return Departures{ds}, nil
|
return Departures{ds}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
password := os.Getenv("VRNP_PASSWORD")
|
password := os.Getenv("VRNP_PASSWORD")
|
||||||
if len(password) == 0 {
|
if len(password) == 0 {
|
||||||
panic("Required environment variable VRNP_PASSWORD is not set")
|
log.Fatal("Required environment variable VRNP_PASSWORD is not set")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clientAllowlist := strings.Split(os.Getenv("VRNP_CLIENT_ALLOWLIST"), ",")
|
||||||
|
|
||||||
// Use round-robin to send incoming requests to different servers
|
// Use round-robin to send incoming requests to different servers
|
||||||
var efaClient atomic.Uint64
|
var efaClient atomic.Uint64
|
||||||
efaClients := []EFAClient{
|
var efaClients []EFAClient
|
||||||
BwegtEFAClient{},
|
for _, efaClient := range allEfaClients {
|
||||||
VRNEFAClient{},
|
if len(clientAllowlist) != 0 && slices.Contains(clientAllowlist, efaClient.GetName()) {
|
||||||
KVVEFAClient{},
|
efaClients = append(efaClients, efaClient)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
http.HandleFunc("/departures", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/departures", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|||||||
Reference in New Issue
Block a user