Pun: fix logging and error handling
This commit is contained in:
parent
6c9ae85d85
commit
552cdcfa31
1 changed files with 20 additions and 32 deletions
|
|
@ -4,7 +4,6 @@ import (
|
|||
"encoding/xml"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/cookiejar"
|
||||
"net/url"
|
||||
"slices"
|
||||
|
|
@ -16,6 +15,7 @@ import (
|
|||
"github.com/cenkalti/backoff/v4"
|
||||
"github.com/evcc-io/evcc/api"
|
||||
"github.com/evcc-io/evcc/util"
|
||||
"github.com/evcc-io/evcc/util/request"
|
||||
"golang.org/x/net/html"
|
||||
)
|
||||
|
||||
|
|
@ -124,28 +124,21 @@ func (t *Pun) Type() api.TariffType {
|
|||
}
|
||||
|
||||
func (t *Pun) getData(day time.Time) (api.Rates, error) {
|
||||
// Initial URL
|
||||
urlString := "https://www.mercatoelettrico.org/It/WebServerDataStore/MGP_Prezzi/" + day.Format("20060102") + "MGPPrezzi.xml"
|
||||
|
||||
// Cookie Jar zur Speicherung von Cookies zwischen den Requests
|
||||
jar, _ := cookiejar.New(nil)
|
||||
client := &http.Client{
|
||||
Jar: jar,
|
||||
}
|
||||
client := request.NewClient(t.log)
|
||||
client.Jar, _ = cookiejar.New(nil)
|
||||
|
||||
// Erster Request
|
||||
resp, err := client.Get(urlString)
|
||||
uri := "https://www.mercatoelettrico.org/It/WebServerDataStore/MGP_Prezzi/" + day.Format("20060102") + "MGPPrezzi.xml"
|
||||
resp, err := client.Get(uri)
|
||||
if err != nil {
|
||||
fmt.Println("Error fetching URL:", err)
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, _ := io.ReadAll(resp.Body)
|
||||
formData, err := parseFormFields(body)
|
||||
formData, err := parseFormFields(resp.Body)
|
||||
if err != nil {
|
||||
fmt.Println("Error parsing form fields:", err)
|
||||
return nil, err
|
||||
return nil, fmt.Errorf("form fields: %w", err)
|
||||
}
|
||||
|
||||
redirectURL := resp.Request.URL.String()
|
||||
|
|
@ -164,21 +157,16 @@ func (t *Pun) getData(day time.Time) (api.Rates, error) {
|
|||
defer resp.Body.Close()
|
||||
|
||||
// Erneuter Request auf die ursprüngliche URL
|
||||
resp, err = client.Get(urlString)
|
||||
resp, err = client.Get(uri)
|
||||
if err != nil {
|
||||
fmt.Println("Error fetching URL after form submission:", err)
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Verarbeitung der erhaltenen Daten
|
||||
body, _ = io.ReadAll(resp.Body)
|
||||
xmlData := []byte(string(body)) // Ersetzen Sie [Ihr XML-Datenstring hier] mit Ihrem XML-String
|
||||
|
||||
var dataSet NewDataSet
|
||||
err = xml.Unmarshal(xmlData, &dataSet)
|
||||
if err != nil {
|
||||
fmt.Println("Error unmarshalling XML: ", err)
|
||||
if err := xml.NewDecoder(resp.Body).Decode(&dataSet); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
data := make(api.Rates, 0, len(dataSet.Prezzi))
|
||||
|
|
@ -186,17 +174,17 @@ func (t *Pun) getData(day time.Time) (api.Rates, error) {
|
|||
for _, p := range dataSet.Prezzi {
|
||||
date, err := time.Parse("20060102", p.Data)
|
||||
if err != nil {
|
||||
fmt.Println("Error parsing date: ", err)
|
||||
return nil, fmt.Errorf("parse date: %w", err)
|
||||
}
|
||||
|
||||
hour, err := strconv.Atoi(p.Ora)
|
||||
if err != nil {
|
||||
fmt.Println("Error parsing hour: ", err)
|
||||
return nil, fmt.Errorf("parse hour: %w", err)
|
||||
}
|
||||
|
||||
location, err := time.LoadLocation("Europe/Rome")
|
||||
if err != nil {
|
||||
fmt.Println("Error loading location: ", err)
|
||||
return nil, fmt.Errorf("load location: %w", err)
|
||||
}
|
||||
|
||||
start := time.Date(date.Year(), date.Month(), date.Day(), hour-1, 0, 0, 0, location)
|
||||
|
|
@ -205,7 +193,7 @@ func (t *Pun) getData(day time.Time) (api.Rates, error) {
|
|||
priceStr := strings.Replace(p.PUN, ",", ".", -1) // Ersetzen Sie Komma durch Punkt
|
||||
price, err := strconv.ParseFloat(priceStr, 64)
|
||||
if err != nil {
|
||||
fmt.Println("Error parsing price: ", err)
|
||||
return nil, fmt.Errorf("parse price: %w", err)
|
||||
}
|
||||
|
||||
ar := api.Rate{
|
||||
|
|
@ -220,11 +208,11 @@ func (t *Pun) getData(day time.Time) (api.Rates, error) {
|
|||
return data, nil
|
||||
}
|
||||
|
||||
func parseFormFields(body []byte) (url.Values, error) {
|
||||
formData := url.Values{}
|
||||
doc, err := html.Parse(strings.NewReader(string(body)))
|
||||
func parseFormFields(body io.Reader) (url.Values, error) {
|
||||
data := url.Values{}
|
||||
doc, err := html.Parse(body)
|
||||
if err != nil {
|
||||
return formData, err
|
||||
return data, err
|
||||
}
|
||||
var f func(*html.Node)
|
||||
f = func(n *html.Node) {
|
||||
|
|
@ -242,7 +230,7 @@ func parseFormFields(body []byte) (url.Values, error) {
|
|||
}
|
||||
}
|
||||
if inputType == "hidden" && inputName != "" {
|
||||
formData.Set(inputName, inputValue)
|
||||
data.Set(inputName, inputValue)
|
||||
}
|
||||
}
|
||||
for c := n.FirstChild; c != nil; c = c.NextSibling {
|
||||
|
|
@ -250,5 +238,5 @@ func parseFormFields(body []byte) (url.Values, error) {
|
|||
}
|
||||
}
|
||||
f(doc)
|
||||
return formData, nil
|
||||
return data, nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue