Example #1
0
        //
        // GET: /Account/LogOn

        public ActionResult LogOn()
        {
            //return View();
            if (!Request.IsAuthenticated)
            {
                var credentials = new InMemoryCredentials();
                credentials.ConsumerKey    = ConfigurationManager.AppSettings["TwitterCustomerKey"];
                credentials.ConsumerSecret = ConfigurationManager.AppSettings["TwitterCustomerSecret"];
                var auth = new MvcAuthorizer {
                    Credentials = credentials
                };
                auth.CompleteAuthorization(Request.Url);
                if (!auth.IsAuthorized)
                {
                    return(auth.BeginAuthorization(Request.Url));
                }
                else
                {
                    FormsAuthentication.SetAuthCookie(auth.ScreenName, true);
                    PostworthyUser pm = UsersCollection.Single(auth.ScreenName, addIfNotFound: true);
                    if (string.IsNullOrEmpty(pm.AccessToken) && string.IsNullOrEmpty(pm.OAuthToken))
                    {
                        pm.AccessToken = auth.Credentials.AccessToken;
                        pm.OAuthToken  = auth.Credentials.OAuthToken;
                        UsersCollection.Save();
                    }
                    return(RedirectToAction("Index", new { controller = "Home", action = "Index", id = UrlParameter.Optional }));
                }
            }
            else
            {
                return(RedirectToAction("Index", new { controller = "Home", action = "Index", id = UrlParameter.Optional }));
            }
        }
Example #2
0
 public override void Init(string screenname, System.IO.TextWriter log)
 {
     base.Init(screenname, log);
     User      = UsersCollection.PrimaryUsers().Where(x => x.TwitterScreenName == screenname).First();
     repoPage  = new SimpleRepository <ArticleStubPage>(screenname);
     repoIndex = new SimpleRepository <ArticleStubIndex>(screenname);
 }
Example #3
0
 private TwitterModel(string screenname)
 {
     PrimaryUser = UsersCollection.Single(screenname);
     if (PrimaryUser == null)
     {
         throw new Exception(screenname + " user not found!");
     }
 }
Example #4
0
 protected override void Initialize(System.Web.Routing.RequestContext requestContext)
 {
     base.Initialize(requestContext);
     PrimaryUser = UsersCollection.PrimaryUsers().Where(u => u.IsPrimaryUser).FirstOrDefault();
     if (PrimaryUser != null)
     {
         ViewBag.Brand = PrimaryUser.SiteName;
     }
 }
Example #5
0
        //
        // GET: /Account/LogOn
        public async Task <ActionResult> LogOn(bool complete = false)
        {
            //return View();
            if (!Request.IsAuthenticated)
            {
                if (complete)
                {
                    var auth = new MvcAuthorizer
                    {
                        CredentialStore = new SessionStateCredentialStore()
                    };

                    await auth.CompleteAuthorizeAsync(Request.Url);

                    FormsAuthentication.SetAuthCookie(auth.CredentialStore.ScreenName, true);
                    PostworthyUser pm = UsersCollection.Single(auth.CredentialStore.ScreenName, force: true, addIfNotFound: true);
                    if (string.IsNullOrEmpty(pm.AccessToken) && string.IsNullOrEmpty(pm.OAuthToken))
                    {
                        pm.AccessToken = auth.CredentialStore.OAuthTokenSecret;
                        pm.OAuthToken  = auth.CredentialStore.OAuthToken;
                        UsersCollection.Save();
                    }

                    return(RedirectToAction("Index", new { controller = "Home", action = "Index", id = UrlParameter.Optional }));
                }
                else
                {
                    //var auth = new MvcSignInAuthorizer
                    var auth = new MvcAuthorizer
                    {
                        CredentialStore = new SessionStateCredentialStore
                        {
                            ConsumerKey    = ConfigurationManager.AppSettings["TwitterCustomerKey"],
                            ConsumerSecret = ConfigurationManager.AppSettings["TwitterCustomerSecret"]
                        }
                    };
                    string twitterCallbackUrl = Request.Url.ToString() + "?complete=true";
                    return(await auth.BeginAuthorizationAsync(new Uri(twitterCallbackUrl)));
                }
            }
            else
            {
                return(RedirectToAction("Index", new { controller = "Home", action = "Index", id = UrlParameter.Optional }));
            }
        }
