Example #1
0
        public List<Objects.Option> GetAllAvailableOptions()
        {
            var tweetCountNumerics = new List<int>(1);
            tweetCountNumerics.Add(10); // default to 10 minutes in between tweet count updates

            var tweetCountOption = new Objects.Option(1, null, tweetCountNumerics); // id 1 is the tweet count notification option for Twitter

            var directMessageOption = new Objects.Option(2, null, null); // id 2 is the direct message notification option for Twitter

            var options = new List<Objects.Option>(2);
            options.Add(tweetCountOption);
            options.Add(directMessageOption);

            return options;
        }
        public async Task<IEnumerable<TweetDto>> GetTweetsFor(IEnumerable<string> tweetsIds)
        {
            var tweetsIdsList = tweetsIds.Select(s => Convert.ToUInt64(s)).Materialize();

            if (tweetsIdsList.IsEmpty())
            {
                return Enumerable.Empty<TweetDto>();
            }

            using (var twitterContext = CreateContext())
            {
                var results = new List<TweetDto>();
                foreach (var tweetsId in tweetsIdsList)
                {
                    var id = tweetsId;
                    var tweet = await
                    twitterContext.Status
                        .Where(status => status.Type == StatusType.Show && status.ID == id).FirstOrDefaultAsync();
                    if (tweet != null)
                    {
                        results.Add(BuildTweetDto(tweet));
                    }
                }

                return results;
            }
        }
Example #3
0
        static void Main(string[] args)
        {
            if (!EnsureSingleLoad())
            {
                Console.WriteLine("{0}: Another Instance Currently Runing", DateTime.Now);
                return;
            }

            var streamMonitors = new List<DualStreamMonitor>();

            UsersCollection.PrimaryUsers().AsParallel()
                .ForAll(u =>
            {
                var streamMonitor = new DualStreamMonitor(u, Console.Out);
                streamMonitor.Start();

                lock (streamMonitors)
                {
                    streamMonitors.Add(streamMonitor);
                }
            });

            while (Console.ReadLine() != "exit") ;

            streamMonitors.ForEach(s => s.Stop());
        }
Example #4
0
        public IActionResult Index(string screenname, string order)
        {
            // TODO handle hashtags separately
            int markovOrder;
            // default order is 2, if the parse failed
            if (!int.TryParse(order, out markovOrder))
                markovOrder = 2;

            // hack to avoid null pointer exception
            if (markovOrder > 5)
                markovOrder = 5;
            int tweetCount = 200;
            var generator = new MarkovGenerator(markovOrder, false);
            
            // how to handle hashtags? just keep a list of them along with a probability for each,
            // i.e. a single-prefix markov chain?
            // would also need a no-hashtag probability
            // no, that won't work, since there wouldn't be an end point, really. at least not one that makes sense.
            
            // what might work is keeping track of individual hashtag probabilities,
            // as well as a probability distribution of number of hashtags. (fun to get some stats on that, see if it's poisson-distributed)

            ViewData["Screenname"] = screenname;

            var auth = new SingleUserAuthorizer
            {
                CredentialStore = new SingleUserInMemoryCredentialStore
                {
                    ConsumerKey = _consumerKey,
                    ConsumerSecret = _consumerSecret,
                    AccessToken = _accessToken,
                    AccessTokenSecret = _accessTokenSecret
                }
            };

            var twitterCtx = new TwitterContext(auth);
            var timeline =
                (twitterCtx.Status.Where(tweet => tweet.Type == StatusType.User &&
                                                  tweet.ScreenName == screenname &&
                                                  tweet.Count == tweetCount))
                    .ToList();

            foreach (var tweet in timeline)
            {
                generator.ReadInput(tweet.Text);
            }

            int outputCount = 20;
            var outputList = new List<string>();
            for (int i = 0; i < outputCount; i++)
            {
                outputList.Add(generator.GenerateOutput());
            }

            //TODO add form
            //TODO use form data
            return View(outputList);
        }
 private IEnumerable<TweetFromUser> BuildLast20TweetsOfUser(IEnumerable<Status> tweets)
 {
     var last20TweetsFromUser = new List<TweetFromUser>();
      tweets.ToList().ForEach(tweet => last20TweetsFromUser
     .Add(new TweetFromUser
             {
                TweetText = tweet.Text
             }));
      return last20TweetsFromUser;
 }
