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
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
|
|
//}
|