Example #6
0
        public Tweep(PostworthyUser postworthyUser, TweepType type)
        {
            var context = TwitterModel.Instance.GetAuthorizedTwitterContext(UsersCollection.PrimaryUser().TwitterScreenName);

            User = context.User.Where(x => x.ScreenName == postworthyUser.TwitterScreenName && x.Type == UserType.Lookup).ToList().FirstOrDefault();
            if (User == null)
            {
                throw new Exception("Could not Find Twitter User!");
            }
            if (type == TweepType.Follower && User.Following)
            {
                Type = TweepType.Mutual;
            }
            else
            {
                Type = type;
            }
        }
        public DashboardModel(PostworthyUser user)
        {
            User                                 = user;
            PotentialTweets                      = new List <Tweet>();
            PotentialReTweets                    = new List <Tweet>();
            Tweeted                              = new List <Tweet>();
            PotentialFriendRequests              = new List <KeyValuePair <Tweep, int> >();
            LastTweetTime                        = DateTime.MaxValue;
            KeywordSuggestions                   = new List <KeyValuePair <string, int> >();
            TweetsLastThirtyDays                 = new int[31];
            TopFriendTweetCounts                 = new List <KeyValuePair <Tweep, int> >();
            KeywordsWithOccurrenceCount          = new List <KeyValuePair <string, int> >();
            PotentialKeywordsWithOccurrenceCount = new List <KeyValuePair <string, int> >();
            TwitterFollowSuggestions             = new List <Tweep>();
            PendingKeywordAdd                    = new List <string>();
            PendingKeywordIgnore                 = new List <string>();
            PendingTweetRemoval                  = new List <string>();


            LoadFromRepository();
        }
Example #8
0
        public ActionResult Personalization()
        {
            PostworthyUser model = UsersCollection.Single(User.Identity.Name);

            return(View(model));
        }
Example #9
0
        private static List <TweetGroup> CreateGroups(PostworthyUser user, DateTime?day)
        {
            var           repoTweets  = new SimpleRepository <Tweet>(user.TwitterScreenName);
            List <string> screenNames = null;

            screenNames = TwitterModel.Instance(user.TwitterScreenName).GetRelevantScreenNames(user.TwitterScreenName);

            int RetweetThreshold = user.RetweetThreshold;


            DateTime start = day == null?DateTime.Now.AddHours(-48) : day.Value.StartOfDay();

            DateTime end = day == null ? DateTime.Now : day.Value.EndOfDay();

            Func <Tweet, bool> where = t =>
                                       t != null &&
                                       //Should everything be displayed or do you only want content
                                       (user.OnlyTweetsWithLinks == false || (t.Links != null && t.Links.Count > 0)) &&
                                       //Minumum threshold applied so we get results worth seeing (if it is your own tweet it gets a pass on this step)
                                       ((t.RetweetCount > RetweetThreshold || t.User.ScreenName.ToLower() == user.TwitterScreenName.ToLower()) &&
                                       //Apply Date Range
                                        (t.CreatedAt >= start && t.CreatedAt <= end));

            var startGrouping = DateTime.Now;

            Console.WriteLine("{0}: Starting grouping procedure for {1}", startGrouping, user.TwitterScreenName);

            Console.WriteLine("{0}: Fetching tweets for {1}", startGrouping, user.TwitterScreenName);

            var tweets = screenNames
                         //For each screen name (i.e. - you and your friends if included) select the most recent tweets
                         .SelectMany(x => repoTweets.Query(x + TwitterModel.Instance(user.TwitterScreenName).TWEETS, where : where) ?? new List <Tweet>())
                         //Order all tweets based on rank (TweetRank takes into acount many important factors, i.e. - time, mentions, hotness, ect.)
                         .OrderByDescending(t => t.TweetRank)
                         //Just to make sure we are not trying to group a very very large number of items
                         .Take(5000)
                         .ToList();

            Console.WriteLine("{0}: Grouping tweets by similarity for {1}", DateTime.Now, user.TwitterScreenName);

            var groups = tweets
                         //Group similar tweets
                         .GroupSimilar2()
                         //Convert groups into something we can display
                         .Select(g => new TweetGroup(g)
            {
                RepositoryKey = TwitterModel.Instance(user.TwitterScreenName).CONTENT
            })
                         //Order by TweetRank
                         .OrderByDescending(g => g.TweetRank)
                         //Only the top 500
                         .Take(500);

            List <TweetGroup> results = null;

            if (groups != null && groups.Count() > 0)
            {
                //Get Standard Deviation
                double stdev  = 0;
                var    values = groups.Select(x => x.TweetRank);
                double avg    = values.Average();
                stdev = Math.Sqrt(values.Sum(d => (d - avg) * (d - avg)) / values.Count());

                //Filter groups that are way high...
                groups = groups.Where(x => x.TweetRank < (avg + stdev));

                results = groups.ToList();
            }

            var endGrouping = DateTime.Now;

            Console.WriteLine("{0}: Grouping procedure for {1} completed and it took {2} minutes to complete", endGrouping, user.TwitterScreenName, (endGrouping - startGrouping).TotalMinutes);

            return(results ?? new List <TweetGroup>());
        }
