示例#1
0
    /// <summary>
    /// databind function of listview is called from this function.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
        // See if feed data is in the cache
        IEnumerable <SyndicationItem> items = Cache["Feeds"] as IEnumerable <SyndicationItem>;

        if (items == null)
        {
            // If not present in cache then get it from sender's website
            try
            {
                SyndicationFeed sfFeed = SyndicationFeed.Load(XmlReader.Create("FEED URL OF senders website"));

                // every website has a static url which contains their feed and we can get the feed from that url.
                items = sfFeed.Items;
            }
            catch
            {
                items = new List <SyndicationItem>();
            }
            // Add the items to the cache
            Cache.Insert("Feeds", items, null, DateTime.Now.AddHours(1.0), TimeSpan.Zero);
        }
        // Creating the datatable to bind it to the listview. This datatable will contain all the feeds from the senders website.
        DataTable dtItems = new DataTable();

        dtItems.Columns.Add("Title", typeof(string));
        dtItems.Columns.Add("Link", typeof(string));
        foreach (SyndicationItem synItem in items)
        {
            dtItems.Rows.Add(synItem.Title.Text, synItem.Links[0].Uri.ToString());
        }
        FeedList.DataSource = dtItems;
        FeedList.DataBind();
    }
示例#2
0
        async Task asyAll4Steps()
        {
            try
            {
                DF             = FC = DC = AG = Brushes.LightGray;
                MUProgressPerc = 0; MUProgressState = TaskbarItemProgressState.Normal;

                //Bpr.BeepFDNK(2000, 100, 20);
#if DEBUG_THIS
                Bpr.BeepDone();
                await asy4AnonsGenr();
#else
                await asy1UpdtFeeds();
                await asy2FindNewDL();

                onDbSave();
                await asy3UpdtDnLds();

                onDbSave();
                await asy4AnonsGenr();
                await asy2FindNewDL(FeedList.Where(r => !r.IsDeleted).ToList());

                onDbSave(null);
#endif

                RecentCmd.Execute(null);
            }
            finally
            {
                MUProgressPerc = 1; MUProgressState = TaskbarItemProgressState.Paused;
                Bpr.BeepDone();
            }
        }
示例#3
0
        async Task asy1UpdtFeeds(List <Feed> feeds = null)
        {
            MUProgressPerc += .06; MUProgressState = TaskbarItemProgressState.Normal;

            if (feeds == null)
            {
                feeds = FeedList.ToList();
            }

            //todo: var feeds2 = FeedList.Select(r => r);

            _crlnTS = DateTime.Now;
            _sw     = Stopwatch.StartNew();
            DF      = Brushes.Blue;

            _cts = new CancellationTokenSource();
            try
            {
                Appender = "F1. Updating Feeds ... ";
                await asyUpdtFeedsCT(_cts.Token, feeds); //////////////////////////////////////////////////////////////////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

                Appender += "complete. \r\n";            //        InfoMsg += DbSaveLib.TrySaveReport(db) + "  Updating Feeds ... complete.";

                _cts            = null;
                IsBusy          = false;
                DF              = Brushes.LightGreen;
                MUProgressPerc += .1; MUProgressState = TaskbarItemProgressState.Paused;
            }
            catch (OperationCanceledException ex) { ex.Log(); Appender += "\r\nDownloads canceled.\r\n"; DF = Brushes.Violet; }
            catch (Exception ex) { ex.Log(); Appender += "\r\nDownloads failed.\r\n" + ex.ToString(); DF = Brushes.Violet; }
        }
示例#4
0
        public async Task <ActionResult> Index(int?page)
        {
            List <RootObject> FeedList;
            ApiHelper         apihelper = new ApiHelper();

            if (storedlist == null)
            {
                FeedList = await apihelper.GetAPIData("", "", "");

                storedlist = FeedList;
            }
            else
            {
                FeedList = storedlist;
            }
            var FeedCount = FeedList.Count();

            ViewBag.PageCount  = FeedCount / 100;
            ViewBag.Pageno     = page;
            ViewBag.FeedsCount = FeedCount;
            int pageindex = 1;

            pageindex = page.HasValue ? Convert.ToInt32(page) : 1;
            List <RootObject> feedlist = new List <RootObject>();
            var test = FeedList.ToPagedList(pageindex, 10);



            return(View(test));
        }
