Exemplo n.º 1
0
        public ActionResult DeleteXml()
        {
            try
            {
                string fileName = Request.Form["FileName"];
                if (string.IsNullOrEmpty(fileName))
                {
                    throw new Exception("Invalid file name.");
                }

                string   path = RssFeedHelper.GetFilePath(fileName);
                FileInfo info = new FileInfo(path);
                if (!info.Exists)
                {
                    throw new HttpException(404, string.Format(@"The file ""{0}"" does not exists.", fileName));
                }
                info.Delete();
                SuccessNotification(string.Format(@"The file ""{0}"" has been deleted successfully.", fileName));
            }
            catch (Exception e)
            {
                ErrorNotification(e);
            }

            return(RedirectToConfiguration());
        }
Exemplo n.º 2
0
        public static void Create()
        {
            BaseScrapping bloomberght = new Bloomberght();

            try
            {
                while (true)
                {
                    Thread.Sleep(3000);

                    string latestNews = bloomberght.GetLatestUpdate();
                    if (RssFeedHelper.IsContentExists(latestNews) && !string.IsNullOrEmpty(latestNews))
                    {
                        RssFeedHelper.Save("ty-scrap-news", latestNews);
                    }

                    GC.Collect();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Create();
            }
        }
Exemplo n.º 3
0
        public ActionResult Configure(ConfigurationModel model)
        {
            DirectoryInfo info = new DirectoryInfo(RssFeedHelper.GetFilePath(""));

            Directory.CreateDirectory(info.FullName);
            model.Files = info.GetFiles("*.xml").OrderByDescending(p => p.CreationTime).ToArray();

            if (!ModelState.IsValid)
            {
                return(View("~/Plugins/AF.Nop.Plugins.RssFeed/Views/Configure.cshtml", model));
            }

            try
            {
                _rssFeedSettings.EnabledSchedule = model.EnabledSchedule;
                _rssFeedSettings.Locales.Clear();
                foreach (var m in model.Locales)
                {
                    _rssFeedSettings.Locales.Add(new RssFeedSettingLocale()
                    {
                        Title       = m.Title,
                        Link        = m.Link,
                        FileName    = m.FileName,
                        Description = m.Description,
                        LanguageId  = m.LanguageId
                    });
                }
                _rssFeedSettings.RebuildJson();

                _rssFeedSettings.EnabledSchedule = model.EnabledSchedule;
                _rssFeedSettings.TaskRunTime     = model.TaskRunTime;
                _rssFeedSettings.TaskCheckTime   = model.TaskCheckTime;

                var task = _scheduleTaskService.GetTaskById(_rssFeedSettings.TaskId);
                if (task == null)
                {
                    ErrorNotification("The schedualTaskId is corrupted. So, the plugin cannot be run in a schedule till this value is retrieved correctly.");
                }
                else
                {
                    task.Enabled = model.EnabledSchedule;
                    task.Seconds = model.TaskCheckTime;
                    _scheduleTaskService.UpdateTask(task);
                    _rssFeedSettings.TaskName = task.Name;
                }

                SuccessNotification(_localizationService.GetResource("Admin.Configuration.Updated"));
                _settingService.SaveSetting(_rssFeedSettings);
                _settingService.ClearCache();

                return(Configure());
            }
            catch (Exception ex)
            {
                ErrorNotification(ex);
                return(View("~/Plugins/AF.Nop.Plugins.RssFeed/Views/Configure.cshtml", model));
            }
        }
Exemplo n.º 4
0
        public void GeneratRssFeedFiles(IList <ProductVariant> products)
        {
            try
            {
                var rssFeeds = CreateRssFeeds(products);

                var path = RssFeedHelper.GetFilePath("");
                Directory.CreateDirectory(path);

                var xmlSettings = new XmlWriterSettings();
                xmlSettings.Indent   = true;
                xmlSettings.Encoding = Encoding.UTF8;

                foreach (var local in _rssFeedSettings.Locales)
                {
                    var    fileName    = Path.Combine(path, local.FileName);
                    string fileNameAll = Path.Combine(path, Path.GetFileNameWithoutExtension(local.FileName) + "-all." + Path.GetExtension(local.FileName));

                    var tt1      = DateTime.Now.Ticks;
                    var feedsAll = rssFeeds[local.LanguageId];
                    var feedsWithoutCallForPrice = new Rss20()
                    {
                        Version = feedsAll.Version,
                        Channel = new Rss20Channel()
                        {
                            Title       = feedsAll.Channel.Title,
                            Link        = feedsAll.Channel.Link,
                            Description = feedsAll.Channel.Description,
                            Items       = feedsAll.Channel.Items.Where(x => x.CallForPrice == false).ToList(),
                        },
                    };

                    XmlSerializer serializer = new XmlSerializer(typeof(Rss20));
                    var           ns         = new XmlSerializerNamespaces();
                    ns.Add("g", RssFeedHelper.GoogleNamespce);

                    using (var stream = XmlWriter.Create(fileNameAll, xmlSettings))
                    {
                        serializer.Serialize(stream, feedsAll, ns);
                        stream.Close();
                        _logger.Information($"RssFeed: the file {fileNameAll} has been saved");
                    }
                    using (var stream = XmlWriter.Create(fileName, xmlSettings))
                    {
                        serializer.Serialize(stream, feedsWithoutCallForPrice, ns);
                        stream.Close();
                        _logger.Information($"RssFeed: the file {fileName} has been saved");
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error("RssFeed: error occured in generating XML files", ex);
                throw;
            }
        }
Exemplo n.º 5
0
        public void Execute()
        {
            Session session = SessionHelper.GetSession(_messageEventArgs.Message.From.Id);

            if (session.InstructionId.Equals(NextInstruction.None))
            {
                return;
            }

            if (session.InstructionId.Equals(NextInstruction.AddRss))
            {
                if (RssHelper.IsRss(_messageEventArgs.Message.Text.Trim()))
                {
                    Response <RssEntity> Validation = _queryRssService.Get(_messageEventArgs.Message.From.Id, _messageEventArgs.Message.Text.Trim());
                    if (Validation.ResponseData == null)
                    {
                        session.InstructionId = NextInstruction.AddAlias;
                        _telegramBotClient.SendTextMessageAsync(_messageEventArgs.Message.Chat.Id, $"enter alias name for the rss.").GetAwaiter();
                        session.Payload = _messageEventArgs.Message.Text.Trim();
                    }
                    else
                    {
                        _telegramBotClient.SendTextMessageAsync(_messageEventArgs.Message.Chat.Id, "rss is already exist in list.").GetAwaiter();
                    }
                }
                else
                {
                    _telegramBotClient.SendTextMessageAsync(_messageEventArgs.Message.Chat.Id, "rss is not found. please enter valid url.").GetAwaiter();
                }
            }
            else if (session.InstructionId.Equals(NextInstruction.AddAlias))
            {
                Response <int> response = _commandRssService.Add(new RssEntity()
                {
                    Url = session.Payload, AliasName = _messageEventArgs.Message.Text.Trim(), UserId = _messageEventArgs.Message.From.Id
                });
                if (response.Type.Equals(ResponseType.Success))
                {
                    _telegramBotClient.SendTextMessageAsync(_messageEventArgs.Message.Chat.Id, "rss added to list").GetAwaiter();
                    session.InstructionId = NextInstruction.None;
                }
                else if (response.Type.Equals(ResponseType.AlreadyExist))
                {
                    _telegramBotClient.SendTextMessageAsync(_messageEventArgs.Message.Chat.Id, "alias name is already exist. please enter unique name").GetAwaiter();
                }
            }
            else if (session.InstructionId.Equals(NextInstruction.BugReport))
            {
                RssFeedHelper.SaveBugReport($"bug from {_messageEventArgs.Message.Chat.Id}", _messageEventArgs.Message.Text);
                _telegramBotClient.SendTextMessageAsync(_messageEventArgs.Message.Chat.Id, "thank you for your report.").GetAwaiter();
                session.InstructionId = NextInstruction.None;
            }
        }
Exemplo n.º 6
0
        public async Task <FeedItem> RefreshFeedItem(FeedItem feedItem)
        {
            try
            {
                if (feedItem != null)
                {
                    //get new episodes from saved URI in feedItem
                    var doc = await RssFeedHelper.GetXDocFromLinkAsync(feedItem.Link);

                    //update ImageLink and ImageFileName for FeedItem
                    var feedItemFromXDoc = FeedItemManager.GetFeedItemFromXDoc(doc, feedItem.Link);
                    feedItem.ImageLink     = feedItemFromXDoc.ImageLink; //new image on FeedItem for new episode
                    feedItem.ImageFileName = feedItemFromXDoc.ImageFileName;
                    feedItem.LastCheck     = DateTime.Now;               //save LastCheck
                    var result = await DataStore.SaveFeedItemAsync(feedItem);

                    if (result == 0)
                    {
                        Debug.WriteLine("Could Not update FeedItem with new LastCheck date");
                    }

                    //get new episodes from saved URI in feedItem
                    var episodes = RssEpisodeManager.GetRssEpisodesFromXDoc(doc, feedItem.Id.Value);

                    //save new episodes to database
                    result = await DataStore.AddEpisodesToFeed(episodes); //returns the number of items added

                    if (result == 0)
                    {
                        Debug.WriteLine("FeedItemManager.RefreshFeedItem Result from AddEpisodesToFeed was 0 ");
                    }

                    //check existing episodes for undownloaded images
                    var existingEpisodes = await DataStore.GetAllEpisodeItemsByFeedIdAsync((int)feedItem.Id);

                    foreach (var episode in existingEpisodes)
                    {
                        if (DownloadService.CanDownloadImage(episode))                  //check if image is already downloaded
                        {
                            await DownloadService.Instance.DownloadImageAsync(episode); //queue to download
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //could not refresh item
                Debug.WriteLine("FeedItemManager.RefreshFeedItem Error " + ex.Message);
            }
            return(feedItem);
        }
Exemplo n.º 7
0
 public ActionResult AddRss(string rssUrl)
 {
     try
     {
         if (ModelState.IsValid && rssUrl != null)
         {
             Response.Cookies["rssUrl"].Value = rssUrl;
             List <News> newsLIst = RssFeedHelper.ReadRssToNews(rssUrl, 1);
             db.Newses.AddRange(newsLIst);
             db.SaveChanges();
         }
         return(RedirectToAction("Index"));
     }
     catch
     {
         return(RedirectToAction("Index"));
     }
 }
Exemplo n.º 8
0
        public ActionResult DownloadXml(string fileName)
        {
            try
            {
                string   path = RssFeedHelper.GetFilePath(fileName);
                FileInfo info = new FileInfo(path);
                if (!info.Exists)
                {
                    throw new HttpException(404, string.Format(@"The file ""{0}"" does not exists.", fileName));
                }

                return(File(path, "text/xml", fileName));
            }
            catch (Exception xp)
            {
                ErrorNotification(xp);
                return(RedirectToConfiguration());
            }
        }
Exemplo n.º 9
0
        //******************************** Static Functions **************************************
        public static List <RssEpisode> GetRssEpisodesFromXDoc(XDocument doc, int feedItemId)
        {   //used in AddFeedItem and RefreshEpisodes
            var episodes = new List <RssEpisode>();

            try
            {
                foreach (var channel in doc.Descendants("channel"))
                {
                    foreach (var item in channel.Descendants("item"))
                    {
                        var imageLink       = RssFeedHelper.GetITunesImageUriFromXElement(item);
                        var imageFileName   = Path.GetFileName(imageLink);
                        var podcastLink     = RssFeedHelper.GetEnclosureUriFromXElement(item.Element("enclosure"));
                        var podcastFileName = Path.GetFileName(podcastLink);
                        var episode         = new RssEpisode
                        {
                            FeedItemId            = feedItemId,
                            Author                = RssFeedHelper.ConvertXElementToString(item.Element("author")),
                            Description           = RssFeedHelper.ConvertXElementToString(item.Element("description")),
                            PubDate               = RssFeedHelper.ConvertXElementToDateTime(item.Element("pubDate")),
                            Title                 = RssFeedHelper.ConvertXElementToString(item.Element("title")),
                            LinkUrl               = RssFeedHelper.ConvertXElementToString(item.Element("link")),
                            ImageLink             = imageLink,
                            ImageFileName         = imageFileName,
                            EnclosureLink         = podcastLink,
                            PodcastFileName       = podcastFileName,
                            IsDownloaded          = IsDownloadedEnum.NotDownloaded,
                            CurrentPosition       = 0,
                            Duration              = 0, //reset to correct size when downloaded
                            PodcastFileSize       = 0, //reset to correct size when downloaded
                            IsPlaying             = IsPlayingEnum.NotStarted,
                            PlayPauseDownloadIcon = IconFont.FileDownload
                        };
                        episodes.Add(episode);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("GetRssEpisodesFromXDoc Error " + ex.Message);
            }
            return(episodes);
        }
Exemplo n.º 10
0
        public static FeedItem GetFeedItemFromXDoc(XDocument doc, string uri)
        {
            var feedItem = new FeedItem();

            //populate feedItem
            foreach (var channel in doc.Descendants("channel"))
            {
                if (channel != null)
                {
                    var imageLink     = RssFeedHelper.GetImageUriFromXElement(channel.Element("image"));
                    var imageFileName = Path.GetFileName(imageLink);
                    feedItem.Text          = RssFeedHelper.ConvertXElementToString(channel.Element("title"));
                    feedItem.Description   = RssFeedHelper.ConvertXElementToString(channel.Element("description"));
                    feedItem.Link          = uri;
                    feedItem.ImageLink     = imageLink;
                    feedItem.ImageFileName = imageFileName;
                    feedItem.LastCheck     = DateTime.Now; //save LastCheck
                }
            }
            return(feedItem);
        }
Exemplo n.º 11
0
        public ActionResult Configure()
        {
            ConfigurationModel model = new ConfigurationModel();
            var defaultLanguage      = _languageService.GetAllLanguages().FirstOrDefault();

            model.TaskId          = _rssFeedSettings.TaskId;
            model.TaskName        = _rssFeedSettings.TaskName;
            model.TaskRunTime     = _rssFeedSettings.TaskRunTime;
            model.TaskCheckTime   = _rssFeedSettings.TaskCheckTime;
            model.LastRunTime     = _rssFeedSettings.LastRunTime;
            model.EnabledSchedule = _rssFeedSettings.EnabledSchedule;

            DirectoryInfo info = new DirectoryInfo(RssFeedHelper.GetFilePath(""));

            Directory.CreateDirectory(info.FullName);
            model.Files = info.GetFiles("*.xml").OrderByDescending(p => p.CreationTime).ToArray();

            _rssFeedSettings.RebuildList();
            AddLocales(_languageService, model.Locales);
            foreach (var m in model.Locales)
            {
                foreach (var s in _rssFeedSettings.Locales)
                {
                    if (m.LanguageId == s.LanguageId)
                    {
                        m.Link        = s.Link;
                        m.Title       = s.Title;
                        m.Description = s.Description;
                        m.FileName    = s.FileName;
                        break;
                    }
                }
            }

            return(View("~/Plugins/AF.Nop.Plugins.RssFeed/Views/Configure.cshtml", model));
        }
Exemplo n.º 12
0
        protected Dictionary <int, Rss20Item> CreateProductRssItems(ProductVariant productVariant, IList <RssFeedSettingLocale> locales)
        {
            decimal price, salePrice;
            string  imageUrl = null;
            var     product  = productVariant.Product;
            var     dic      = new Dictionary <int, Rss20Item>();


            var categories = _categoryService.GetProductCategoriesByProductId(product.Id).Select(x => x.Category).ToList();

            CalculateProductPrices(productVariant, StoreCurrency, out price, out salePrice);
            var brand   = product.ProductManufacturers.OrderBy(x => x.DisplayOrder).FirstOrDefault();
            var picture = product.GetDefaultProductPicture(_pictureService);

            if (picture != null)
            {
                imageUrl = _pictureService.GetPictureUrl(picture, _rssFeedSettings.ImageSize).Replace("https://", "http://");
            }

            foreach (var L in locales)
            {
                var lang = _languageService.GetLanguageById(L.LanguageId);;
                var item = new Rss20Item()
                {
                    ProductId      = product.Id,
                    Title          = product.GetLocalized(x => x.Name, lang.Id),
                    Description    = product.GetLocalized(x => x.FullDescription, lang.Id),
                    Price          = FormatPrice(price, StoreCurrency),
                    SalePrice      = FormatPrice(salePrice, StoreCurrency),
                    Link           = GetProductUrl(productVariant, lang, L.Link),
                    MPN            = productVariant.Sku,
                    Gtin           = productVariant.Sku,
                    Condition      = "new",
                    Image          = imageUrl,
                    Availability   = productVariant.StockQuantity > 0 ? "in stock" : "out of stock",
                    ExpirationDate = DateTime.Now.AddDays(29).ToString("yyyy-MM-dd"),
                    CallForPrice   = productVariant.CallForPrice,
                };

                item.ProductType.AddRange(GetCategorieBreadCrumbs(categories, lang));

                if (!string.IsNullOrEmpty(item.Description))
                {
                    item.Description = RssFeedHelper.HtmlToPlainText(item.Description);
                }

                if (brand != null)
                {
                    item.Brand = brand.Manufacturer.GetLocalized(x => x.Name, lang.Id);
                }

                dic[L.LanguageId] = item;
            }

            //CleanInvalidXmlChars(item.Title);
            //CleanInvalidXmlChars(item.MPN);
            //CleanInvalidXmlChars(item.Gtin);
            //CleanInvalidXmlChars(item.Brand);
            //CleanInvalidXmlChars(item.Description);

            return(dic);
        }
Exemplo n.º 13
0
        public async Task ExecuteNewFeedItemCommand()
        {
            IsBusy = true;

            try
            {
                var doc = await RssFeedHelper.GetXDocFromLinkAsync(Link);

                if (doc != null)
                {
                    var newFeedItem = FeedItemManager.GetFeedItemFromXDoc(doc, Link);
                    if (newFeedItem != null)
                    {
                        var successFeedImage = await FileHelper.DownloadImageFile(newFeedItem.ImageLink);

                        if (!successFeedImage)
                        {
                            Debug.WriteLine("Could not download feed image file " + newFeedItem.ImageLink);
                        }

                        var result = await DataStore.SaveFeedItemAsync(newFeedItem);

                        if (newFeedItem.Id != null)
                        {
                            //defensive programming, delete any existing records for this new FeedItem.Id
                            //this is because Ids get reused and not all the episodes in and Id might get deleted
                            try
                            {
                                result = await DataStore.DeleteAllEpisodesByFeedIdAsync(newFeedItem.Id); //don't care about the result
                            }
                            catch (Exception ex)
                            {
                                Debug.WriteLine("Info Error Deleting Episodes before adding new Feed Item " + ex.Message);
                            }
                            var episodeList = RssEpisodeManager.GetRssEpisodesFromXDoc(doc, newFeedItem.Id.Value); //get the episodes
                            result = await DataStore.SaveEpisodeListAsync(episodeList);                            //save the episodes

                            //get the images
                            var count         = 0;
                            var lastImageLink = "";
                            foreach (var episode in episodeList)
                            {
                                if (lastImageLink != episode.ImageLink)
                                {   //don't try to download when the image is the same from episode to episode
                                    lastImageLink = episode.ImageLink;
                                    await DownloadService.Instance.DownloadImageAsync(episode);
                                }
                                count++;
                                //if (count > 20) break; //only get 20, not like 1000
                            }
                            MessagingCenter.Send(newFeedItem, "AddFeedItem");
                        }
                        else
                        {
                            //newFeedItem.Id was null
                            Debug.WriteLine("newFeedItem.Id was null");
                        }
                    }
                    else
                    {
                        //newFeedItem was null
                        Debug.WriteLine("newFeedItem was null");
                    }
                }
                else
                {
                    //problem getting feed
                    await Application.Current.MainPage.DisplayAlert("Alert", "Could not get RSS Feed from Link", "OK");
                }
            }
            catch (Exception ex)
            {
                //could not delete item
                Debug.WriteLine("Could not Add Podcast Feed Item " + ex.Message);
            }
            finally
            {
                IsBusy = false;
            }
        }