Add weather string
This commit is contained in:
4
main.go
4
main.go
@@ -3,6 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"goclock/dict"
|
"goclock/dict"
|
||||||
|
"goclock/weather"
|
||||||
"log"
|
"log"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"time"
|
"time"
|
||||||
@@ -18,8 +19,9 @@ func main() {
|
|||||||
minute := now.Minute()
|
minute := now.Minute()
|
||||||
|
|
||||||
timeStr := dict.WeekdayRussian(weekday) + " " + dict.DayRussian(day) + " " + dict.MonthRussian(month) + " " + dict.HourRussian(hour) + " " + dict.MinuteRussian(minute)
|
timeStr := dict.WeekdayRussian(weekday) + " " + dict.DayRussian(day) + " " + dict.MonthRussian(month) + " " + dict.HourRussian(hour) + " " + dict.MinuteRussian(minute)
|
||||||
|
strWeather := weather.CompilationWeatherString("KUM")
|
||||||
|
|
||||||
command := exec.Command("sh", "-c", fmt.Sprintf("echo '%s' | RHVoice-test -p Anna", timeStr))
|
command := exec.Command("sh", "-c", fmt.Sprintf("echo '%s' | RHVoice-test -p Anna", timeStr+" "+strWeather))
|
||||||
|
|
||||||
err := command.Run()
|
err := command.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
83
weather/weather.go
Normal file
83
weather/weather.go
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
package weather
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io"
|
||||||
|
"math"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func inflect(d float64) string {
|
||||||
|
n := math.Abs(d) // убираем минус
|
||||||
|
deg := int(n)
|
||||||
|
deg = deg % 100 // две последние цифры
|
||||||
|
n1 := int(n) % 10 // последняя цифра
|
||||||
|
|
||||||
|
form := ""
|
||||||
|
|
||||||
|
if deg > 10 && deg < 20 {
|
||||||
|
form = "градусов"
|
||||||
|
} else if n1 > 1 && n1 < 5 {
|
||||||
|
form = "градуса"
|
||||||
|
} else if n1 == 1 {
|
||||||
|
form = "градус"
|
||||||
|
} else {
|
||||||
|
form = "градусов"
|
||||||
|
}
|
||||||
|
|
||||||
|
return form
|
||||||
|
}
|
||||||
|
|
||||||
|
func cond(deg int) string {
|
||||||
|
f := ""
|
||||||
|
if deg < 0 {
|
||||||
|
f = " мороза"
|
||||||
|
} else if deg >= 1 {
|
||||||
|
f = " тепла"
|
||||||
|
}
|
||||||
|
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
type Weather struct {
|
||||||
|
City string `json:"name"`
|
||||||
|
Main struct {
|
||||||
|
Temp float32 `json:"temp"`
|
||||||
|
} `json:"main"`
|
||||||
|
Weather []struct {
|
||||||
|
Description string `json:"description"`
|
||||||
|
} `json:"weather"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func getWeather(city string) *Weather {
|
||||||
|
geo := map[string]string{
|
||||||
|
"VLG": "472757",
|
||||||
|
"KUM": "539221",
|
||||||
|
}
|
||||||
|
weatherString := "http://api.openweathermap.org/data/2.5/weather?id=" + geo[city] + "&lang=ru&appid=6f9d925282c57d29a95977d346e2d528&units=metric"
|
||||||
|
resp, _ := http.Get(weatherString)
|
||||||
|
|
||||||
|
body, _ := io.ReadAll(resp.Body)
|
||||||
|
|
||||||
|
var weather Weather
|
||||||
|
json.Unmarshal(body, &weather)
|
||||||
|
|
||||||
|
return &weather
|
||||||
|
}
|
||||||
|
|
||||||
|
func CompilationWeatherString(city string) string {
|
||||||
|
geo := ""
|
||||||
|
if city == "KUM" {
|
||||||
|
geo = "станице кум*ылженской"
|
||||||
|
} else if city == "VLG" {
|
||||||
|
geo = "городе волгоград"
|
||||||
|
}
|
||||||
|
weatherStruct := getWeather(city)
|
||||||
|
|
||||||
|
deg := int(math.Abs(float64(weatherStruct.Main.Temp)))
|
||||||
|
degForm := inflect(float64(weatherStruct.Main.Temp))
|
||||||
|
condition := cond(deg)
|
||||||
|
|
||||||
|
return "Сейчас в " + geo + " " + strconv.Itoa(deg) + " " + degForm + condition + weatherStruct.Weather[0].Description
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user