示例#5
0
 private Task ExtractFeedListFromXmlAsync(string responseString, FeedList feedList)
 {
     return(Task.Run(() =>
     {
         XDocument doc = XDocument.Parse(responseString);
         var channel = doc.Root?.Descendants()
                       .First(i => i.Name.LocalName == "channel")
                       .Elements().ToList();
         //extract feed items
         var feedItems = channel
                         .Where(i => i.Name.LocalName == "item")
                         .Select(item => new FeedItem
         {
             Description = item.Elements().First(i => i.Name.LocalName == "description").Value,
             Content = item.Elements().First(i => i.Name.ToString().Contains("content")).Value,
             Link = item.Elements().First(i => i.Name.LocalName == "link").Value,
             PublishDate = this.ParseDate(item.Elements().First(i => i.Name.LocalName == "pubDate").Value),
             Title = item.Elements().First(i => i.Name.LocalName == "title").Value
         });
         feedList.Items = feedItems.ToList();
         feedList.Title = channel.FirstOrDefault(i => i.Name.LocalName == "title")?.Value;
         feedList.Link = channel.FirstOrDefault(i => i.Name.LocalName == "link" && !i.IsEmpty)?.Value;
         feedList.Description = channel.FirstOrDefault(i => i.Name.LocalName == "description")?.Value;
         var dtString = channel.FirstOrDefault(i => i.Name.LocalName == "lastBuildDate")?.Value;
         feedList.PublishDate = this.ParseDate(dtString);
     }));
 }
 /// <summary>
 /// Create a new ItemDescriptionView connected to <paramref name="listView"/>.
 /// </summary>
 /// <param name="listView"></param>
 public ItemDescriptionView(FeedList feeds)
 {
     this.feeds        = feeds;
     fadeTimer         = new Timer();
     fadeTimer.Tick   += new EventHandler(fadeTimer_Tick);
     fadeTimer.Enabled = true;
     fadeTimer.Start();
 }
        public IActionResult Get(int id)
        {
            FeedList feedList = db.UrlsList.FirstOrDefault(x => x.Id == id);

            if (feedList == null)
            {
                return(NotFound());
            }
            return(new ObjectResult(feedList));
        }
        public FeedListView(string title, FeedList feeds)
        {
            if (feeds == null)
            {
                throw new ArgumentNullException("feeds");
            }

            this.feeds = feeds;
            this.title = title;
        }
示例#9
0
        public void save(Kategorier kategorier, FeedList feedList)
        {
            var xmlFeed = new System.Xml.Serialization.XmlSerializer(typeof(FeedList));

            saveOpen.saveXML(feedList, xmlFeed, false);

            var xmlCategory = new System.Xml.Serialization.XmlSerializer(typeof(Kategorier));

            saveOpen.saveXML(kategorier, xmlCategory, true);
        }
示例#10
0
 public void AddFeed(Feed feed)
 {
     if (feed != null)
     {
         if (!FeedList.Contains(feed))
         {
             UrlList.Add(feed.Link);
             FeedList.Add(feed);
         }
     }
 }
        public IActionResult Delete(int id)
        {
            FeedList url = db.UrlsList.FirstOrDefault(x => x.Id == id);

            if (url == null)
            {
                return(NotFound());
            }
            db.UrlsList.Remove(url);
            db.SaveChanges();
            return(Ok(url));
        }
        public IActionResult Put([FromBody] FeedList url)
        {
            if (url == null)
            {
                return(BadRequest());
            }
            if (!db.UrlsList.Any(x => x.Id == url.Id))
            {
                return(NotFound());
            }

            db.Update(url);
            db.SaveChanges();
            return(Ok(url));
        }
示例#13
0
        protected void Page_Load(object sender, EventArgs e)
        {
            var feeds = CurrentBlog.SyndicationFeeds;

            if (feeds == null || feeds.Count() == 0)
            {
                this.Visible = false;
                return;
            }

            if (FeedList != null)
            {
                FeedList.DataSource = feeds;
                FeedList.DataBind();
            }
        }
