You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

97 lines
2.2 KiB

package apiserver
import (
"encoding/json"
"fmt"
"gitea.fedy95.com/dev/news-aggregator-back/internal/app/store"
"github.com/gorilla/mux"
"github.com/mmcdole/gofeed"
"github.com/sirupsen/logrus"
"io/ioutil"
"net/http"
"time"
)
type APIServer struct {
logger *logrus.Logger
router *mux.Router
store *store.Store
}
func New() *APIServer {
return &APIServer{
logger: logrus.New(),
router: mux.NewRouter(),
}
}
func (srv *APIServer) Start() error {
if err := srv.configureLogger(); err != nil {
return err
}
srv.configureRouter()
srv.logger.Info("starting apiserver")
return http.ListenAndServe(":7070", srv.router) //TODO mv to env
}
func (srv *APIServer) configureLogger() error {
level, err := logrus.ParseLevel("debug") //TODO mv to env
if err != nil {
return err
}
srv.logger.SetLevel(level)
return nil
}
func (srv *APIServer) configureRouter() {
srv.router.HandleFunc("/test", srv.handlerTest())
}
func (srv *APIServer) handlerTest() http.HandlerFunc {
return func(writer http.ResponseWriter, request *http.Request) {
var rssSources [5]string
rssSources[0] = "https://www.opennet.ru/opennews/opennews_all_utf.rss"
rssSources[1] = "http://feeds.rucast.net/radio-t"
rssSources[2] = "http://habr.ru/rss/hubs/all"
rssSources[3] = "https://servernews.ru/news/rss"
rssSources[4] = "https://servernews.ru/rss"
writer.Header().Set("Content-Type", "text/html; charset=utf-8")
currentTime := time.Now()
for _, rssElement := range rssSources {
fp := gofeed.NewParser()
feed, _ := fp.ParseURL(rssElement)
file, _ := json.MarshalIndent(feed, "", " ")
var filename string
filename = fmt.Sprintf("data/%s_%s", currentTime.Format("2006.01.02 15:04:05"), feed.Title)
srv.logger.Info(fmt.Sprintf("write filename %s", filename))
ioutil.WriteFile(filename, file, 0644)
fmt.Fprintf(writer, "<h3>%s</h3><ul>\n", filename)
for _, element := range feed.Items {
fmt.Fprintf(writer, "<li><a href=\"%s\">%s</a></li>\n", element.Link, element.Title)
}
fmt.Fprintf(writer, "</ul>\n")
}
}
}
//func (srv *APIServer) configureStore() error {
// st := store.New(srv.config.Store)
// if err = st.Open(); err != nil {
// return err
// }
//
// srv.store = st
//
// return nil
//}