©Sergey Emelyanov 2025 | Alle Rechte vorbehalten
Für Linux-Nutzer, die ihren Desktop mit nützlichen Informationen personalisieren möchten, ist Conky ein unverzichtbares Tool. In diesem Artikel zeige ich, wie Sie mit Go Skripte erstellen, die aktuelle Währungskurse und Zitate abrufen – perfekt für Ihre Conky-Konfiguration!
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type CurrencyResponse struct {
USD float64 `json:"USD"`
EUR float64 `json:"EUR"`
}
func main() {
apiKey := "IHR_API_KEY"
url := fmt.Sprintf("https://free.currconv.com/api/v7/convert?q=USD_RUB,EUR_RUB&compact=ultra&apiKey=%s", apiKey)
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var result map[string]float64
json.NewDecoder(resp.Body).Decode(&result)
fmt.Printf("USD: %.2f RUB | EUR: %.2f RUB\n", result["USD_RUB"], result["EUR_RUB"])
}
Conky-Integration:
${execpi 3600 /pfad/zum/currency-rates}
package main
type GetWebRequest interface {
FetchBytes(typeFort int) ([]byte, error)
}
type FortuneResult struct {
Content string `json:"content"`
}
package main
import (
"bytes"
"encoding/json"
"golang.org/x/text/encoding/charmap"
"golang.org/x/text/transform"
"io"
"net/http"
"strconv"
)
type LiveGetWebRequest struct{}
func (g LiveGetWebRequest) FetchBytes(typeFort int) ([]byte, error) {
url := "http://rzhunemogu.ru/RandJSON.aspx?CType=" + strconv.Itoa(typeFort)
resp, err := http.Get(url)
if err != nil {
return nil, err
}
defer resp.Body.Close()
return io.ReadAll(resp.Body)
}
func decodeWindows1251(data []byte) (string, error) {
dec := charmap.Windows1251.NewDecoder()
utf8Bytes, _, err := transform.Bytes(dec, data)
return string(utf8Bytes), err
}
func getFortune(client GetWebRequest, typeFort int) (string, error) {
body, err := client.FetchBytes(typeFort)
if err != nil {
return "", err
}
cleanData := bytes.ReplaceAll(body, []byte("\r"), []byte(""))
utf8Str, err := decodeWindows1251(cleanData)
if err != nil {
return "", err
}
var fortune FortuneResult
if err := json.Unmarshal([]byte(utf8Str), &fortune); err != nil {
return "", err
}
return fortune.Content, nil
}
package main
import (
"flag"
"fmt"
"log"
)
func main() {
var fortType int
flag.IntVar(&fortType, "type", 4, "Art des Inhalts (1=Anekdoten, 4=Zitate)")
flag.Parse()
content, err := getFortune(LiveGetWebRequest{}, fortType)
if err != nil {
log.Fatal("Fehler:", err)
}
fmt.Println(content)
}
fortune_test.go:
package main
import (
"testing"
)
type MockClient struct{}
func (m MockClient) FetchBytes(_ int) ([]byte, error) {
return []byte(`{"content":"Test-Zitat"}`), nil
}
func TestGetFortune(t *testing.T) {
expected := "Test-Zitat"
result, err := getFortune(MockClient{}, 1)
if err != nil {
t.Fatalf("Unerwarteter Fehler: %v", err)
}
if result != expected {
t.Errorf("Erwartet '%s', erhalten '%s'", expected, result)
}
}
Tests ausführen:
go test -v
go build -o fortune-receiver
*/15 * * * * /pfad/fortune-receiver -type=4 > ~/.conky_zitat.log
${font Ubuntu:bold:size=10}Zitat des Tages:${font}
${execi 900 cat ~/.conky_zitat.log}
golang.org/x/text
-Bibliothek installiert ist: go get golang.org/x/text
~/.bashrc
hinzu: alias zitat='/pfad/fortune-receiver -type=4'
alias anekdote='/pfad/fortune-receiver -type=1'
GBP
, JPY
etc. zur API-URL hinzu.Fazit: Mit Go und Conky können Sie Ihren Desktop in ein informatives Dashboard verwandeln – effizient, stabil und ohne JavaScript!
👉 Weitere Inspiration:
Bei Fragen posten Sie sie gerne in den Kommentaren! 🚀
„Ein gut konfigurierter Desktop ist wie ein aufgeräumter Schreibtisch – er macht produktiv und inspiriert.“
©Sergey Emelyanov 2025 | Alle Rechte vorbehalten