parent
cf342f41bb
commit
d9d2c37cd0
3 changed files with 192 additions and 0 deletions
@ -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 |
||||||
|
) |
@ -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= |
@ -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 |
||||||
|
|
||||||
|
`) |
||||||
|
} |
Loading…
Reference in new issue