Skip to content

Commit 3e7f38b

Browse files
committed
Update news API integration to use NewsAPI and improve request handling
1 parent 8f93529 commit 3e7f38b

File tree

2 files changed

+48
-19
lines changed

2 files changed

+48
-19
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ $ go build -o chat ./cmd/api
2727
- fill in the json with your own API keys
2828
- you can get your openRouter API key from [here](https://openrouter.ai/settings/keys)
2929
- you can get your Discord bot token from [here](https://discord.com/developers/applications)
30-
- you can get your news API token from [here](https://currentsapi.services/)
30+
- you can get your news API token from [here](https://newsapi.org/)
3131
- follow this page to get your [Youtube API key](https://developers.google.com/youtube/v3/getting-started)
3232

3333
**5. Run the bot**

internal/tools/newsFunctions.go

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212

1313
func getNews() (string, error) {
1414
log.Printf("User requested news\n")
15-
baseURL := "https://api.currentsapi.services/v1/latest-news"
15+
baseURL := "https://newsapi.org/v2/top-headlines"
1616

1717
// Construct the URL with query parameters
1818
u, err := url.Parse(baseURL)
@@ -22,12 +22,20 @@ func getNews() (string, error) {
2222

2323
// Add query parameters
2424
params := url.Values{}
25-
params.Add("language", "en")
26-
params.Add("apiKey", storage.Setting.NewsAPIToken) // Use the API key from settings
27-
u.RawQuery = params.Encode() // Encode and attach parameters
25+
params.Add("country", "us")
26+
u.RawQuery = params.Encode()
27+
28+
req, err := http.NewRequest("GET", u.String(), nil)
29+
if err != nil {
30+
return "", fmt.Errorf("failed to create new request: %w", err)
31+
}
32+
33+
req.Header.Add("X-Api-Key", storage.Setting.NewsAPIToken)
2834

2935
// Make the GET request
30-
resp, err := http.Get(u.String())
36+
client := &http.Client{}
37+
resp, err := client.Do(req)
38+
3139
if err != nil {
3240
return "", fmt.Errorf("failed to make GET request: %w", err)
3341
}
@@ -55,7 +63,7 @@ func getNews() (string, error) {
5563

5664
func searchNews(args SearchNewsArgs) (string, error) {
5765
log.Printf("User requested search news\n")
58-
baseURL := "https://api.currentsapi.services/v1/search"
66+
baseURL := "https://newsapi.org/v2/everything"
5967

6068
// Construct the URL with query parameters
6169
u, err := url.Parse(baseURL)
@@ -65,21 +73,36 @@ func searchNews(args SearchNewsArgs) (string, error) {
6573
// Add query parameters
6674
params := url.Values{}
6775
params.Add("language", "en")
68-
params.Add("apiKey", storage.Setting.NewsAPIToken) // Use the API key from settings
69-
params.Add("end_date", args.EndDate)
70-
params.Add("type", args.NewsType)
71-
params.Add("country", args.Country)
72-
params.Add("category", args.Category)
73-
params.Add("page_number", strconv.Itoa(args.PageNumber))
74-
params.Add("domain", args.Domain)
75-
params.Add("domains_not", args.DomainsNot)
76-
params.Add("keywords", args.Keywords)
77-
params.Add("page_size", strconv.Itoa(args.PageSize))
78-
params.Add("limit", strconv.Itoa(args.Limit))
76+
params.Add("to", args.EndDate)
77+
78+
if args.PageNumber <= 0 {
79+
args.PageNumber = 1
80+
}
81+
82+
params.Add("page", strconv.Itoa(args.PageNumber))
83+
params.Add("domains", args.Domain)
84+
params.Add("excludeDomains", args.DomainsNot)
85+
params.Add("q", args.Keywords)
86+
87+
if args.PageSize <= 0 {
88+
args.PageSize = 10
89+
}
90+
91+
params.Add("pageSize", strconv.Itoa(args.PageSize))
7992
u.RawQuery = params.Encode()
8093

8194
// Make the GET request
82-
resp, err := http.Get(u.String())
95+
req, err := http.NewRequest("GET", u.String(), nil)
96+
if err != nil {
97+
return "", fmt.Errorf("failed to create new request: %w", err)
98+
}
99+
100+
req.Header.Add("X-Api-Key", storage.Setting.NewsAPIToken)
101+
102+
// Make the GET request
103+
client := &http.Client{}
104+
resp, err := client.Do(req)
105+
83106
if err != nil {
84107
return "", fmt.Errorf("failed to make GET request: %w", err)
85108
}
@@ -92,6 +115,12 @@ func searchNews(args SearchNewsArgs) (string, error) {
92115

93116
// Check for successful response status code
94117
if resp.StatusCode != http.StatusOK {
118+
body, err := io.ReadAll(resp.Body)
119+
if err != nil {
120+
return "", fmt.Errorf("failed to read response body: %w", err)
121+
}
122+
123+
log.Println("News response: " + string(body))
95124
return "", fmt.Errorf("API request failed with status code: %d", resp.StatusCode)
96125
}
97126

0 commit comments

Comments
 (0)