示例#14
0
        private static FeedList FeedListParser(string json)
        {
            JObject jsonObj = JsonConvert.DeserializeObject <JObject>(json);

            FeedList feeds = new FeedList();

            object[] feedsData = ((JArray)jsonObj["feeds"]).ToObject <object[]>();

            foreach (JObject feed in feedsData)
            {
                feeds.Feeds.Add(feed.ToObject <Dictionary <string, object> >());
            }

            feeds.Status = jsonObj["status"].ToObject <string>();

            return(feeds);
        }
        public IActionResult Post([FromBody] FeedList url)
        {
            if (url == null)
            {
                ModelState.AddModelError("", "Не указан адрес ресурса");
                return(BadRequest(ModelState));
            }
            // если есть ошибки - возвращаем ошибку 400
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // если ошибок нет, сохраняем в базу данных
            db.UrlsList.Add(url);
            db.SaveChanges();
            return(Ok(url));
        }
示例#16
0
        async Task asy3UpdtDnLds()
        {
            MUProgressPerc += .06; MUProgressState = TaskbarItemProgressState.Normal;
            _sw             = Stopwatch.StartNew();
            _crlnTS         = DateTime.Now;
            DC              = Brushes.Blue;
            _cts            = new CancellationTokenSource();
            try
            {
                Appender += $"F3. Downloading {FeedList.Sum(r => r.NewCastCount)} new casts ... ";
                await asyUpdtDnLdsCT(_cts.Token); //////////////////////////////////////////////////////////////////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

                Appender += "done. ";

                SelectFeed = null; // <== show dnld list.

                _cts   = null;
                IsBusy = false;
                DC     = Brushes.LightGreen;
            }
            catch (OperationCanceledException ex) { ex.Log(); Appender += "\r\nDownloads canceled.\r\n"; DC = Brushes.Violet; }
            catch (Exception ex) { ex.Log(); Appender += "\r\nDownloads failed.\r\n" + ex.ToString(); DC = Brushes.Violet; }
            MUProgressPerc += .09; MUProgressState = TaskbarItemProgressState.Paused;
        }
示例#17
0
    private void ShowFeeds()
    {
        try
        {
            string url   = State.Element("url").Value;
            int    count = State.Element("count") == null ? 3 : int.Parse(State.Element("count").Value);

            var rss = default(XElement);
            if (Services.Get <ICache>().Contains(this.Url))
            {
                string cachedXml = Services.Get <ICache>().Get(this.Url) as string;
                rss = XElement.Parse(cachedXml);
            }
            else
            {
                rss = XElement.Load(this.Url);
                Services.Get <ICache>().Add(this.Url, rss.Xml());
            }

            if (null == rss)
            {
                Message.Text    = "There was a problem loading the feed";
                Message.Visible = true;
            }
            else
            {
                FeedList.DataSource = RssHelper.ConvertXmlToRss(rss, count);
                FeedList.DataBind();
            }
        }
        catch
        {
        }

        //Cache[url] = feed;
    }
