package newsbuilder import ( "encoding/json" "fmt" "io/ioutil" "time" "github.com/google/uuid" "github.com/yosssi/gohtml" newsfeed "github.com/go-i2p/newsgo/builder/feed" ) type NewsBuilder struct { Feed newsfeed.Feed ReleasesJson string BlocklistXML string URNID string TITLE string SITEURL string MAINFEED string BACKUPFEED string SUBTITLE string } func (nb *NewsBuilder) JSONtoXML() (string, error) { content, err := ioutil.ReadFile(nb.ReleasesJson) if err != nil { return "", err } // Now let's unmarshall the data into `payload` var payload []map[string]interface{} err = json.Unmarshal(content, &payload) if err != nil { return "", err } str := "" /* 2.0.0 */ releasedate := payload[0]["date"] version := payload[0]["version"] minVersion := payload[0]["minVersion"] minJavaVersion := payload[0]["minJavaVersion"] updates := payload[0]["updates"].(map[string]interface{})["su3"].(map[string]interface{}) magnet := updates["torrent"] urls := updates["url"].([]interface{}) str += "\n" str += "" + version.(string) + "" str += "" str += "" for _, u := range urls { str += "" } str += "" str += "" return str, nil } func (nb *NewsBuilder) Build() (string, error) { if err := nb.Feed.LoadHTML(); err != nil { return "", fmt.Errorf("Build: error %s", err.Error()) } current_time := time.Now() str := "" str += "" str += "" + "urn:uuid:" + nb.URNID + "" str += "" + nb.TITLE + "" milli := current_time.Nanosecond() / 1000 t := fmt.Sprintf("%d-%02d-%02dT%02d:%02d:%02d.%02d+00:00\n", current_time.Year(), current_time.Month(), current_time.Day(), current_time.Hour(), current_time.Minute(), current_time.Second(), milli) str += "" + t + "" str += "" str += "" if nb.BACKUPFEED != "" { str += "" } str += "newsgo" str += "" + nb.SUBTITLE + "" blocklistBytes, err := ioutil.ReadFile(nb.BlocklistXML) if err != nil { return "", err } str += string(blocklistBytes) jsonxml, err := nb.JSONtoXML() if err != nil { return "", err } str += jsonxml for index, _ := range nb.Feed.ArticlesSet { art := nb.Feed.Article(index) str += art.Entry() } str += "" return gohtml.Format(str), nil } func Builder(newsFile, releasesJson, blocklistXML string) *NewsBuilder { nb := &NewsBuilder{ Feed: newsfeed.Feed{ EntriesHTMLPath: newsFile, }, ReleasesJson: releasesJson, BlocklistXML: blocklistXML, URNID: uuid.New().String(), TITLE: "I2P News", SITEURL: "http://i2p-projekt.i2p", MAINFEED: "http://tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq.b32.i2p/news.atom.xml", BACKUPFEED: "http://dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka.b32.i2p/news/news.atom.xml", SUBTITLE: "News feed, and router updates", } return nb }