/
core.go
57 lines (46 loc) · 990 Bytes
/
core.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package wikipedia
import (
"encoding/json"
"io"
"net/http"
"net/url"
"github.com/kvlach/janitorjeff/core"
)
var UrrNoResult = core.UrrNew("no results found")
const queryURL = "https://en.wikipedia.org/w/api.php?" +
"action=query" +
"&format=json" +
"&redirects=1" +
"&prop=info" +
"&generator=prefixsearch" +
"&formatversion=2" +
"&inprop=url" +
"&gpslimit=1" +
"&gpssearch="
type page struct {
Canonicalurl string `json:"canonicalurl"`
}
type response struct {
Query struct {
Pages []page `json:"pages"`
} `json:"query"`
}
func Search(query string) (page, core.Urr, error) {
resp, err := http.Get(queryURL + url.QueryEscape(query))
if err != nil {
return page{}, nil, err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return page{}, nil, err
}
var r response
err = json.Unmarshal(body, &r)
if err != nil {
return page{}, nil, err
}
if len(r.Query.Pages) == 0 {
return page{}, UrrNoResult, nil
}
return r.Query.Pages[0], nil, nil
}