示例#18
0
        async Task asy2FindNewDL(List <Feed> feedsParam = null)
        {
            MUProgressPerc += .06; MUProgressState = TaskbarItemProgressState.Normal;

            var feeds = feedsParam ?? FeedList.Where(r => r.RunTimeNote.StartsWith(__new)).ToList();  //var lst = FeedList.Where(r => r.Name == "CBC Ideas "); //.RunTimeNote.StartsWith(__new));

            Max2 = feeds.Sum(r => r.DnLds.Where(d => d.IsStillOnline == true).Count());

            try
            {
                FC = Brushes.Blue;

                Appender += $"F2. Checking {feeds.Count}{(feedsParam == null ? " NEW" : " ALL")} feeds for new casts ... ";

#if !AwaitNotWorking
                await Task.Delay(3);

                foreach (var feed in feeds.ToList())
                {
                    try
                    {
                        Debug.WriteLine(feed.Name);
                        var ri = RssHelper.FindNewCasts(feed)?.RssDnldInfos;
                        Debug.WriteLine("~> {0,-32}   {1,5} casts found in RSS", feed.Name, ri.Count);
                        await addUPdate_SetIdrFlag(feed, ri);

                        //Val2++;
                    }
                    catch (Exception ex) { ex.Log(); feed.RunTimeNote = ex.Message; FC = Brushes.Violet; }
                }

                //WARNING!!! This one does not AWAIT!!! ->lst.ToList().ForEach(async feed => { try { await addUPdate_SetIdrFlag(feed, RssHelper.FindNewCasts(feed).RssDnldInfos); } catch (Exception ex) { ex.Log(); feed.RunTimeNote = ex.Message; FC = Brushes.Violet; } });

                Appender += $"done.  ({Val2} / {Max2} / {feeds.Sum(r => r.DnLds.Where(d => d.IsStillOnline == true).Count())})"; //saving must be donw only after dnldg finished otherwise there will be omissions from F2Same case:        InfoMsg += DbSaveLib.TrySaveReport(_db, "Db-saving new found casts done. \r\n");

                //recursive calling itwself: onChgdSelectFeed1();

                if (feeds.Count == 1)
                {
                    reload1(feeds[0]);
                }
                else
                {
                    reloadActiveRecentDnlds();
                }

                FC = Brushes.LightGreen;
#else
                var t = Task.Run(() => FeedList.ToList().ForEach(feed =>
                {
                    try { addUPdate_SetIdrFlag(feed, RssHelper.FindNewCasts(feed).RssDnldInfos); }
                    catch (Exception ex) { ex.Log(); feed.RunTimeNote = ex.Message; FC = Brushes.Violet; }
                }));

                await t.ContinueWith(_ =>
                {
                    InfoMsg += DbSaveLib.TrySaveReport(_db, "Db-Saving new casts");

                    FC = Brushes.LightGreen;
                }, TaskScheduler.FromCurrentSynchronizationContext());

                InfoMsg += "\r\nWaiting ...";

                t.Wait();
#endif
            }
            catch (Exception ex) { ex.Log(); Appender += "\r\nasy2FindNewDL() failed.\r\n" + ex.ToString(); FC = Brushes.Violet; }
            MUProgressPerc += .09; MUProgressState = TaskbarItemProgressState.Paused;
        }
示例#19
0
        public void ScrapeEventFinder(Feed specificFeed)
        {
            FeedList feeds;

            if (specificFeed == null)
            {
                feeds = FeedList.LoadByFeedType("Eventfinder").ToList();
            }
            else
            {
                feeds = new FeedList();
                feeds.Add(specificFeed);
            }

            var runResult    = "";
            var feedIsActive = true;

            foreach (var feed in feeds)
            {
                try {
                    string    username = "******";
                    string    password = "******";
                    WebClient wc       = new WebClient();
                    wc.Credentials = new NetworkCredential(username, password);
                    string url = "http://api.eventfinder.co.nz/v2/events.json?rows=20";
                    url += "&fields=event:(id,url,name,description~200,datetime_summary,point,location_summary,address,username,images),images:(image),image:(transforms),transforms:(transform),transform:(url,width)";
                    //url += "&order=popularity";
                    //url += "&created_since=" + Fmt.DateISO(DateTime.UtcNow.Date);
                    //url += "&end_date=" + Fmt.DateISO(DateTime.UtcNow.Date.AddDays(14));
                    //url += "&point=-36.796581,174.777978&radius=100";
                    url += "&point=" + feed.Latitude + "," + feed.Longitude + "&radius=" + feed.Radius;
                    //url += "&free=1";
                    var jsonString = wc.DownloadString(url);
                    //Web.WriteLine(jsonString);
                    //string currentUserToken = "52e0eaf6e4b07e1b6390a5dc";  //mikes

                    dynamic json = JsonHelper.Parse(jsonString);

                    foreach (var obj in json.events)
                    {
                        var uniqueStringValue = "eventfinda:" + obj.id;
                        var story             = FeedStory.LoadByUniqueString(uniqueStringValue);

                        if (story == null)
                        {
                            string currentUserName = obj.username + " via Eventfinder";
                            var    shortUrl        = UrlShortenerController.UrlShortener.Create(obj.url, currentUserName, true);

                            string message = ((String)obj.name).StripTags() + " " + obj.datetime_summary + ". " + ((String)obj.description).StripTags();
                            message = (message.Length > 130 ? Fmt.TruncHTML(message, 130) + "..." : message) + " #events " + shortUrl;
                            //var imageUrl = node.ElementValue("enclosure");
                            story = new FeedStory();
                            story.UniqueString = uniqueStringValue;
                            //story.Title = node.ElementValue("title");
                            story.ImageUrl        = GetImage(obj);
                            story.Message         = message;
                            story.OriginalLinkUrl = obj.url;
                            //story.DateAdded = node.ElementValue("pub-date").ConvertToDate(DateTime.Now);
                            story.Status          = "new";
                            story.AuthorName      = currentUserName;
                            story.FeedID          = feed.FeedID;
                            story.ProfileImageUrl = "https://pbs.twimg.com/profile_images/2461203629/2kvvznykuqzo46kj6kec_normal.jpeg";
                            story.Latitude        = (decimal)obj.point.lat;
                            story.Longitude       = (decimal)obj.point.lng;
                            story.Priority        = feed.DefaultPriority;
                            story.Save();
                            story.ApplyFilters();

                            Web.Write("<p><strong>Added new event as feed story (Feed ID: " + feed.FeedID + ")</strong></p><p>" + message + "</p><hr/>");
                        }
                    }

                    runResult = "Success";
                } catch (Exception ex) {
                    Web.Write("<p><strong style='color:red'>Error! Event Finder Feed ID: " + feed.FeedID + "</strong></p><p>" + ex.Message + "</p><hr/>");
                    runResult = ex.Message;
                    //SendFeedErrorEmail(feed, ex);
                    //feedIsActive = false;
                } finally {
                    feed.LastResult      = runResult;
                    feed.LastTimeRunning = DateTime.Now;
                    feed.IsActive        = feedIsActive;
                    feed.Save();
                }
            }
        }
 public ItemListView(FeedList feeds)
 {
     this.feeds = feeds;
 }
