public TwitterAPPUser LoadUserByScreenName(string screenName)
        {
            TwitterAPPUser twitterUser = null;

            var command = new MySqlCommand("SELECT id, followersCount, friendsCount, userProcessed FROM TwitterUser WHERE screen_name = ?screen_name");
            command.Parameters.AddWithValue("?screen_name", screenName);

            command.Connection = GenerateConnection();
            command.Connection.Open();
            var dr = command.ExecuteReader();

            if (dr.Read())
            {
                twitterUser = new TwitterAPPUser();
                twitterUser.screen_name = screenName;
                twitterUser.id_str = dr.GetString(0);
                twitterUser.followers_count = dr.GetInt32(1);
                twitterUser.friends_count = dr.GetInt32(2);
                twitterUser.userProcessed = dr.GetBoolean(3);
            }
            dr.Close();
            command.Connection.Close();
            return twitterUser;

        }
 protected UserInfo ExtractUserInfo(ITwitterExtractorByUser extractor, TwitterAPPUser user)
 {
     var userInfo = new TwitterRepstr_User();
     var jsonResponse  = extractor.GetResponse(user);
     var response = JsonConvert.DeserializeObject<UserInfo>(jsonResponse);
     return response;
 }
 public void SaveUserFollower(TwitterAPPUser user, TwitterAPPUser followerUser)
 {
     var command = new SqlCeCommand("INSERT INTO SEGUIDORES_TWITTER (IDTWITTER, IDTWITTERSEGUIDOR) VALUES (@IDTWITTER, @IDTWITTERSEGUIDOR)");
     command.Parameters.Add("IDTWITTER", user.id_str);
     command.Parameters.Add("IDTWITTERSEGUIDOR", followerUser.id_str);
     SQLOperation.ExecuteSQLCommand(command);
 }
 public void SaveUserFollower(TwitterAPPUser user, TwitterAPPUser followerUser)
 {
     var command = new SqlCeCommand("INSERT INTO TwitterFollowers (id, id_Follower) VALUES (@id, @id_Follower)");
     command.Parameters.Add("id", user.id_str);
     command.Parameters.Add("id_Follower", followerUser.id_str);
     SQLOperation.ExecuteSQLCommand(command);
 }
 public void SaveNewUser(TwitterAPPUser user)
 {
     
     var command = new SqlCeCommand("INSERT INTO USUARIOS_TWITTER (IDTWITTER, USERTWITTER) VALUES (@IDTWITTER, @USERTWITTER)");
     command.Parameters.Add("IDTWITTER", user.id_str);
     command.Parameters.Add("USERTWITTER", user.screen_name);
     SQLOperation.ExecuteSQLCommand(command);
 }
        public void SaveNewUser(TwitterAPPUser user)
        {

            var command = new SqlCeCommand("INSERT INTO TwitterUser (id, screen_name, followersCount, friendsCount) VALUES (@id, @screen_name, @followersCount, @friendsCount)");
            command.Parameters.Add("id", user.id_str);
            command.Parameters.Add("screen_name", user.screen_name);
            command.Parameters.Add("followersCount", user.followers_count);
            command.Parameters.Add("friendsCount", user.friends_count);
            SQLOperation.ExecuteSQLCommand(command);
        }
 public void SaveUserFollower(TwitterAPPUser user, TwitterAPPUser followerUser)
 {
     var command = new MySqlCommand("INSERT INTO TwitterFollowers (id, id_Follower) VALUES (?id, ?id_Follower)");
     command.Parameters.AddWithValue("?id", user.id_str);
     command.Parameters.AddWithValue("?id_Follower", followerUser.id_str);
     command.Connection = GenerateConnection();
     command.Connection.Open();
     command.ExecuteNonQuery();
     command.Connection.Close();
 }
        public void SaveNewUser(TwitterAPPUser user)
        {

            var conn = GenerateConnection();
            conn.Open();

            var command = conn.CreateCommand();
            command.CommandText = "INSERT INTO TwitterUser (id, screen_name, followersCount, friendsCount, userProcessed) VALUES (?id, ?screen_name, ?followersCount, ?friendsCount, 0)";
            command.Parameters.AddWithValue("?id", user.id_str);
            command.Parameters.AddWithValue("?screen_name", user.screen_name);
            command.Parameters.AddWithValue("?followersCount", user.followers_count);
            command.Parameters.AddWithValue("?friendsCount", user.friends_count);


            command.ExecuteNonQuery();
            conn.Close();
        }
        public TwitterAPPUser LoadUser(string userId)
        {
            TwitterAPPUser twitterUser = null;

            var command = new SqlCeCommand("SELECT USERTWITTER FROM USUARIOS_TWITTER WHERE IDTWITTER = @IDTWITTER");
            command.Parameters.Add("IDTWITTER", userId);
            
            var dr = SQLOperation.ExecuteSQLCommandWithResult(command);

            if (dr.Read())
            {
                twitterUser = new TwitterAPPUser();
                twitterUser.id_str = userId;
                twitterUser.screen_name = dr.GetString(0); 
            }
            dr.Close();

            return twitterUser;

        }
        public void teste()
        {
            var relationshipReps = new GetRelationshipStatus();
            var userSource = new TwitterAPPUser();
            var userTarget = new TwitterAPPUser();
            var opt = new RepositoryOptions();

            var userRep = new LoadUser();

            opt.twitterUser.screen_name = "amosbatista";
            userSource = userRep.GetUser(opt);

            opt.twitterUser.screen_name = "oficial_cp";
            userTarget = userRep.GetUser(opt);

            opt.twitterUser = userSource;
            opt.twitterUser_Target = userTarget;

            var result = relationshipReps.Get(opt);
            result.ToString();
        }
        public List<TwitterAPPUser> LoadAllUnrecognizedUsers()
        {
            List<TwitterAPPUser> userList = null;

            var command = new SqlCeCommand("SELECT IDTWITTER, USERTWITTER FROM USUARIOS_TWITTER WHERE USERTWITTER = 'Not identified'");

            var dr = SQLOperation.ExecuteSQLCommandWithResult(command);
            TwitterAPPUser twitterUser;

            while(dr.Read())
            {
                if (userList == null)
                    userList = new List<TwitterAPPUser>();

                twitterUser = new TwitterAPPUser();
                twitterUser.id_str = dr.GetInt64(0).ToString(); 
                twitterUser.screen_name = dr.GetString(1);
                userList.Add(twitterUser);
            }
            dr.Close();
            return userList;
        }
        public TwitterAPPUser LoadUserByScreenName(string screenName)
        {
            TwitterAPPUser twitterUser = null;

            var command = new SqlCeCommand("SELECT id, followersCount, friendsCount FROM TwitterUser WHERE screen_name = @screen_name");
            command.Parameters.Add("screen_name", screenName);

            var dr = SQLOperation.ExecuteSQLCommandWithResult(command);

            if (dr.Read())
            {
                twitterUser = new TwitterAPPUser();
                twitterUser.screen_name = screenName;
                twitterUser.id_str = dr.GetString(0);
                twitterUser.followers_count = dr.GetInt32(1);
                twitterUser.followers_count = dr.GetInt32(2);
            }
            dr.Close();

            return twitterUser;

        }
        public TwitterAPPUser LoadUser(string userId)
        {
            TwitterAPPUser twitterUser = null;

            var command = new SqlCeCommand("SELECT screen_name, followersCount, friendsCount FROM TwitterUser WHERE id = @id");
            command.Parameters.Add("id", userId);

            var dr = SQLOperation.ExecuteSQLCommandWithResult(command);

            if (dr.Read())
            {
                twitterUser = new TwitterAPPUser();
                twitterUser.id_str = userId;
                twitterUser.screen_name = dr.GetString(0);
                twitterUser.followers_count = dr.GetInt32(1);
                twitterUser.followers_count = dr.GetInt32(2);
            }
            dr.Close();

            return twitterUser;

        }
        public void GenerateNetWorkStatistics(NetWorkStatisticsProperties searchProp)
        {
            // Cleaning database
            var userDB = new UserRepository();
            var followerDB = new UserRelationshipRepository();

            // Main list
            var processedUserList = new TwitterUserList(); // Used in the interaction

            // Arrays of friends and followers
            var friendsReps = new FriendsIdList();
            var followersReps = new FollowerIdList();
            var userLookUp = new UserLookUp();
            var relationshipReps = new GetRelationshipStatus();

            var followersList = new List<TwitterAPPUser>();
            var followersIdList = new UserIdList();
            var friendsList = new List<TwitterAPPUser>();
            var friendsIdList = new UserIdList();

            var opt = new RepositoryOptions();

            var newFollowersUser = new TwitterAPPUser();
            var newFriendUser = new TwitterAPPUser();
            var newUserToSave = new TwitterAPPUser();

            // Lists of FR and FF from each user
            var actualUserFriendIdList = new UserIdList();
            var actualUserFollowerIdList = new UserIdList();
            var idListToProcess = new UserIdList();
            var userListToProcess = new List<TwitterAPPUser>();

            var relationshipStatus = new RelationshipStatus_FinalResult();

            // Determine the kind of process
            if (searchProp.generateNewStatistic == true)
            {
                userDB.EraseAllData();
                followerDB.EraseAllData();

                // Setting the user for the first time
                opt.twitterUser.screen_name = searchProp.twitterName;

                // Loading me as the first user
                var twitterUserRep = new LoadUser();
                var mainUser = twitterUserRep.GetUser(opt);

                // Save the user
                userDB.SaveNewUser(mainUser);
                userDB.SetUserAsProcessed(mainUser); // To impeding the first user to be processed again

                // Generation of FR (friends) and FF (followers) list
                opt.twitterUser.id_str = mainUser.id_str;

                // Getting the friends and followers list
                followersIdList = followersReps.GetFollowers(opt);
                friendsIdList = friendsReps.GetFriends(opt);

                opt.userList = followersIdList;
                followersList = userLookUp.GetUserCompleteList(opt);

                opt.userList = friendsIdList;
                friendsList = userLookUp.GetUserCompleteList(opt);


                // Reading all followers list
                foreach (TwitterAPPUser user in followersList)
                {
                    // Save the current user
                    userDB.SaveNewUser(user);

                    // Save the relationship
                    followerDB.SaveUserFollower(mainUser, user);
                }

                // Reading all friends list
                foreach (TwitterAPPUser user in friendsList)
                {
                    // Save the current user
                    userDB.SaveNewUser(user);

                    // Save the relationship
                    followerDB.SaveUserFollower(user, mainUser);
                }

                // Combinning the 2 list
                userListToProcess.AddRange(friendsList);
                userListToProcess.AddRange(followersList);
            }
            else
            {
                // Load the list of the users
                userListToProcess = userDB.LoadUnprocessedUsers();
            }

            // Reading all this list, to get each contacts
            foreach (TwitterAPPUser userSource in userListToProcess)
            {

                foreach (TwitterAPPUser userTarget in userListToProcess)
                {
                    opt.twitterUser = userSource;
                    opt.twitterUser_Target = userTarget;

                    relationshipStatus = relationshipReps.Get(opt);

                    // Saving the user relationship, by the result response
                    if (relationshipStatus.relationship.target.following == true)
                        followerDB.SaveUserFollower(userSource, userTarget);
                    if (relationshipStatus.relationship.target.followed_by == true)
                        followerDB.SaveUserFollower(userTarget, userSource);
                }

                // After all, indicate the user was processed
                userDB.SetUserAsProcessed(userSource);
            }
        }
        public void SetUserAsProcessed(TwitterAPPUser user)
        {

            var command = new MySqlCommand("UPDATE TwitterUser SET userProcessed = 1 WHERE ID = ?id");
            command.Parameters.AddWithValue("?id", user.id_str);
            
            command.Connection = GenerateConnection();
            command.Connection.Open();
            command.ExecuteNonQuery();
            command.Connection.Close();
        }
        public List<TwitterAPPUser> LoadUnprocessedUsers()
        {
            var userList = new List<TwitterAPPUser>();
            TwitterAPPUser newUser;

            var command = new MySqlCommand("SELECT id, screen_name, followersCount, friendsCount, userProcessed FROM TwitterUser WHERE userProcessed = 0");

            command.Connection = GenerateConnection();
            command.Connection.Open();
            var dr = command.ExecuteReader();

            while (dr.Read())
            {
                newUser = new TwitterAPPUser();
                newUser.id_str = dr.GetString(0);
                newUser.screen_name = dr.GetString(1);
                newUser.followers_count = dr.GetInt32(2);
                newUser.friends_count = dr.GetInt32(3);
                newUser.userProcessed = dr.GetBoolean(4);

                userList.Add(newUser);
            }
            dr.Close();
            command.Connection.Close();
            return userList;
        }
        private void ExtractFollowersAndFriendsFromUser(string userId, UserIdList contactList)
        {
            var opt = new RepositoryOptions();
            var friendsReps = new FriendsIdList();
            var followersReps = new FollowerIdList();

            var mainUser = new TwitterAPPUser();
            mainUser.id_str = userId;

            var newUserToSave = new TwitterAPPUser();

            var userDB = new UserRepository();
            var followerDB = new UserRelationshipRepository();


            // Get the friend list of this user
            opt.twitterUser.id_str = mainUser.id_str;
            var actualUserFriendIdList = friendsReps.GetFriends(opt);

            // Select a list of these friends that are in the friends/followers list of the user
            var idListToProcess = new UserIdList();
            idListToProcess.ids.AddRange(from actualUserId in actualUserFriendIdList.ids where contactList.ids.Contains(actualUserId) select actualUserId);

            // List all this users ids
            foreach (decimal actualUserId in idListToProcess.ids)
            {
                // Save the relationship of this user
                newUserToSave = new TwitterAPPUser();
                newUserToSave.id_str = actualUserId.ToString();
                followerDB.SaveUserFollower(newUserToSave, mainUser);
            }

            // Get the follower list of this user
            idListToProcess.ids.Clear();
            opt.twitterUser.id_str = mainUser.id_str;
            var actualUserFollowerIdList = followersReps.GetFollowers(opt);

            // Select a list of these followers that are in the friends/followers list of the user
            idListToProcess.ids.AddRange(from actualUserId in actualUserFollowerIdList.ids where contactList.ids.Contains(actualUserId) select actualUserId);

            // List all this users ids
            foreach (decimal actualUserId in idListToProcess.ids)
            {
                // Save the relationship of this user
                newUserToSave = new TwitterAPPUser();
                newUserToSave.id_str = actualUserId.ToString();
                followerDB.SaveUserFollower(mainUser, newUserToSave);
            }

            // After all, indicate the user was processed
            userDB.SetUserAsProcessed(mainUser);
        }
 protected TwitterProcess()
 {
     MyUser = new TwitterAPPUser();
     MyUser.id_str = MyUserData.TwitterID;
     MyUser.screen_name = MyUserData.TwitterUser;
 }
        public void GenerateNetWorkStatistics(string twitterName, string deepnessCount)
        {
            // Cleaning database
            var userDB = new UserRepository();
            var followerDB = new UserRelationshipRepository();

            userDB.EraseAllData();
            followerDB.EraseAllData();

            // Main list
            var userListToProcess = new TwitterUserList();
            var processedUserList = new TwitterUserList(); // Used in the interaction

            // Arrays of friends and followers
            var friendsReps = new FriendsIdList();
            var followersReps = new FollowerIdList();
            var userLookUp = new UserLookUp();

            var followersList = new List<TwitterAPPUser>();
            var followersIdList = new UserIdList();
            var friendsList = new List<TwitterAPPUser>();
            var friendsIdList = new UserIdList();

            var opt = new RepositoryOptions();

            var newFollowersUser = new TwitterAPPUser();
            var newFriendUser = new TwitterAPPUser();

            // Setting the user for the first time
            opt.twitterUser.screen_name = twitterName;

            // Loading me as the first user
            var twitterUserRep = new LoadUser();
            var firstUser = twitterUserRep.GetUser(opt);

            // Setting the first array
            userListToProcess.users.Add(firstUser);
            opt.twitterUser.screen_name = "";

            // Main loop
            for (int processorCount = 0; processorCount < Int16.Parse(deepnessCount); processorCount++)
            {

                foreach (TwitterAPPUser user in userListToProcess.users)
                {
                    // Setting the user for the first time
                    opt.twitterUser.id_str = user.id_str;

                    // Verify if the user is the same of the first
                    if (user.id_str == firstUser.id_str && userListToProcess.users.Count > 1)
                        continue;

                    // Getting the friends and followers list
                    followersIdList = followersReps.GetFollowers(opt);
                    opt.userList.ids = followersIdList.ids;
                    //followersList = userLookUp.GetUserCompleteList(opt);
                    
                    friendsIdList = friendsReps.GetFriends(opt);
                    opt.userList.ids = friendsIdList.ids;
                    //friendsList = userLookUp.GetUserCompleteList(opt);

                    foreach (decimal followerUserId in followersIdList.ids )
                    {
                        newFollowersUser = new TwitterAPPUser();
                        newFollowersUser.id_str = followerUserId.ToString();
                        newFollowersUser.screen_name = "";

                        // Saving the the twitters users
                        //if (userDB.LoadUser(newFollowersUser.id_str) == null)
                        userDB.SaveNewUser(newFollowersUser);

                        followerDB.SaveUserFollower(user, newFollowersUser);

                        // Appending these users to the result
                        processedUserList.users.Add(newFollowersUser);
                    }


                    foreach (decimal friendUserId in friendsIdList.ids)
                    {

                        newFriendUser = new TwitterAPPUser();
                        newFriendUser.id_str = friendUserId.ToString();
                        newFriendUser.screen_name = "";

                        // Saving the the twitters users
                        //if (userDB.LoadUser(newFriendUser.id_str) == null)
                        userDB.SaveNewUser(newFriendUser);

                        followerDB.SaveUserFollower(newFriendUser, user);

                        // Appending these users to the result
                        processedUserList.users.Add(newFriendUser);
                    }

                    
                    processedUserList.users.AddRange(friendsList);
                }

                // Setting the result to the main list
                userListToProcess.users.Clear();
                userListToProcess.users.AddRange(processedUserList.users); 
                processedUserList.users.Clear();
            }
        }