initial commit

This commit is contained in:
2025-12-27 15:42:44 +01:00
commit 62654db465
3 changed files with 147 additions and 0 deletions

3
go.mod Normal file
View File

@@ -0,0 +1,3 @@
module git.stinnesbeck.com/go/imdb
go 1.23.3

104
imdb.go Normal file
View File

@@ -0,0 +1,104 @@
package imdb
import (
"encoding/json"
"fmt"
"net/http"
"slices"
)
const (
searchURL = "https://v3.sg.media-imdb.com/suggestion/x/%s.json"
)
type Answer struct {
Data []Data `json:"d"`
Query string `json:"q"`
V int `json:"v"`
}
// type Image struct {
// Height int `json:"height"`
// ImageURL string `json:"imageUrl"`
// Width int `json:"width"`
// }
type (
QID string
Q string
)
const (
QID_Movie QID = "movie"
QID_TVMovie QID = "tvMovie"
QID_MusicVideo QID = "musicVideo"
QID_TVSeries QID = "tvSeries"
QID_TVMiniSeries QID = "tvMiniSeries"
)
const (
Q_Feature Q = "feature"
Q_TVMovie Q = "TV movie"
Q_MusicVideo Q = "musicVideo"
Q_TVSeries Q = "TV series"
Q_TVMiniSeries Q = "TV mini-series"
)
type Data struct {
// Image Image `json:"i,omitempty"`
ID string `json:"id"`
Title string `json:"l"`
Stars string `json:"s"`
Q Q `json:"q,omitempty"`
QID QID `json:"qid,omitempty"`
Rank int `json:"rank,omitempty"`
Year int `json:"y,omitempty"`
}
func SearchMovie(title string) ([]Data, error) {
data, err := Search(title)
if err != nil {
return nil, err
}
data = slices.DeleteFunc(data, func(d Data) bool {
return d.QID != QID_Movie
})
return data, nil
}
func SearchTVSeries(title string) ([]Data, error) {
data, err := Search(title)
if err != nil {
return nil, err
}
data = slices.DeleteFunc(data, func(d Data) bool {
return d.Q != Q_TVSeries
})
return data, nil
}
func Search(title string) ([]Data, error) {
req, err := http.NewRequest(http.MethodGet, fmt.Sprintf(searchURL, title), nil)
if err != nil {
return nil, err
}
res, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer res.Body.Close()
var ans Answer
if err := json.NewDecoder(res.Body).Decode(&ans); err != nil {
return nil, err
}
return ans.Data, nil
}

40
imdb_test.go Normal file
View File

@@ -0,0 +1,40 @@
package imdb_test
import (
"testing"
"git.stinnesbeck.com/go/imdb"
)
func TestSearch(t *testing.T) {
d, err := imdb.Search("IT")
if err != nil {
t.Fatal(err)
}
for _, data := range d {
t.Logf("%+v\n", data)
}
}
func TestSearchMovie(t *testing.T) {
d, err := imdb.SearchMovie("tron")
if err != nil {
t.Fatal(err)
}
for _, data := range d {
t.Logf("%+v\n", data)
}
}
func TestSearchTVShow(t *testing.T) {
d, err := imdb.SearchTVSeries("Big Bang Theory")
if err != nil {
t.Fatal(err)
}
for _, data := range d {
t.Logf("%+v\n", data)
}
}