示例#21
0
        public void ScrapeRss(Feed specificFeed)
        {
            FeedList feeds;

            if (specificFeed == null)
            {
                feeds = FeedList.LoadByFeedType("RSS").Where(f => f.IsActive).ToList();
            }
            else
            {
                feeds = new FeedList();
                feeds.Add(specificFeed);
            }

            var runResult    = "";
            var xmlString    = "";
            var feedIsActive = true;

            foreach (var feed in feeds)
            {
                try {
                    string url = feed.FeedUrl;
                    xmlString = Http.Get(url);
                    //Web.WriteLine(xmlString);
                    //string profileImageUrl = "https://pbs.twimg.com/profile_images/2461203629/2kvvznykuqzo46kj6kec_normal.jpeg";
                    //string currentUserToken = "52e0eaf6e4b07e1b6390a5dc";  //mikes

                    var xml = bwbXml.Parse(xmlString);
                    foreach (var node in xml.Descendants("item"))
                    {
                        var uniqueStringValue = "rss:" + Crypto.CreateHash(node.ElementValue("guid") ?? node.ElementValue("link"));
                        var story             = FeedStory.LoadByUniqueString(uniqueStringValue);

                        if (story == null)
                        {
                            string link = node.ElementValue("link");

                            if (String.IsNullOrEmpty(link))
                            {
                                link = ExtractUrlFromHTML(node.ElementValue("description"));
                            }

                            var shortUrl = "";

                            if (!String.IsNullOrEmpty(link))
                            {
                                shortUrl = UrlShortenerController.UrlShortener.Create(link, "RSS Feed", true);
                            }

                            //string message = Fmt.TruncHTML(node.ElementValue("title").StripTags() + ". " + node.ElementValue("description").StripTags(), 130) + " " + shortUrl;

                            string message = node.ElementValue("title").StripTags() + ". " + node.ElementValue("description").StripTags();
                            message = (message.Length > 130 ? Fmt.TruncHTML(message, 130) + "..." : message) + " " + shortUrl;

                            //var imageUrl = node.ElementValue("enclosure");
                            story = new FeedStory();
                            story.UniqueString    = uniqueStringValue;
                            story.Title           = node.ElementValue("title");
                            story.Message         = message;
                            story.OriginalLinkUrl = node.ElementValue("link");
                            story.DateAdded       = node.ElementValue("pub-date").ConvertToDate(DateTime.Now);
                            story.Status          = "new";
                            story.AuthorName      = feed.Author.Name + (feed.Author.Via.IsNotBlank() ? " via " + feed.Author.Via : "");
                            story.FeedID          = feed.FeedID;
                            story.ProfileImageUrl = feed.Author.ProfilePicUrl;
                            story.Priority        = feed.DefaultPriority;
                            story.Save();
                            story.ApplyFilters();

                            // If it didn't match any filter and it's still null, get from the feed
                            if (story.Latitude == null || story.Longitude == null)
                            {
                                story.Latitude  = feed.Latitude;
                                story.Longitude = feed.Longitude;
                                story.Save();
                            }

                            Web.Write("<p><strong>Added new item as feed story (RSS Feed ID: " + feed.FeedID + ")</strong></p><p>" + message + "</p><hr/>");
                        }
                    }

                    runResult = "Success";
                } catch (Exception ex) {
                    Web.Write("<p><strong style='color:red'>Error! RSS Feed ID: " + feed.FeedID + "</strong></p><p>" + ex.Message + "</p><hr/>");
                    runResult = ex.Message;
                    //SendFeedErrorEmail(feed, ex);
                    //feedIsActive = false;
                    //SendEMail.SimpleSendHtmlEmail("*****@*****.**", "Herepin Feed error", "RSS Feed ID: " + feed.FeedID + "<br>"+ex.Message+"<br><br>" + xmlString);
                } finally {
                    feed.LastResult      = runResult;
                    feed.LastTimeRunning = DateTime.Now;
                    feed.IsActive        = feedIsActive;
                    feed.Save();
                }
            }
        }