Example #6
0
        public override List<Result> Search(string pKeyWords)
        {
            string twitterConsumerKey = ConfigurationManager.AppSettings["twitter-consumer-key"];
            string twitterConsumerSecret = ConfigurationManager.AppSettings["twitter-consumer-secret"];

            if (string.IsNullOrWhiteSpace(twitterConsumerKey) || string.IsNullOrWhiteSpace(twitterConsumerSecret))
                throw new Exception("App was unable to find Twitter credentials on the current settings file. Please add twitter-consumer-key and twitter-consumer-secret to the appSettings section.");

            ApplicationOnlyAuthorizer authorization = new ApplicationOnlyAuthorizer()
            {
                Credentials = new InMemoryCredentials()
                {
                    ConsumerKey = twitterConsumerKey,
                    ConsumerSecret = twitterConsumerSecret
                }
            };

            authorization.Authorize();

            if(!authorization.IsAuthorized)
                throw new Exception("Twitter authorizaton was unsuccessful. Please review your Twitter key and secret.");

            TwitterContext twitterContext = new TwitterContext(authorization);

            LinqToTwitter.Search twitterSearch =
                (from search in twitterContext.Search
                 where search.Type == SearchType.Search &&
                       search.Query == pKeyWords &&
                       search.Count == this.MaxResultSearch
                 select search)
                .SingleOrDefault();

            IEnumerable<Status> tweets =
                from status in twitterSearch.Statuses
                orderby status.CreatedAt descending
                select status;

            List<Result> domainResults = new List<Result>();

            foreach (Status status in tweets)
            {
                domainResults.Add(
                    new Result()
                    {
                        CreatedDate = status.CreatedAt,
                        Type = SourceType.Twitter,
                        Text = status.Text,
                        Title = status.Text.Length > 50? string.Format("{0}...",status.Text.Substring(0, 47)) : status.Text,
                        URL = string.Format("http://twitter.com/{0}", status.User.Identifier.ScreenName)
                    }
                );
            }

            return domainResults;
        }
        private IEnumerable<TweetFromUser> BuildTweetsFromStatuses(IEnumerable<Status> myWall)
        {
            var tweetFromUserList = new List<TweetFromUser>();
             myWall.ToList().ForEach(tweet => tweetFromUserList
                                             .Add(new TweetFromUser
                                                     {
                                                        TweetText = tweet.Text,
                                                        User = BuildUserOffUserId(tweet.User.Identifier.UserID)
                                                     }));

             return tweetFromUserList;
        }