Example #10
0
        private static async Task <List <ArticleStub> > CreateContent(PostworthyUser user, List <TweetGroup> groupingResults, ArticleStubPage existing)
        {
            var startContent = DateTime.Now;

            Console.WriteLine("{0}: Starting content procedure for {1}", startContent, user.TwitterScreenName);

            List <ArticleStub> results = new List <ArticleStub>();

            var contentItems = new List <object>();

            foreach (var result in groupingResults)
            {
                if (contentItems.Count >= MAX_CONTENT)
                {
                    break;
                }

                var existingItem = existing != null?
                                   existing.ArticleStubs.Where(x => result.Links.Select(y => y.Uri).Contains(x.Link)).FirstOrDefault() : null;

                if (existingItem != null)
                {
                    contentItems.Add(existingItem);
                    continue;
                }
                var imageUris = new List <Uri>();
                imageUris = result.Links.Where(l => l.Image != null).Select(l => l.Image).ToList();
                var links = result.Links.OrderByDescending(x => x.ShareCount);
                foreach (var uriex in links)
                {
                    if (uriex.IsHtmlContentUrl)
                    {
                        var doc = new HtmlAgilityPack.HtmlDocument();
                        try
                        {
                            var req = uriex.Uri.GetWebRequest(15000, 15000);
                            using (var resp = await req.GetResponseAsync())
                            {
                                using (var reader = new StreamReader(resp.GetResponseStream(), true))
                                {
                                    doc.Load(reader);
                                }
                            }
                        }
                        catch (Exception ex) { }

                        if (doc.DocumentNode != null)
                        {
                            imageUris.AddRange(ExtractImageUris(uriex, doc));

                            var content = new
                            {
                                Title    = uriex.Title,
                                SubTitle = uriex.Description,
                                Link     = uriex.Uri,
                                //Image = image == null ? null : ImageManipulation.EncodeImage(image, width, height),
                                Summary = ExtractSummary(uriex.Title + " " + uriex.Description, doc),
                                Video   = uriex.Video,
                                Images  = imageUris
                            };

                            contentItems.Add(content);
                            break;
                        }
                    }
                }
            }

            var newImages = contentItems
                            .Where(x => x.GetType() != typeof(ArticleStub))
                            .Select(x => (dynamic)x)
                            .SelectMany(x => ((List <Uri>)x.Images).Select(y => new { ID = ((object)x.Title).GetHashCode(), Image = y }))
                            .ToList();

            var stubImages = contentItems
                             .Where(x => x.GetType() == typeof(ArticleStub))
                             .Where(x => ((ArticleStub)x).OriginalImageUri != null)
                             .Select(x => new { ID = ((ArticleStub)x).Title.GetHashCode(), Image = ((ArticleStub)x).OriginalImageUri })
                             .ToArray();

            if (stubImages != null && stubImages.Length > 0)
            {
                newImages.AddRange(stubImages);
            }

            var allImages = newImages.ToArray();

            var excludedImages = new List <Uri>();

            for (int i = 0; i < allImages.Length - 1; i++)
            {
                var img = allImages[i];
                if (!excludedImages.Contains(img.Image))
                {
                    for (int j = i + 1; j < allImages.Length; j++)
                    {
                        var img2 = allImages[j];
                        if (img.Image == img2.Image && img.ID != img2.ID)
                        {
                            excludedImages.Add(img2.Image);
                            break;
                        }
                    }
                }
            }

            foreach (var obj in contentItems)
            {
                if (obj.GetType() != typeof(ArticleStub))
                {
                    dynamic item  = obj;
                    var     image = await GetBestImage(((List <Uri>)item.Images ?? new List <Uri>()).Where(y => !excludedImages.Contains(y)));

                    results.Add(new ArticleStub
                    {
                        Title            = item.Title,
                        SubTitle         = item.SubTitle,
                        Link             = item.Link,
                        Image            = image != null ? image.Item1 : null,
                        Summary          = item.Summary,
                        Video            = item.Video,
                        OriginalImageUri = image != null ? image.Item2 : null
                    });
                }
                else if (excludedImages.Contains(((ArticleStub)obj).OriginalImageUri))
                {
                    var item = (ArticleStub)obj;
                    item.Image = null;
                    results.Add(item);
                }
                else
                {
                    results.Add(obj as ArticleStub);
                }
            }
            var endContent = DateTime.Now;

            Console.WriteLine("{0}: Content procedure for {1} completed and it took {2} minutes to complete", endContent, user.TwitterScreenName, (endContent - startContent).TotalMinutes);

            return(results);
        }
Example #11
0
 public PostworthyArticleModel(PostworthyUser primaryUser)
 {
     PrimaryUser = primaryUser;
 }
 public DualStreamMonitor(PostworthyUser primaryUser, TextWriter log)
 {
     this.log    = log;
     PrimaryUser = primaryUser;
 }