示例#22
0
 public FeedsCfg()
 {
     Feeds = new FeedList();
 }
示例#23
0
        private void ListWallCallback()
        {
            if (_wl != null) { return; }
            _wl = new FeedList();
            var web = (HttpWebRequest)WebRequest.Create(string.Format("https://api.vk.com/method/wall.get?owner_id={0}&count=20&access_token={1}", _uid, Client.Instance.Access_token.token));
            web.Method = "POST";
            web.ContentType = "application/x-www-form-urlencoded";
            web.BeginGetResponse(delegate(IAsyncResult e)
            {
                var request = (HttpWebRequest)e.AsyncState;
                var response = (HttpWebResponse)request.EndGetResponse(e);
                var responseReader = new StreamReader(response.GetResponseStream());
                var responseString = responseReader.ReadToEnd();

                try
                {
                    var o = JObject.Parse(responseString);
                    var responseFeeds = (JArray)o["response"];
                    for (int i = 1; i < responseFeeds.Count; i++)
                    {
                        var text = (string)responseFeeds[i]["text"];
                        var attachments = responseFeeds[i].SelectToken("attachments", false);
                        if (text.Length > 100)
                        {
                            text = text.Substring(0, 100);
                        }
                        var wallItem = new FeedItem
                        {
                            Date = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(Convert.ToDouble((int)responseFeeds[i]["date"])),
                            Text = text + "...",
                            Uid = (int)responseFeeds[i]["from_id"],
                            PostId = (int)responseFeeds[i]["id"],
                            CntComments = "комментариев: " + (int)responseFeeds[i]["comments"]["count"]
                        };
                        if ((string)responseFeeds[i]["post_source"]["data"] == "profile_photo")
                        {
                            wallItem.Text = "обновил(а) фотографию на странице";
                        }
                        else if (attachments != null)
                        {
                            wallItem.Text = wallItem.Text + "\n + " + attachments.Count() + " файл.";
                        }
                        _wl.Add(wallItem);
                        _uidlist.Add((int)responseFeeds[i]["from_id"]);

                    }
                    Dispatcher.BeginInvoke(ListProfileWallCallback);

                }
                catch (Exception exception)
                {
                    Dispatcher.BeginInvoke(() =>
                    {
                        MessageBox.Show(exception.Message);
                        if (!progressBar1.IsIndeterminate) return;
                        progressBar1.IsIndeterminate = false;
                    });
                }
            }, web);
            if (progressBar1.IsIndeterminate == false)
            {
                progressBar1.IsIndeterminate = true;
            }
        }
