From d9d2c37cd042f033bcc0bee541a567139381c963 Mon Sep 17 00:00:00 2001 From: gc04 Date: Sat, 17 Jun 2023 01:20:11 +0200 Subject: [PATCH] Upload files to 'go' --- go/go.mod | 11 ++++ go/go.sum | 17 ++++++ go/main.go | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 192 insertions(+) create mode 100644 go/go.mod create mode 100644 go/go.sum create mode 100644 go/main.go diff --git a/go/go.mod b/go/go.mod new file mode 100644 index 0000000..48e3f99 --- /dev/null +++ b/go/go.mod @@ -0,0 +1,11 @@ +module sport + +go 1.18 + +require ( + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/pgx/v5 v5.3.1 // indirect + golang.org/x/crypto v0.6.0 // indirect + golang.org/x/text v0.7.0 // indirect +) diff --git a/go/go.sum b/go/go.sum new file mode 100644 index 0000000..56c9941 --- /dev/null +++ b/go/go.sum @@ -0,0 +1,17 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.3.1 h1:Fcr8QJ1ZeLi5zsPZqQeUZhNhxfkkKBOgJuYkJHoBOtU= +github.com/jackc/pgx/v5 v5.3.1/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHozM/8= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/go/main.go b/go/main.go new file mode 100644 index 0000000..25b1969 --- /dev/null +++ b/go/main.go @@ -0,0 +1,164 @@ +package main + +import ( + "context" + "fmt" + "os" + //"strconv" + + "github.com/jackc/pgx/v5" +) + +var conn *pgx.Conn + +func main() { + var err error + urlExample := "postgres://bot:3h0SXx6Ykx1D@toolbox.cfsystems.io:5432/iptvsportlist" + //conn, err = pgx.Connect(context.Background(), os.Getenv("DATABASE_URL")) + conn, err = pgx.Connect(context.Background(), urlExample) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to connection to database: %v\n", err) + os.Exit(1) + } + + if len(os.Args) == 1 { + printHelp() + os.Exit(0) + } + + switch os.Args[1] { + + case "tug": + printTug() + + case "help": + printHelp() + + case "guide": + userTerm := "" // Default value + + if len(os.Args) >= 3 { + userTerm = os.Args[2] + } + + err = guideTerm(userTerm) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to list events: %v\n", err) + os.Exit(1) + } + + case "whatson": + userTerm := "" // Default value + + if len(os.Args) >= 3 { + userTerm = os.Args[2] + } + + err = whatsonTerm(userTerm) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to list events: %v\n", err) + os.Exit(1) + } + + case "upcoming": + userTerm := "" // Default value + + if len(os.Args) >= 3 { + userTerm = os.Args[2] + } + + err = upcomingTerm(userTerm) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to list events: %v\n", err) + os.Exit(1) + } + + default: + fmt.Fprintln(os.Stderr, "Invalid command") + printHelp() + os.Exit(1) + } +} + +func printTug() { + fmt.Print(`chaturbate integration coming soon + +`) +} + +func guideTerm(userTerm string) error { + rows, err := conn.Query(context.Background(), "SELECT league, event, time_utc, string_agg(channel_name, ', ') AS channels FROM vw_gc04_epg_join_view vgejv WHERE (old_event = 'No') AND (sport = $1 OR event LIKE '%' || $1 || '%' OR league = $1) GROUP BY 1, 2, 3 ORDER BY league, time_utc ASC;", userTerm) + if err != nil { + return err + } + defer rows.Close() + + for rows.Next() { + var league string + var event string + var timeUtc string + var channels string + err := rows.Scan(&league, &event, &timeUtc, &channels) + if err != nil { + return err + } + fmt.Printf("%s | %s | %s UTC | %s |\n", league, event, timeUtc, channels) + } + + return rows.Err() +} + +func whatsonTerm(userTerm string) error { + rows, err := conn.Query(context.Background(), "SELECT league, event, time_utc, string_agg(channel_name, ', ') AS channels FROM vw_gc04_epg_join_view vgejv WHERE (old_event = 'No' AND on_air = 'Yes') AND (sport = $1 OR event LIKE '%' || $1 || '%' OR league = $1) GROUP BY 1, 2, 3 ORDER BY league, time_utc ASC;", userTerm) + if err != nil { + return err + } + defer rows.Close() + + for rows.Next() { + var league string + var event string + var timeUtc string + var channels string + err := rows.Scan(&league, &event, &timeUtc, &channels) + if err != nil { + return err + } + fmt.Printf("%s | %s | %s UTC | %s |\n", league, event, timeUtc, channels) + } + + return rows.Err() +} + +func upcomingTerm(userTerm string) error { + rows, err := conn.Query(context.Background(), "SELECT league, event, time_utc, string_agg(channel_name, ', ') AS channels FROM vw_gc04_epg_join_view vgejv WHERE (old_event = 'No' AND upcoming = 'Yes') AND (sport = $1 OR event LIKE '%' || $1 || '%' OR league = $1) GROUP BY 1, 2, 3 ORDER BY league, time_utc ASC;", userTerm) + if err != nil { + return err + } + defer rows.Close() + + for rows.Next() { + var league string + var event string + var timeUtc string + var channels string + err := rows.Scan(&league, &event, &timeUtc, &channels) + if err != nil { + return err + } + fmt.Printf("%s | %s | %s UTC | %s |\n", league, event, timeUtc, channels) + } + + return rows.Err() +} + +func printHelp() { + fmt.Print(` + +Usage: + sport whatson + sport guide + sport upcoming + +`) +} \ No newline at end of file