main.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "os"
  7. "time"
  8. "github.com/umputun/rss2twitter/app/publisher"
  9. "github.com/hashicorp/logutils"
  10. "github.com/jessevdk/go-flags"
  11. "github.com/umputun/rss2twitter/app/rss"
  12. )
  13. var opts struct {
  14. Refresh time.Duration `short:"r" long:"refresh" env:"REFRESH" default:"30" description:"refresh interval"`
  15. TimeOut time.Duration `short:"t" long:"timeout" env:"TIMEOUT" default:"5" description:"twitter timeout"`
  16. Feed string `short:"f" long:"feed" env:"FEED" default:"" description:"rss feed url"`
  17. ConsumerKey string `long:"consumer-key" env:"CONSUMER_KEY" default:"" description:"twitter consumer key"`
  18. ConsumerSecret string `long:"consumer-secret" env:"CONSUMER_SECRET" default:"" description:"twitter consumer secret"`
  19. AccessToken string `long:"access-token" env:"ACCESS_TOKEN" default:"" description:"twitter access token"`
  20. AccessSecret string `long:"access-secret" env:"ACCESS_SECRET" default:"" description:"twitter access secret"`
  21. Dbg bool `long:"dbg" env:"DEBUG" description:"debug mode"`
  22. }
  23. var revision = "unknown"
  24. func main() {
  25. fmt.Printf("RSS2TWITTER - %s", revision)
  26. if _, err := flags.Parse(&opts); err != nil {
  27. os.Exit(1)
  28. }
  29. setupLog(opts.Dbg)
  30. notifier := rss.New(context.Background(), opts.Feed, opts.Refresh)
  31. pub := publisher.Twitter{
  32. ConsumerKey: opts.ConsumerKey,
  33. ConsumerSecret: opts.ConsumerSecret,
  34. AccessToken: opts.AccessToken,
  35. AccessSecret: opts.AccessSecret,
  36. }
  37. for event := range notifier.Go() {
  38. pub.Publish(event, func(r rss.Event) string {
  39. return fmt.Sprintf("%s - %s", r.Title, r.Link)
  40. })
  41. }
  42. }
  43. func setupLog(dbg bool) {
  44. filter := &logutils.LevelFilter{
  45. Levels: []logutils.LogLevel{"DEBUG", "INFO", "WARN", "ERROR"},
  46. MinLevel: logutils.LogLevel("INFO"),
  47. Writer: os.Stdout,
  48. }
  49. log.SetFlags(log.Ldate | log.Ltime)
  50. if dbg {
  51. log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Lshortfile)
  52. filter.MinLevel = logutils.LogLevel("DEBUG")
  53. }
  54. log.SetOutput(filter)
  55. }