Example #8
0
 public static List<string> getstopwords(string lang)
 {
     //lang can be implemented later. XML doc has lang attribute in wordlist element.
     List<string> sw = new List<string>();
     XmlDocument xd = new XmlDocument();
     xd.Load(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Content/StopWords.xml"));
     XmlNodeList nl = xd.SelectNodes("/wordlist/word");
     foreach (XmlNode n in nl)
     {
         sw.Add(n.InnerText);
     }
     return sw;
 }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="actionState"></param>
        /// <returns></returns>
        public List<UserStatistics> FindAllUserStatistics(ActionState actionState)
        {
            List<UserStatistics> userStattisticsList = new List<UserStatistics>();
            IEnumerable<BsonValue> userNameList = FindAUsersID(actionState);

            for (int i = 0; i < userNameList.ToArray<BsonValue>().Count(); i++)
            {
                UserStatistics userStatistic = new UserStatistics();
                userStatistic.Name = userNameList.ToArray<BsonValue>()[i].AsString;
                userStatistic.Count = FindTwitterCountByName(userStatistic.Name, actionState);
                userStattisticsList.Add(userStatistic);
            }
            return userStattisticsList;
        }
Example #10
0
        /// <summary>
        /// Converts XML to a new Geometry
        /// </summary>
        /// <param name="geometry">XML to convert</param>
        /// <returns>Geometry containing info from XML</returns>
        public Geometry CreateGeometry(XElement geometry)
        {
            if (geometry == null)
            {
                return null;
            }

            List<Coordinate> coords = new List<Coordinate>();

            if (geometry.Element("coordinates") == null)
            {
                XNamespace geoRss = "http://www.georss.org/georss";

                if (geometry.Element(geoRss + "polygon") != null)
                {
                    var coordArr = geometry.Element(geoRss + "polygon").Value.Split(' ');

                    for (int lat = Coordinate.LatitudePos, lon = Coordinate.LongitudePos; lon < coordArr.Length; lat+=2, lon += 2)
                    {
                        coords.Add(
                            new Coordinate
                            {
                                Latitude = double.Parse(coordArr[lat]),
                                Longitude = double.Parse(coordArr[lon])
                            });
                    }
                }
            }
            else
            {
                var coordinate = new Coordinate();

                coords =
                    (from coord in geometry.Element("coordinates").Element("item").Elements("item")
                     select coordinate.CreateCoordinate(coord))
                     .ToList();
            }

            return new Geometry
            {
                Type =
                    geometry.Element("type") == null ?
                        string.Empty :
                        geometry.Element("type").Value,
                Coordinates = coords
            };
        }
Example #11
0
        public async Task<IActionResult> Tweets(string screenName)
        {
            var model = new List<TweetViewModel>();
            List<Status> statuses = await twitterService.GetUserTweetsAsync(screenName);

            foreach (var status in statuses) {
                var tweet = new TweetViewModel
                {
                    TweetId = status.StatusID,
                    TweetedOn = status.CreatedAt,
                    InReplyToScreenName = status.InReplyToScreenName,
                    Text = status.Text,
                    Url = "https://twitter.com/" + status.ScreenName + "/status/" + status.StatusID
                };

                model.Add(tweet);
            }

            return View("Index", model);
        }
        // GET api/UpdateTweets
        public async Task<string> Get()
        {
            //Services.Log.Info("Hello from custom controller!");

            var dbCtx = new MobileServiceContext();

            long lastTweetId = 0;

            var t = dbCtx.Tweets.OrderByDescending(x => x.Date).ToList().Select(x => new { StatusId = x.StatusId }).FirstOrDefault();

            if (t != null) { lastTweetId = t.StatusId; }

            var statuses = await GetLatestsTwittersWithHashtag("mobilecloudhackday", lastTweetId);

            var newTweets = new List<Tweet>();
            foreach (var status in statuses)
            {

                var twt = new Tweet()
                {
                    Id = Guid.NewGuid().ToString(),
                    StatusId = (long)status.StatusID,
                    Text = status.Text,
                    Date = status.CreatedAt,
                    User = status.User.Name,
                    UserId = status.User.ScreenNameResponse,
                    UserImageUri = status.User.ProfileImageUrl
                };

                dbCtx.Tweets.Add(twt);
                newTweets.Add(twt);

            }

            await dbCtx.SaveChangesAsync();

            await NotifyPush(newTweets);

            return "Ok";
        }
        public IList<Tweet> GetLatestTweets(int count)
        {
            var twitterContext = new TwitterContext(Authorize());

            var tweets = new List<Tweet>();

            var statusTweets = from tweet in twitterContext.Status
                               where tweet.Type == StatusType.User &&
                                       tweet.ScreenName == _twitterAccount &&
                                       tweet.IncludeContributorDetails == true &&
                                       tweet.Count == 10 &&
                                       tweet.IncludeEntities == true
                               select tweet;

            foreach (var statusTweet in statusTweets)
            {
                tweets.Add(Tweet.Create(statusTweet.User.ProfileImageUrl, statusTweet.User.ScreenName,
                    GetTweetMediaUrl(statusTweet), statusTweet.Text));
            }

            return tweets;
        }
        public IEnumerable<TwitterSearchResult> Search(string searchText)
        {
            IList<TwitterSearchResult> foundTweets = new List<TwitterSearchResult>();
            try
            {

                var queryResults =
                   from search in TwitterCtx.Search
                   where search.Type == SearchType.Search &&
                         search.Query == searchText
                   select search;

                var queryResult = queryResults.SingleOrDefault();

                foreach (var entry in queryResult.Entries)
                {
                    var statusID = entry.ID.Substring(entry.ID.LastIndexOf(":") + 1);

                    var status =
                        (from tweet in twitterCtx.Status
                         where tweet.Type == StatusType.Show &&
                               tweet.ID == statusID
                         select tweet)
                         .SingleOrDefault();

                    TwitterSearchResult foundTweet = new TwitterSearchResult() { UserName = "******" + status.User.Identifier.ScreenName, ProfileImageUrl = status.User.ProfileImageUrl, TweetText = status.Text, DateTime = status.CreatedAt.ToLongDateString() + " " + status.CreatedAt.ToLongTimeString(), Source = "via: "+status.Source };
                    foundTweets.Add(foundTweet);

                }

            }
            catch (TargetInvocationException ex)
            {

                MessageBox.Show("Error Querying Twitter: " +  ex.InnerException.Message );
            }
            return foundTweets;
        }
Example #15
0
        public IList<Feed> GetFeed(FeedModel request)
        {
            var result = new List<Feed>();

            var user = repository.AsQueryable<Sociopath.DataEntities.Entities.User>().FirstOrDefault(x => x.Id == request.UserId);
            if (user == null || user.TwitterToken == null || user.TwitterSecret == null)
            {
                return result;
            }

            var auth = new SingleUserAuthorizer
            {
                CredentialStore = new InMemoryCredentialStore
                {
                    ConsumerKey = ConsumerKey,
                    ConsumerSecret = ConsumerSecret,
                    OAuthToken = user.TwitterToken,
                    OAuthTokenSecret = user.TwitterSecret
                }
            };
            var twitterCtx = new TwitterContext(auth);

            var tweets = twitterCtx.Status.Where(tweet => tweet.Type == StatusType.User).ToList();

            foreach (Status tweet in tweets)
            {
                Feed feedItem = repository.AsQueryable<Feed>().FirstOrDefault(x => x.TwitterExternalId == tweet.StatusID.ToString()) ?? new Feed();
                feedItem.TwitterExternalId = tweet.StatusID.ToString();
                feedItem.Message = tweet.Text;
                feedItem.Time = tweet.CreatedAt;
                repository.Save(feedItem);
                result.Add(feedItem);
            }

            repository.Commit();
            return result;
        }
        public async Task OpenTwitterConnection(string findString, int findLimit)
        {
            var auth = new SingleUserAuthorizer
            {
                CredentialStore = new SingleUserInMemoryCredentialStore
                {
                    ConsumerKey = App.consumerKey, 
                    ConsumerSecret = App.consumerSecret,
                    AccessToken = App.accessToken,
                    AccessTokenSecret = App.acessTokenSecret
                }
            };
            TwitterContext twitterCtx = new TwitterContext(auth);
            Search searchResponse = await (
                                    from   search
                                    in     twitterCtx.Search
                                    where  search.Type       == SearchType.Search &&
                                           search.Query      == findString        &&
                                           search.Count      == findLimit         &&
                                           search.ResultType == ResultType.Recent
                                    select search
                                    ).SingleOrDefaultAsync();

            if (searchResponse != null && searchResponse.Statuses != null)
            {
                this.tweetList = new List<NBATeamTweet>();
                List<Status> searchResults = searchResponse.Statuses.ToList();
                foreach (var tweet in searchResults)
                {
                    tweet.IncludeRetweets = false;
                    tweet.IncludeUserEntities = true;
                    tweet.User.ShowAllInlineMedia = true;
                    tweet.User.ImageSize = ProfileImageSize.Normal;
                    tweetList.Add(new NBATeamTweet() { tweetUser = tweet.User.ScreenNameResponse , tweetContent = tweet.Text, tweetImage = tweet.User.ProfileImageUrl });
                }
            }
        }
Example #17
0
		private async Task<IDialog> GetVkDialogWithFriend(DataIUser user, IUser friend)
		{
			IDialog dialog = null;
			try
			{
				Account acc = Account.Deserialize(user.SerializeInfo.ToString());

				this.StartRequest();

				var request = new OAuth2Request("GET", new Uri("https://api.vk.com/method/messages.getHistory"), null, acc);

				request.Parameters.Add("user_id", friend.Uid);
				request.Parameters.Add("count", "200");

				var res = await request.GetResponseAsync();
				var responseText = res.GetResponseText();

				var msg = JsonConvert.DeserializeObject<XamarinSocialApp.Droid.Data.VkData.VkMessagesResponse>(responseText);
				msg.Response.RemoveAt(0);

				IList<XamarinSocialApp.Droid.Data.VkData.MessageInDialog> msg1
					= new List<XamarinSocialApp.Droid.Data.VkData.MessageInDialog>();
				foreach (var item in msg.Response)
				{
					msg1.Add(JsonConvert.DeserializeObject<XamarinSocialApp.Droid.Data.VkData.MessageInDialog>(item.ToString()));
				}

				IList<IMessage> messages = new List<IMessage>();

				foreach (var item in msg1)
				{
					messages.Add(new DataMessage() { Content = item.Body, Sender = item.UserId == user.Uid ? user : friend });
				}

				dialog = new XamarinSocialApp.UI.Data.Implementations.Entities.Databases.Dialog(user, messages);
			}
			catch (Exception)
			{
			}

			return dialog;
		}
Example #18
0
		private async Task<IDialog> GetTwitterDialogWithFriend(DataIUser user, DataIUser friend)
		{
			IDialog dialog = null;
			IUser userInDialog = null;
			IList<IMessage> messages = new List<IMessage>();
 
			try
			{
				TwitterContext context = this.GetTwitterContext(user.SerializeInfo);

				var receivedMessages = await
						(from dm in context.DirectMessage
						 where dm.Type == DirectMessageType.SentTo
						 select dm).OrderByDescending(x => x.CreatedAt)
						.ToListAsync();

				var sentMessages = await
						(from dm in context.DirectMessage
						 where dm.Type == DirectMessageType.SentBy
						 select dm).OrderByDescending(x => x.CreatedAt)
						.ToListAsync();

				foreach (var message in receivedMessages)
				{
					if (message.SenderID.ToString() == friend.Uid)
					{
						userInDialog = new User() { FirstName = message.Sender.ScreenNameResponse };
						messages.Add(new DataMessage() { Content = message.Text, Sender = userInDialog, DateMessage = message.CreatedAt.ToString() });
					}
				}

				foreach (var message in sentMessages)
				{
					if (message.RecipientID.ToString() == friend.Uid)
					{
						userInDialog = new User() { FirstName = message.Sender.ScreenNameResponse };
						messages.Add(new DataMessage() { Content = message.Text, Sender = userInDialog, DateMessage = message.CreatedAt.ToString() });
					}
				}

				messages = messages.OrderByDescending(x => x.DateMessage).ToList();

				dialog = new XamarinSocialApp.UI.Data.Implementations.Entities.Databases.Dialog(user, messages);
			}
			catch (Exception)
			{
			}

			return dialog;
		}
Example #19
0
		private static async Task<IEnumerable<DataIUser>> GetUserVkFriends(DataIUser user)
		{
			IList<DataIUser> friends = new List<DataIUser>();
			try
			{
				Account acc = Account.Deserialize(user.SerializeInfo.ToString());
				var request = new OAuth2Request("GET", new Uri("https://api.vk.com/method/friends.get"), null, acc);

				request.Parameters.Add("fields", "nickname,photo_200");
				request.Parameters.Add("order", "hints");

				var res = await request.GetResponseAsync();
				var responseText = res.GetResponseText();

				var listFriendsIds = JsonConvert.DeserializeObject<XamarinSocialApp.Droid.Data.VkData.VkUsers>(responseText);

				foreach (var friend in listFriendsIds.response)
				{
					friends.Add(new DataUser()
					{
						UserPhoto = friend.photo_200,
						FirstName = friend.first_name,
						LastName = friend.last_name,
						SerializeInfo = user.SerializeInfo,
						Uid = friend.uid
					});
				}
			}
			catch (Exception)
			{
			}
			return friends;
		}
Example #20
0
		public async Task<IEnumerable<DataIUser>> GetUserTwitterFriends(DataIUser user)
		{
			IList<DataIUser> friends = new List<DataIUser>();
			try
			{
				TwitterContext context = this.GetTwitterContext(user.SerializeInfo);

				var friendship =
								await
								(from friend in context.Friendship
								 where friend.Type == FriendshipType.FollowersList &&
											 friend.UserID == user.Uid
								 select friend)
								.SingleOrDefaultAsync();

				if (friendship != null && friendship.Users != null)
					friendship.Users.ForEach(friend =>
																			friends.Add(new DataUser()
																				{
																					UserPhoto =  friend.ProfileImageUrl.Replace("normal", "bigger"),
																					FirstName = friend.ScreenNameResponse,
																					Uid = friend.UserIDResponse,
																					SerializeInfo = user.SerializeInfo,
																					SocialNetwork = user.SocialNetwork
																				}));

			}
			catch (Exception)
			{
			}
			return friends;
		}
Example #21
0
		private static async Task<IEnumerable<IDialog>> GetVkDialogs(DataIUser user)
		{
			IList<IDialog> dialogs = new List<IDialog>();
			try
			{
				Account acc = Account.Deserialize(user.SerializeInfo.ToString());
				var request = new OAuth2Request("GET", new Uri("https://api.vk.com/method/messages.getDialogs"), null, acc);

				request.Parameters.Add("count", "200");
				request.Parameters.Add("v", "5.37");

				var res = await request.GetResponseAsync();
				var responseText = res.GetResponseText();

				var msg = JsonConvert.DeserializeObject<XamarinSocialApp.Droid.Data.VkData.VkDialogsResponse>(responseText);


				foreach (var item in msg.Response.Messages)
				{
					IUser userDialog = new User()
					{
						Uid = item.Message.UserId,
						SerializeInfo = user.SerializeInfo
					};
					DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);

					string dateMessage = start.AddSeconds(item.Message.DateMessage).ToLocalTime().ToString();				
					//var userDialog = await GetUserInfoRequest(item.Message.UserId, acc, socialNetwork);
					dialogs.Add(new DataDialogs(userDialog, new List<IMessage>() 
				{ 
					new DataMessage() { Content = item.Message.Body, DateMessage = dateMessage } 
				}));
				}
			}
			catch (Exception)
			{
			}

			return dialogs;
		}
