Skip to content

Commit 6caca8a

Browse files
committed
Added cli methods for newsapi
1 parent 7c38f4d commit 6caca8a

File tree

2 files changed

+83
-1
lines changed

2 files changed

+83
-1
lines changed

cmd/cli/main.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313

1414
func main() {
1515
name := path.Base(os.Args[0])
16-
flags, err := NewFlags(name, os.Args[1:], OpenAIFlags, MistralFlags, ElevenlabsFlags, HomeAssistantFlags)
16+
flags, err := NewFlags(name, os.Args[1:], OpenAIFlags, MistralFlags, ElevenlabsFlags, HomeAssistantFlags, NewsAPIFlags)
1717
if err != nil {
1818
if err != flag.ErrHelp {
1919
fmt.Fprintln(os.Stderr, err)
@@ -65,6 +65,12 @@ func main() {
6565
os.Exit(1)
6666
}
6767

68+
cmd, err = NewsAPIRegister(cmd, opts, flags)
69+
if err != nil {
70+
fmt.Fprintln(os.Stderr, err)
71+
os.Exit(1)
72+
}
73+
6874
// Run command
6975
if err := Run(cmd, flags); err != nil {
7076
if errors.Is(err, flag.ErrHelp) {

cmd/cli/newsapi.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package main
2+
3+
import (
4+
// Package imports
5+
"github.com/mutablelogic/go-client/pkg/client"
6+
"github.com/mutablelogic/go-client/pkg/newsapi"
7+
)
8+
9+
/////////////////////////////////////////////////////////////////////
10+
// REGISTER FUNCTIONS
11+
12+
func NewsAPIFlags(flags *Flags) {
13+
flags.String("news-api-key", "${NEWSAPI_KEY}", "NewsAPI key")
14+
flags.String("q", "", "Search query")
15+
}
16+
17+
func NewsAPIRegister(cmd []Client, opts []client.ClientOpt, flags *Flags) ([]Client, error) {
18+
newsapi, err := newsapi.New(flags.GetString("news-api-key"), opts...)
19+
if err != nil {
20+
return nil, err
21+
}
22+
23+
// Register commands
24+
cmd = append(cmd, Client{
25+
ns: "newsapi",
26+
cmd: []Command{
27+
{Name: "sources", Description: "Return news sources", MinArgs: 2, MaxArgs: 2, Fn: newsAPISources(newsapi, flags)},
28+
{Name: "headlines", Description: "Return news headlines", MinArgs: 2, MaxArgs: 2, Fn: newsAPIHeadlines(newsapi, flags)},
29+
{Name: "articles", Description: "Return news articles", MinArgs: 2, MaxArgs: 2, Fn: newsAPIArticles(newsapi, flags)},
30+
},
31+
})
32+
33+
// Return success
34+
return cmd, nil
35+
}
36+
37+
/////////////////////////////////////////////////////////////////////
38+
// API CALL FUNCTIONS
39+
40+
func newsAPISources(client *newsapi.Client, flags *Flags) CommandFn {
41+
return func() error {
42+
if sources, err := client.Sources(); err != nil {
43+
return err
44+
} else {
45+
return flags.Write(sources)
46+
}
47+
}
48+
}
49+
50+
func newsAPIHeadlines(client *newsapi.Client, flags *Flags) CommandFn {
51+
return func() error {
52+
opts := []newsapi.Opt{}
53+
if q := flags.GetString("q"); q != "" {
54+
opts = append(opts, newsapi.OptQuery(q))
55+
}
56+
if articles, err := client.Headlines(opts...); err != nil {
57+
return err
58+
} else {
59+
return flags.Write(articles)
60+
}
61+
}
62+
}
63+
64+
func newsAPIArticles(client *newsapi.Client, flags *Flags) CommandFn {
65+
return func() error {
66+
opts := []newsapi.Opt{}
67+
if q := flags.GetString("q"); q != "" {
68+
opts = append(opts, newsapi.OptQuery(q))
69+
}
70+
if articles, err := client.Articles(opts...); err != nil {
71+
return err
72+
} else {
73+
return flags.Write(articles)
74+
}
75+
}
76+
}

0 commit comments

Comments
 (0)