示例#24
0
        public void ScrapeTwitter(Feed specificFeed)
        {
            var consumerKey    = Util.GetSetting("TwitterOAuthConsumerKey", "");
            var consumerSecret = Util.GetSetting("TwitterOAuthConsumerSecret", "");

            FeedList feeds;

            if (specificFeed == null)
            {
                feeds = FeedList.LoadByFeedType("Twitter").Where(f => f.IsActive).ToList();
            }
            else
            {
                feeds = new FeedList();
                feeds.Add(specificFeed);
            }

            var    twitter      = new TwitterAPI(consumerKey, consumerSecret);
            var    runResult    = "";
            var    feedIsActive = true;
            string jsonString   = "";

            foreach (var feed in feeds)
            {
                try {
                    jsonString = twitter.GetJson(feed.FeedUrl);
                    Web.Write("<br><br><br>" + jsonString);
                    dynamic json = JsonHelper.Parse(jsonString);
                    dynamic tweets;
                    if (jsonString.Trim().StartsWith("["))
                    {
                        // json format is an array of tweets
                        tweets = json;
                    }
                    else
                    {
                        // json format is an object containing a list of tweets as 'statuses' property
                        tweets = json.statuses;
                    }

                    const string twitterDateTimeFormat = "ddd MMM dd HH:mm:ss zzzz yyyy";

                    foreach (var tweet in tweets)
                    {
                        var createdAt = DateTime.ParseExact(tweet.created_at, twitterDateTimeFormat, CultureInfo.InvariantCulture);
                        if (createdAt < DateTime.Now.AddDays(-1))
                        {
                            continue;
                        }

                        var uniqueStringValue = "twitter:" + tweet.id_str;

                        var story = FeedStory.LoadByUniqueString(uniqueStringValue);

                        if (story == null)
                        {
                            story = new FeedStory();
                            story.UniqueString    = uniqueStringValue;
                            story.AuthorName      = tweet.user.name + " via Twitter";
                            story.ProfileImageUrl = tweet.user.profile_image_url;
                            story.ImageUrl        = tweet.entities.media != null ? tweet.entities.media[0].media_url : null;
                            story.Message         = tweet.text;
                            story.FeedID          = feed.FeedID;
                            story.Status          = "new";
                            story.Priority        = feed.DefaultPriority;

                            // get location from tweet if supplied in "geo"
                            // note: weirdly it seems that these checks on dynamic objects cannot put in a single if statement together, maybe the short cut logic does not work the same
                            if (tweet.geo != null)
                            {
                                if (tweet.geo.type == "Point")
                                {
                                    if (tweet.geo.coordinates != null)
                                    {
                                        if (tweet.geo.coordinates.Length == 2)
                                        {
                                            story.Latitude  = tweet.geo.coordinates[0];
                                            story.Longitude = tweet.geo.coordinates[1];
                                        }
                                    }
                                }
                            }

                            story.Save();
                            story.ApplyFilters();

                            // If it didn't match any filter and it's still null, get from the feed
                            if (story.Latitude == null || story.Longitude == null)
                            {
                                story.Latitude  = feed.Latitude;
                                story.Longitude = feed.Longitude;
                                story.Save();
                            }

                            Web.Write("<p><strong>Added new tweet as feed story (Twitter Feed ID: " + feed.FeedID + ")</strong></p><p>" + story.Message + "</p><hr/>");
                        }
                    }

                    runResult = "Success";
                } catch (Exception ex) {
                    Web.Write("<p><strong style='color:red'>Error! Twitter Feed ID: " + feed.FeedID + "</strong></p><p>" + ex.Message + "</p><hr/>");
                    Web.Write(jsonString);
                    runResult = ex.Message;
                    //SendFeedErrorEmail(feed, ex);
                    //feedIsActive = false;
                } finally {
                    feed.LastResult      = runResult;
                    feed.LastTimeRunning = DateTime.Now;
                    feed.IsActive        = feedIsActive;
                    feed.Save();
                }
            }
        }
示例#25
0
 private void UpdateUI()
 {
     var started = Client.Instance.Active;
     if (!started) { NavigationService.Navigate(new Uri("/SignInPage.xaml", UriKind.Relative)); }
     else
     {
         ListProfileCallback();
         if (_fl == null)
         {
             _fl = new FeedList();
             ListFeedsCallback();
         }
         ListWallCallback();
     }
 }