Example #22
0
		public async Task<IEnumerable<IDialog>> GetTwitterDialogs(DataIUser user)
		{
			IList<IDialog> dialogs = new List<IDialog>();
			try
			{
				TwitterContext context = this.GetTwitterContext(user.SerializeInfo);

				var twitterDialogs = await
						(from dm in context.DirectMessage
						 where dm.Type == DirectMessageType.SentTo
						 select dm)
						.ToListAsync();

				foreach (var msg in twitterDialogs)
				{
					IUser userDialog = new User()
					{
						Uid = msg.SenderID.ToString(),
						FirstName = msg.SenderScreenName,
						SerializeInfo = user.SerializeInfo, 
						SocialNetwork = user.SocialNetwork
					};

					dialogs.Add(new DataDialogs(userDialog, new List<IMessage>()
					{ 
						new DataMessage() { Content = msg.Text, DateMessage = msg.CreatedAt.ToString() } 
					}));
				}
			}
			catch (Exception)
			{
			}

			return dialogs;
		}
Example #23
0
        static void ConditionalSearchDemo(TwitterContext twitterCtx)
        {
            const string TwitterSearchGeocodeFormat = "{0},{1},{2}";
            string query = "Twitter";
            string language = null;
            string locale = null;
            string latitude = "37.781157";
            string longitude = "-122.398720";
            uint radius = 1;
            string radiusUnitType = "mi";

            Type searchType = typeof(Search);
            ParameterExpression srch = Expression.Parameter(searchType, "srch");

            var predicates = new List<Expression>();

            if (!string.IsNullOrWhiteSpace(query))
            {
                predicates.Add(
                    Expression.Equal(
                        Expression.Property(srch, "Query"),
                        Expression.Constant(query)));
            }

            if (!string.IsNullOrWhiteSpace(language))
            {
                predicates.Add(
                    Expression.Equal(
                        Expression.Property(srch, "SearchLanguage"),
                        Expression.Constant(language)));
            }

            if (!string.IsNullOrWhiteSpace(locale))
            {
                predicates.Add(
                    Expression.Equal(
                        Expression.Property(srch, "Locale"),
                        Expression.Constant(locale)));
            }

            if (!string.IsNullOrWhiteSpace(longitude) && !string.IsNullOrWhiteSpace(latitude) && radius > 0)
            {
                var radiusString = string.Format("{0}{1}", radius, radiusUnitType.ToString().ToLower());
                var geoCodeParameter = String.Format(TwitterSearchGeocodeFormat, latitude, longitude, radiusString);
                predicates.Add(
                    Expression.Equal(
                        Expression.Property(srch, "GeoCode"),
                        Expression.Constant(geoCodeParameter)));
            }

            BinaryExpression expr = Expression.Equal(
                Expression.Property(srch, "Type"),
                Expression.Constant(SearchType.Search));

            predicates.ForEach(pred => expr = Expression.AndAlso(expr, pred));

            var searchLambda =
                Expression.Lambda(expr, srch) as Expression<Func<Search, bool>>;

            var response = 
                twitterCtx.Search
                    .Where(searchLambda)
                    .SingleOrDefault();

            Console.WriteLine("\nQuery: {0}\n", response.SearchMetaData.Query);
            response.Statuses.ForEach(entry =>
                Console.WriteLine(
                    "ID: {0, -15}, Source: {1}\nContent: {2}\n",
                    entry.StatusID, entry.Source, entry.Text));
        }
		private async void StartRequestSequence()
		{
			var companymash = CompanyFor.Text.ToLower();
			var companiesList = new List<string>();

			if (companymash.Contains("+"))
			{
				foreach (var company in companymash.Split('+')) { companiesList.Add(company); }
			}
			else
			{
				companiesList.Add(companymash);
			}

			FadeResultsOut.Begin();

			_currentResultItems.Clear(); //empty the bottle, reset companies
			var _tempCurrentResultItems = new List<SummaryReturn.Root>();
			var _tempCurrentResultItem = new SummaryReturn.Root();

			foreach (var company in companiesList)
			{
				_tempCurrentResultItem = (await mdc.Services.ApiInteract.GetSummaryDecoded(company))[0]; //just grab first copy of the company, no dupes.
				_tempCurrentResultItem.tweets_popular = new List<SummaryReturn.Tweet>();

				if (_areWeTwitAuthed)
				{
					var tweetObjects = await TwitterInteract.Search(_auth, company, ResultType.Popular); //grab tweets

					foreach (var tweet in tweetObjects.Statuses) //mash tweets into the root article object
					{
						_tempCurrentResultItem.tweets_popular.Add(new SummaryReturn.Tweet
						{
							text = tweet.Text,
							timestamp = tweet.CreatedAt,
							username = tweet.User.Name
						});
					}
				}
				else
				{
					Debug.WriteLine("Error, Still Authorising with TW");
					_tempCurrentResultItem.tweets_popular.Add(new SummaryReturn.Tweet { text = "Still waiting for Token from Twitter", timestamp = DateTime.Now, username = "******" });
				}
				_tempCurrentResultItems.Add(_tempCurrentResultItem); //mash back together into one list of above
			}

			foreach (var item in _tempCurrentResultItems) //strip out nulls
			{
				if (item.mission_statement_investigator == null)
				{
					item.mission_statement_investigator = "Not Verified!";
				}
				if (item.mission_statement_proof == null)
				{
					item.mission_statement_proof = "N/A";
				}
				//remove from view?
			}

			//TextBlockDump.Text = string.Concat("RAW Json output:\n", await mdc.Services.ApiInteract.GetSummaryRaw(company.Split('+')[0]));
			_currentResultItems = _tempCurrentResultItems;
			ResultItemsControl.ItemsSource = CurrentResultItems;
			FadeResultsIn.Begin();

		}
        void DBWrite(object sender, DoWorkEventArgs args)
        {
            //Check rate limit
            DateTime writeTime = DateTime.Now;
            int maxWrites = (int)Math.Ceiling(RateLimitPerMinute * (writeTime - _lastDBWrite).TotalMinutes);
            _lastDBWrite = writeTime;

            int discardedCount = 0;
            List<string> tweets = new List<string>();
            while (_tweetQueue.Count > 0)
            {
                string tweet = _tweetQueue.Dequeue();
                if (tweets.Count < maxWrites)
                    tweets.Add(tweet);
                else
                    discardedCount++;
            }

            if (discardedCount > 0)
                Console.WriteLine("Rate limited: Discarding " + discardedCount + " tweets (saving " + tweets.Count + ")");

            if (tweets.Count == 0)
                return;

            MySqlConnection connection = null;
            try
            {
                connection = new MySqlConnection(_connectionString);
                connection.Open();

                _dbFail = false;

                using (MySqlCommand command = connection.CreateCommand())
                {
                    SetInsertStatement(command, tweets);
                    try
                    {
                        Helpers.RunSqlStatement(Name, command);
                    }
                    catch (MySqlException e)
                    {
                        command.Cancel();
                        command.Dispose();
                        throw e;
                    }
                }
            }
            catch (Exception e)
            {
                if (_dbFail)
                {
                    Thread.Sleep(20000);
                }
                else
                {
                    if (e.InnerException is System.Net.Sockets.SocketException)
                    {
                        Output.Print(Name, "Failed to connect to database:" + Environment.NewLine + e);
                        _dbFail = true;
                    }
                    else
                    {
                        Output.Print(Name, "Exception when inserting tweets:" + Environment.NewLine + e);
                    }
                }
            }
            finally
            {
                try
                {
                    connection.Close();
                }
                catch (Exception e)
                {
                    Output.Print(Name, "Exception when trying to close DB connection:" + Environment.NewLine + e);
                }
            }
        }
        private void GetTwitter()
        {
            // De beoordeling van dit onderdeel is afhankelijk van
            // - Het aantal tweets in de afgelopen 7 dagen, 3+ keer is maximaal 10, 2 keer is maximaal 8, 1 keer is maximaal 6, 0 keer is maximaal 4.
            // - Het aantal volgers van het account tegenover het aantal tweets. 50-75% is 2 punten aftrek, 33-50% is 3 punten aftrek, 10-33% is 4 punten aftrek, 0-10% is 5 punten aftrek.
            // - Het aantal gebruikers dat het account volgt tegenover het aantal volgers. Wanneer het aantal volgend 75+% is van aantal volgers: 2 punten aftrek.

            var url = Session["MainUrl"].ToString();
            Debug.WriteLine("GetTwitter <<< ");

            var screennameList = new List<string>();
            var rating = 1.0m;
            var apiKey = System.Web.Configuration.WebConfigurationManager.AppSettings["GoogleAPI"];

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://ajax.googleapis.com/ajax/services/search/web?v=1.0&key=" + apiKey + "&rsz=8&q=twitter%20" + url);
            // Additional parameters
            // &rsz=[1-8] resultSize can be 1 through 8, currently using 8
            // &start=[x] Indicate where to start searching
            request.UserAgent = Session["userAgent"].ToString();
            request.Headers.Add("Accept-Language", "nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4");
            // Get the response.
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            // Get the stream containing content returned by the server.
            Stream dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            var reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();

            JObject googleSearch = JObject.Parse(responseFromServer);
            IList<JToken> results = googleSearch["responseData"]["results"].Children().ToList();

            var isTwitterfound = false;
            if (results.Count != 0)
            {
                foreach (JToken item in results)
                {
                    var screenName = SliceScreenName(item["unescapedUrl"].ToString());
                    if (screenName != "")
                    {
                        screennameList.Add(screenName);
                        Debug.WriteLine(screenName + " aan lijst toegevoegd!");
                    }
                }

                foreach (var screenName in screennameList)
                {
                    if (IsTwitter(screenName))
                    {
                        Debug.WriteLine(screenName + " gevonden via Google!");
                        isTwitterfound = true;

                        rating = GetTwitterRating(screenName);

                        break;
                    }
                }
            }

            // If !isTwitterfound { doorzoek pagina op aanwezigheid twitter.com mbv agility pack
            if (!isTwitterfound)
            {
                var screenNames = GetScreenNamesFromPage(url);
                if (screenNames.Count > 0)
                {
                    foreach (var screenName in screenNames)
                    {
                        if (IsTwitter(screenName))
                        {
                            Debug.WriteLine(screenName + " gevonden via pagina!");
                            rating = GetTwitterRating(screenName);

                            isTwitterfound = true;

                            break;
                        }
                    }
                }
            }

            if (!isTwitterfound)
            {
                rating = 0.0m;
                message += "<div class='alert alert-danger col-md-12 col-lg-12 col-xs-12 col-sm-12' role='alert'>"
                    + "<i class='glyphicon glyphicon-alert glyphicons-lg messageIcon'></i>"
                    + "<span class='messageText'> Er is geen Twitter account gevonden die geassocieerd is met deze website. Zorg ervoor dat de URL van uw pagina in uw Twitter-profiel staat</span></div>";
            }
            twitterResults.InnerHtml = message;
            decimal rounded = decimal.Round(rating, 1);
            TwitterRating.InnerHtml = rounded.ToString();

            var temp = (decimal)Session["RatingUx"];
            Session["RatingUx"] = rounded + temp;
            temp = (decimal)Session["RatingMarketing"];
            Session["RatingMarketing"] = rounded + temp;
            Session["TwitterRating"] = rounded;

            Debug.WriteLine("Rounded = " + rounded);
            SetRatingDisplay(rating);
        }
        /// <summary>
        /// Get a list of screen names found on a page
        /// </summary>
        /// <param name="url">Page to check for Facebook link</param>
        /// <returns>List of possible screen names found on page</returns>
        private List<string> GetScreenNamesFromPage(string url)
        {
            Debug.WriteLine("GetScreenNamesFromPage <<< ");
            var screenNames = new List<string>();

            try
            {
                var webget = new HtmlWeb();
                var doc = webget.Load(url);
                if (doc.DocumentNode.SelectNodes("//a[@href]") != null)
                {
                    foreach (var node in doc.DocumentNode.SelectNodes("//a[@href]"))
                    {
                        if (node.Attributes["href"].Value.Contains("twitter.com"))
                        {
                            var temp = SliceScreenName(node.Attributes["href"].Value);

                            Debug.WriteLine(temp + " aan lijst toevoegen!");
                            if (temp != "")
                                screenNames.Add(temp);
                        }
                    }
                }
            }
            catch (WebException)
            {

            }
            return screenNames;
        }
        public async Task<ActionResult> TweetAsync(LoadUserViewModel user)
        {
            if (!ModelState.IsValid)
            {
                return View(user);
            }
            //load OAuth credentials
            var auth = new MvcAuthorizer
            {
                CredentialStore = new SessionStateCredentialStore()
            };
            
            var ctx = new TwitterContext(auth);

            Friendship friendship;

            long cursor = -1;

            List<string> urls = new List<string>();
            List<int> counts = new List<int>();
            // load profile picture urls and tweets count using linq2twitter
            try
            {
                if (user.size < 24 || user.size > 2000)
                    throw new Exception("Size out of bounds. Min size: 24, Max size: 2000");

                do
                {
                    friendship =
                        await
                        (from friend in ctx.Friendship
                         where friend.Type == FriendshipType.FriendsList &&
                         friend.ScreenName == user.Text.Trim() &&
                         friend.Cursor == cursor
                         select friend).SingleOrDefaultAsync();

                    if (friendship != null &&
                        friendship.Users != null &&
                        friendship.CursorMovement != null)
                    {
                        cursor = friendship.CursorMovement.Next;

                        friendship.Users.ForEach(friend =>
                        {
                            urls.Add(friend.ProfileImageUrl.Replace("normal","bigger"));
                            counts.Add(friend.StatusesCount);
                        }
                        );
                    }
                } while (cursor != 0);

                // generate image collage from urls
                ViewBag.ImageData = ImageProcessing(urls, user.size, counts, user.Resize);

                // genrate status response
                var responseTweetVM = new LoadUserViewModel
                {
                    Text = user.Text,
                    size = user.size,
                    Response = "Collage loaded"
                };

                return View(responseTweetVM);
            }
            catch (Exception ex)
            {
                ViewBag.errors = ex.Message.Replace("page", "user");
            }
            return View();
        }
