got event scraper working
This commit is contained in:
@@ -1,2 +1,3 @@
|
|||||||
testdata/
|
testdata/
|
||||||
db.sqlite*
|
db.sqlite*
|
||||||
|
test-db.sqlite*
|
||||||
|
|||||||
+4
-2
@@ -53,9 +53,11 @@ SELECT
|
|||||||
json_extract (e.value, '$.fights'),
|
json_extract (e.value, '$.fights'),
|
||||||
json_extract (e.value, '$.history')
|
json_extract (e.value, '$.history')
|
||||||
FROM
|
FROM
|
||||||
json_each (?) AS e ON CONFLICT (url, slug) DO
|
json_each (?) AS e
|
||||||
UPDATE
|
WHERE true
|
||||||
|
ON CONFLICT (url) DO UPDATE
|
||||||
SET
|
SET
|
||||||
|
slug = excluded.slug,
|
||||||
name = excluded.name,
|
name = excluded.name,
|
||||||
location = excluded.location,
|
location = excluded.location,
|
||||||
organization = excluded.organization,
|
organization = excluded.organization,
|
||||||
|
|||||||
@@ -3,9 +3,12 @@ package main
|
|||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"embed"
|
"embed"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
_ "github.com/mattn/go-sqlite3"
|
_ "github.com/mattn/go-sqlite3"
|
||||||
|
|
||||||
|
"mmaschedule-go/event"
|
||||||
|
|
||||||
"github.com/pressly/goose/v3"
|
"github.com/pressly/goose/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -13,20 +16,34 @@ import (
|
|||||||
var migrations embed.FS
|
var migrations embed.FS
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
db, err := sql.Open("sqlite3", "db.sqlite")
|
_, err := InitDb("db.sqlite")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
fmt.Println("Error initializing database: ", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func InitDb(name string) (*event.Queries, error) {
|
||||||
|
db, err := sql.Open("sqlite3", name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = db.Exec("PRAGMA journal_mode = WAL")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
goose.SetBaseFS(migrations)
|
goose.SetBaseFS(migrations)
|
||||||
|
|
||||||
if err := goose.SetDialect("sqlite3"); err != nil {
|
if err := goose.SetDialect("sqlite3"); err != nil {
|
||||||
panic(err)
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := goose.Up(db, "migrations"); err != nil {
|
if err := goose.Up(db, "migrations"); err != nil {
|
||||||
panic(err)
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// run app
|
queries := event.New(db)
|
||||||
|
|
||||||
|
return queries, nil
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-4
@@ -1,14 +1,14 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"mmaschedule-go/event"
|
"mmaschedule-go/event"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Scraper func(ClientScraper) (*[]*event.Event, error)
|
type Scraper func(ClientScraper) (*[]*event.Event, error)
|
||||||
|
|
||||||
func ScrapeEvents() {
|
func ScrapeEvents(q *event.Queries, client ClientScraper) {
|
||||||
client := NewScraperClient()
|
|
||||||
events := []*event.Event{}
|
events := []*event.Event{}
|
||||||
scrapers := []Scraper{
|
scrapers := []Scraper{
|
||||||
ScrapeONE,
|
ScrapeONE,
|
||||||
@@ -16,11 +16,18 @@ func ScrapeEvents() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, scraper := range scrapers {
|
for _, scraper := range scrapers {
|
||||||
e, err := scraper(&client)
|
e, err := scraper(client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println("Error scraping events: ", err)
|
||||||
} else {
|
} else {
|
||||||
events = append(events, *e...)
|
events = append(events, *e...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(events) > 0 {
|
||||||
|
err := q.UpsertEvents(context.Background(), events)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error updating events in database: ", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -59,7 +59,7 @@ func ScrapeONE(client ClientScraper) (*[]*event.Event, error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if e.Fights != "null" {
|
if e.Fights == "null" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-18
@@ -105,25 +105,17 @@ func TestONE(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Scraping ONE failed: %s", err)
|
t.Errorf("Scraping ONE failed: %s", err)
|
||||||
}
|
}
|
||||||
PrintJson(events)
|
if len(*events) == 0 {
|
||||||
|
t.Fatal("Scraping ONE failed: Events are empty")
|
||||||
|
}
|
||||||
|
//PrintJson(events)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestJSONString(t *testing.T) {
|
func TestScrapeEvents(t *testing.T) {
|
||||||
type User struct {
|
client := DummyClient{}
|
||||||
Name string
|
q, err := InitDb("test-db.sqlite")
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Error initializing database: ", err)
|
||||||
}
|
}
|
||||||
|
ScrapeEvents(q, &client)
|
||||||
type Thing struct {
|
|
||||||
Users []User `json:"user,string"`
|
|
||||||
Num int `json:"num,string"`
|
|
||||||
}
|
|
||||||
|
|
||||||
u := Thing{
|
|
||||||
Users: []User{
|
|
||||||
{Name: "Bob"},
|
|
||||||
{Name: "John"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
PrintJson(u)
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user