Replace prazdnikisegodnyaru with celebratoday, small underhood fixes
- Replace prazdnikisegodnyaru with celebratoday as first is banned in Russia - Update .golangci.yml rule set - Megatons of fixes for linter - Update README.md
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
// Package openweathermap implements openweatermap.org service client.
|
||||
package openweathermap
|
||||
|
||||
import (
|
||||
@@ -14,14 +15,16 @@ import (
|
||||
owm "github.com/briandowns/openweathermap"
|
||||
)
|
||||
|
||||
// Структурка для передачи в обрабтчик запросов в openweathermap api.
|
||||
type OwmItem struct {
|
||||
City string
|
||||
FakeName string
|
||||
Where string
|
||||
Lon float64
|
||||
Lat float64
|
||||
}
|
||||
type (
|
||||
// OwmItem структурка для передачи в обрабтчик запросов в openweathermap api.
|
||||
OwmItem struct {
|
||||
City string
|
||||
FakeName string
|
||||
Where string
|
||||
Lon float64
|
||||
Lat float64
|
||||
}
|
||||
)
|
||||
|
||||
// OwmClient обёртка с кэшированием для openweatermap.org.
|
||||
func OwmClient(cfg *config.MyConfig, city string, days uint32) (string, error) {
|
||||
@@ -41,23 +44,29 @@ func OwmClient(cfg *config.MyConfig, city string, days uint32) (string, error) {
|
||||
|
||||
// "Нормализуем" название города.
|
||||
city = strings.TrimSpace(city)
|
||||
|
||||
firstLetter := strings.SplitN(city, "", 2)[0]
|
||||
|
||||
city = fmt.Sprintf("%s%s", strings.ToUpper(firstLetter), city[1:])
|
||||
city = strings.ToValidUTF8(city, "")
|
||||
|
||||
switch city {
|
||||
case "Msk", "Default", "Dc", "Мск", "Dc-Universe":
|
||||
item.City = "Москва"
|
||||
|
||||
case "Spb", "Спб":
|
||||
item.City = "Санкт-Петербург"
|
||||
|
||||
case "Ект", "Ёбург", "Ебург", "Екат", "Ekt", "Eburg", "Ekat":
|
||||
item.City = "Екатеринбург"
|
||||
|
||||
case "Кудыкина гора":
|
||||
// Координаты Килиманжаро (-3.066524619045895, 37.35588473583672).
|
||||
item.Lat = -3.066524619045895
|
||||
item.Lon = 37.35588473583672
|
||||
item.FakeName = "Килиманжаро"
|
||||
item.Where = "на горе"
|
||||
|
||||
default:
|
||||
item.City = city
|
||||
item.Where = "в городе"
|
||||
@@ -96,8 +105,8 @@ func OwmAPIClient(cfg *config.MyConfig, item OwmItem) (string, error) {
|
||||
}
|
||||
|
||||
if item.City != "" {
|
||||
if err = w.CurrentByName(item.City); err != nil {
|
||||
// TODO: extend error
|
||||
if err := w.CurrentByName(item.City); err != nil {
|
||||
// TODO: extend error.
|
||||
return answer, err
|
||||
}
|
||||
|
||||
@@ -105,8 +114,8 @@ func OwmAPIClient(cfg *config.MyConfig, item OwmItem) (string, error) {
|
||||
} else {
|
||||
coord := owm.Coordinates{Longitude: item.Lon, Latitude: item.Lat}
|
||||
|
||||
if err = w.CurrentByCoordinates(&coord); err != nil {
|
||||
// TODO: extend error
|
||||
if err := w.CurrentByCoordinates(&coord); err != nil {
|
||||
// TODO: extend error.
|
||||
return answer, err
|
||||
}
|
||||
|
||||
@@ -291,6 +300,7 @@ func QueryOwmCache(cfg *config.MyConfig, item OwmItem) (string, error) {
|
||||
// Первое, что приходит в голову - коллизия хэшей sha256.
|
||||
if err != nil {
|
||||
log.Warnf("OWM-Cache: unable to parse string as int64 (sha256 collision?): %s", err)
|
||||
|
||||
answer, err := OwmAPIClient(cfg, item)
|
||||
|
||||
// Бинго! у нас ещё и ошибка при обращении к api openwethermap, здесь мы ничего сделать не можем.
|
||||
@@ -306,7 +316,7 @@ func QueryOwmCache(cfg *config.MyConfig, item OwmItem) (string, error) {
|
||||
return answer, err
|
||||
}
|
||||
|
||||
// Кэш просрочен
|
||||
// Кэш просрочен.
|
||||
if tsCache < tsNow {
|
||||
log.Debugf("OWM cache miss for city: %s", key)
|
||||
|
||||
@@ -326,6 +336,7 @@ func QueryOwmCache(cfg *config.MyConfig, item OwmItem) (string, error) {
|
||||
}
|
||||
|
||||
key += "+value"
|
||||
|
||||
answer = pcachedb.GetValue(cfg, "cache", key)
|
||||
|
||||
// Какие-то проблемы с кэшом - ts есть, но самого кэша нету. Более подробная инфа по идее уже попала в лог.
|
||||
@@ -334,7 +345,7 @@ func QueryOwmCache(cfg *config.MyConfig, item OwmItem) (string, error) {
|
||||
if len(answer) < 140 {
|
||||
log.Debugf("OWM cache miss for city: %s", key)
|
||||
|
||||
if len(answer) > 0 {
|
||||
if answer != "" {
|
||||
log.Errorf("OWM-Cache: record for city %s in cache is too short, less than 140 chars", key)
|
||||
}
|
||||
|
||||
@@ -373,7 +384,7 @@ func UpdateOwmUserCache(cfg *config.MyConfig, chatid string, entry string, value
|
||||
return err
|
||||
}
|
||||
|
||||
// Возвращает из кэша город, которым интересовался пользователь из даденного чятика.
|
||||
// QueryOwmUserCache возвращает из кэша город, которым интересовался пользователь из даденного чятика.
|
||||
func QueryOwmUserCache(cfg *config.MyConfig, chatid string, entry string) string {
|
||||
// Chatid как есть лучше на диск не пробовать класть, мало ли что туда юзер впишет. Возьмём от него sha256.
|
||||
var (
|
||||
|
||||
Reference in New Issue
Block a user