miniflux-v2/internal/integration/notion/notion.go

55 lines
1.2 KiB
Go

// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package notion
import (
"fmt"
"miniflux.app/v2/internal/http/client"
)
// Client represents a Notion client.
type Client struct {
token string
pageID string
}
// NewClient returns a new Notion client.
func NewClient(token, pageID string) *Client {
return &Client{token, pageID}
}
func (c *Client) AddEntry(entryURL string, entryTitle string) error {
if c.token == "" || c.pageID == "" {
return fmt.Errorf("notion: missing credentials")
}
clt := client.New("https://api.notion.com/v1/blocks/" + c.pageID + "/children")
block := &Data{
Children: []Block{
{
Object: "block",
Type: "bookmark",
Bookmark: Bookmark{
Caption: []interface{}{},
URL: entryURL,
},
},
},
}
clt.WithAuthorization("Bearer " + c.token)
customHeaders := map[string]string{
"Notion-Version": "2022-06-28",
}
clt.WithCustomHeaders(customHeaders)
response, error := clt.PatchJSON(block)
if error != nil {
return fmt.Errorf("notion: unable to patch entry: %v", error)
}
if response.HasServerFailure() {
return fmt.Errorf("notion: request failed, status=%d", response.StatusCode)
}
return nil
}