53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package lib
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
type WikiResponse struct {
|
|
Data struct {
|
|
Pages struct {
|
|
List []struct {
|
|
UpdatedAt string
|
|
Title string
|
|
Path string
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
type WikiFetcher struct {
|
|
BaseURL string
|
|
Token string
|
|
Cache *Cache
|
|
}
|
|
|
|
func (f WikiFetcher) Fetch() []Entry {
|
|
q := `{"query":"{ pages { list(orderBy: UPDATED, orderByDirection: DESC, limit: 1){ path, updatedAt, title }}}"}`
|
|
wikiURL := fmt.Sprintf("%s/graphql", f.BaseURL)
|
|
req, _ := http.NewRequest("POST", wikiURL, bytes.NewBuffer([]byte(q)))
|
|
req.Header.Set("Authorization", "Bearer "+f.Token)
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
var r WikiResponse
|
|
|
|
if err := getJSON(req, &r); err != nil {
|
|
return []Entry{}
|
|
}
|
|
|
|
if len(r.Data.Pages.List) == 0 {
|
|
return []Entry{}
|
|
}
|
|
u := r.Data.Pages.List[0]
|
|
if f.Cache.TryUpdate("wiki", u.UpdatedAt) {
|
|
url := fmt.Sprintf("%s/%s", f.BaseURL, u.Path)
|
|
return []Entry{{
|
|
Title: fmt.Sprintf("📖 [WikiJS] - %s", u.Title),
|
|
URL: url,
|
|
}}
|
|
}
|
|
return []Entry{}
|
|
}
|