Example #29
0
        private Task<StreamContent> StartTwitterUserStream(TwitterContext context)
        {
            return Task<StreamContent>.Factory.StartNew(() =>
            {
                bool firstWait = true;
                StreamContent sc = null;
                hadUserStreamFailure = false;

                context.Log = log;

                try
                {
                    context.UserStream
                        .Where(s => s.Type == LinqToTwitter.UserStreamType.User)
                        .Select(strm => strm)
                        .StreamingCallback(strm =>
                        {
                            try
                            {
                                lastCallBackTimeUserStream = DateTime.Now;
                                sc = strm;
                                if (strm != null)
                                {
                                    if (strm.Status == TwitterErrorStatus.RequestProcessingException)
                                    {
                                        var wex = strm.Error as WebException;
                                        if (wex != null && wex.Status == WebExceptionStatus.ConnectFailure)
                                        {
                                            log.WriteLine("{0}: LinqToTwitter UserStream Connection Failure (UserStream)", DateTime.Now);
                                            hadUserStreamFailure = true;
                                            //Will Be Restarted By Processing Queue
                                        }
                                    }
                                    else if (!string.IsNullOrEmpty(strm.Content))
                                    {
                                        var status = new Status(LitJson.JsonMapper.ToObject(strm.Content));
                                        if (status != null && !string.IsNullOrEmpty(status.StatusID))
                                        {
                                            var tweet = new Tweet(string.IsNullOrEmpty(status.RetweetedStatus.StatusID) ? status : status.RetweetedStatus);
                                            lock (queue_lock)
                                            {
                                                queue.Add(tweet);
                                            }
                                            log.WriteLine("{0}: Added Item to Queue (UserStream): {1}", DateTime.Now, tweet.TweetText);
                                        }
                                        else
                                        {
                                            //If you can handle friends we will look for them
                                            if (processingStep is ITweepProcessingStep)
                                            {
                                                var jsonDataFriends = LitJson.JsonMapper.ToObject(strm.Content)
                                                    .FirstOrDefault(x => x.Key == "friends");

                                                //If this is a friends collection update we will notify you
                                                if (!jsonDataFriends.Equals(default(KeyValuePair<string,LitJson.JsonData>)) &&
                                                    jsonDataFriends.Value != null &&
                                                    jsonDataFriends.Value.IsArray)
                                                {
                                                    var friends = new List<LazyLoader<Tweep>>();
                                                    for (int i = 0; i < jsonDataFriends.Value.Count; i++)
                                                    {
                                                        friends.Add(TwitterModel.Instance.GetLazyLoadedTweep(jsonDataFriends.Value[i].ToString()));
                                                    }

                                                    (processingStep as ITweepProcessingStep).ProcessTweeps(friends);
                                                }
                                                else
                                                    log.WriteLine("{0}: Unhandled Item in Stream (UserStream): {1}", DateTime.Now, strm.Content);
                                            }
                                            else
                                                log.WriteLine("{0}: Unhandled Item in Stream (UserStream): {1}", DateTime.Now, strm.Content);
                                        }
                                    }
                                    else
                                        log.WriteLine("{0}: Twitter Keep Alive (UserStream)", DateTime.Now);
                                }
                                else
                                    throw new ArgumentNullException("strm", "This value should never be null!");
                            }
                            catch (Exception ex)
                            {
                                log.WriteLine("{0}: Error (UserStream): {1}", DateTime.Now, ex.ToString());
                            }
                        }).SingleOrDefault();
                }
                catch (Exception ex)
                {
                    log.WriteLine("{0}: Error (UserStream): {1}", DateTime.Now, ex.ToString());
                }

                while (sc == null)
                {
                    if (firstWait)
                    {
                        log.WriteLine("{0}: Waiting On Twitter Connection (UserStream)", DateTime.Now);
                        firstWait = false;
                    }
                    System.Threading.Thread.Sleep(1000);
                }

                log.WriteLine("{0}: Twitter Connection Established (UserStream)", DateTime.Now);

                return sc;
            });
        }
Example #30
0
        public static List<Models.Location> SlimLocations(List<Models.Location> inList)
        {
            int Interval = inList.Count / (LocationHelper.maxLocations - 2);

            if (Interval < 2)
            {
                Interval = 2;
            }
            List<Models.Location> outList = new List<Models.Location>();

            for (int i = 0; i < inList.Count; i += Interval)
            {
                outList.Add(inList[i]);
            }

            //always add the last value - map always updated then plus other things rely on it!
            outList.Add(inList.Last());

            return outList;
        }