- Go web server using Gin framework - Proxy FRED economic data API - Support series, observations, search, releases endpoints
89 lines
2.0 KiB
Go
89 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
const (
|
|
APIKey = "987b9c3428a3d0fe90179e3e6298d05e"
|
|
BaseURL = "https://api.stlouisfed.org/fred"
|
|
)
|
|
|
|
func buildURL(endpoint string, params map[string]string) string {
|
|
u, _ := url.Parse(BaseURL + endpoint)
|
|
query := u.Query()
|
|
query.Set("api_key", APIKey)
|
|
query.Set("file_type", "json")
|
|
for k, v := range params {
|
|
if v != "" {
|
|
query.Set(k, v)
|
|
}
|
|
}
|
|
u.RawQuery = query.Encode()
|
|
return u.String()
|
|
}
|
|
|
|
func fetchAndPrint(endpoint string, params map[string]string) {
|
|
url := buildURL(endpoint, params)
|
|
fmt.Printf("\n=== Testing %s ===\n", endpoint)
|
|
fmt.Printf("URL: %s\n\n", url)
|
|
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
fmt.Printf("Error: %v\n", err)
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
fmt.Printf("Error reading body: %v\n", err)
|
|
return
|
|
}
|
|
|
|
var prettyJSON map[string]interface{}
|
|
if err := json.Unmarshal(body, &prettyJSON); err == nil {
|
|
output, _ := json.MarshalIndent(prettyJSON, "", " ")
|
|
fmt.Printf("Response:\n%s\n", output)
|
|
} else {
|
|
fmt.Printf("Response:\n%s\n", string(body))
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
fmt.Println("========================================")
|
|
fmt.Println(" FRED API 测试脚本")
|
|
fmt.Println("========================================")
|
|
|
|
fetchAndPrint("/series", map[string]string{"series_id": "GNPCA"})
|
|
|
|
fetchAndPrint("/series/observations", map[string]string{
|
|
"series_id": "GNPCA",
|
|
"limit": "5",
|
|
"observation_end": "2000-01-01",
|
|
})
|
|
|
|
fetchAndPrint("/series/search", map[string]string{
|
|
"search_text": "GDP",
|
|
"limit": "3",
|
|
})
|
|
|
|
fetchAndPrint("/releases", map[string]string{
|
|
"limit": "3",
|
|
})
|
|
|
|
fetchAndPrint("/releases/dates", map[string]string{
|
|
"limit": "3",
|
|
"start_date": "2026-03-01",
|
|
"end_date": "2026-03-31",
|
|
})
|
|
|
|
fmt.Println("\n========================================")
|
|
fmt.Println(" 测试完成!")
|
|
fmt.Println("========================================")
|
|
}
|