Пример #1
0
def update_all():

    user_list = SQ.get_user_list('Active')

    try:
        start_idx = user_list.index(
            OPTIONS.start_at_user[0].lower()) if OPTIONS.start_at_user else 0

    except ValueError:
        user = SQ.get_user(OPTIONS.start_at_user[0])

        if user:
            MsgPrinter.print_error("User [ {} ] is marked as '{}'!".format(
                user[0], user[1]))
            print(
                "\t\t\tTry using the '--check_again' option to check if its accessible again."
            )
            print(
                "\t\t\tYou can also use '--update_status' to manually change its status."
            )

        else:
            MsgPrinter.print_error(
                "User [ {} ] is not in the database!".format(
                    OPTIONS.start_at_user[0]))

        return

    if OPTIONS.skip:
        for user in OPTIONS.skip:
            if user.lower() in user_list: user_list.remove(user)

    for user in user_list[start_idx::]:
        MsgPrinter.print_info("Updating User: {}".format(user))
        user_timeline(user)
def fuse_users(user_one, user_two):

    if SQ.get_user(user_one) is None or SQ.get_user(user_two) is None:
        raise Queries.Exceptions.UnknownUser(
            "Both or one of the users provided are not present in the database!"
            .format(user))

    user_one_folder = os.path.join(os.getcwd(), user_one)
    user_two_folder = os.path.join(os.getcwd(), user_two)

    for _, _, files in os.walk(user_one_folder):

        for file in files:

            if user_one.lower() in file.lower():

                old_file = os.path.join(user_one_folder, file)

                try:
                    new_file = os.path.join(
                        user_two_folder,
                        file.lower().replace(user_one.lower(), user_two))
                    os.rename(old_file, new_file)

                except FileExistsError:
                    new_file = "[Duplicate] " + file.lower().replace(
                        user_one.lower(), user_two)
                    os.rename(old_file, new_file)

                Queries.Exceptions.print_info(
                    "Changed name of file {} to {}".format(old_file, new_file))

    shutil.rmtree(user_one_folder)
    Queries.Exceptions.print_info(
        "Deleted folder [ {} ]".format(user_one_folder))

    db = DB.database()
    db.query("DELETE FROM TWITTER_USERS WHERE lower(TWEET_AUTHOR) = ?",
             values=(user_one.lower(), ),
             commit=True)
    db.close()
Пример #3
0
def user(user, last_id=None, last_lookup=None):

	if SQ.get_user(user):
		Queries.Exceptions.print_error("### ERROR ### -- User [ {} ] already exists!".format(user))
		return

	values = [user.lower()]
	values.append('Active' if last_lookup and last_id else 'Not Accessible')
	values.append(last_id if last_id else 0)
	values.append(last_lookup if last_lookup else time.strftime('%Y-%m-%d %X', time.localtime()))
	
	db = DB.database()
	db.query(statement="INSERT INTO TWITTER_USERS VALUES(?,?,?,?)", values=tuple(values), commit=True)
	db.close()
	
	Queries.Exceptions.print_info('Added user [ {} ] to the database'.format(user))
def update_user(user, status=None):

    db_user = SQ.get_user(user)

    if db_user is None:
        raise Queries.Exceptions.UnknownUser(
            "We couldn't find any user with the name [ {} ] in the database!".
            format(user))

    db = DB.database()

    if status:
        if status.lower().startswith('a'): status = 'Active'
        elif status.lower().startswith('n'): status = 'Not Accessible'
        elif status.lower().startswith('p'): status = 'Protected'
        elif status.lower().startswith('s'): status = 'Suspended'
        elif status.lower().startswith('d'): status = 'Deleted'
        else:
            raise Queries.Exceptions.UnknownStatus(
                "Status not recognized: {}".format(status))

        if db_user[1] != status:
            db.query(
                statement=
                "UPDATE TWITTER_USERS SET STATUS = ? WHERE lower(TWEET_AUTHOR) = ?",
                values=(status, user.lower()),
                commit=True)
            Queries.Exceptions.print_info(
                "=====> Changed status of [ {} ] to '{}'\n".format(
                    user, status))

    try:
        tweet_id, tweet_date = SQ.get_last_tweet_from_user(user)
        db.query(
            statement=
            "UPDATE TWITTER_USERS SET TWEET_ID = ?, LAST_LOOKUP = ? WHERE lower(TWEET_AUTHOR) = ?",
            values=(tweet_id, tweet_date, user.lower()),
            commit=True)
    except TypeError as err:
        logging.warning(
            "Could not find any tweets whose author is the user [ {} ] in the DOWNLOADED_TWEETS table"
        )

    db.close()
def delete_user(user):
    if SQ.get_user(user) is None:
        raise Queries.Exceptions.UnknownUser(
            "We couldn't find any user with the name [ {} ] in the database!".
            format(user))

    values = [user.lower()]
    values.append(time.strftime('%Y-%m-%d %X', time.localtime()))

    db = DB.database()
    db.query("DELETE FROM TWITTER_USERS WHERE lower(TWEET_AUTHOR) = ?",
             values=(user.lower(), ),
             commit=True)
    db.query("INSERT INTO DELETED_USERS_HISTORY VALUES(?,?)",
             values=tuple(values),
             commit=True)
    db.close()

    shutil.rmtree(os.path.join(os.getcwd(), user), ignore_errors=True)

    Queries.Exceptions.print_info(
        "Database updated! User [ {} ] has been deleted!".format(user))
    Queries.Exceptions.print_info("Folder deleted!")
Пример #6
0
def user_timeline(username):

    save_folder = username
    os.makedirs(username, exist_ok=True)

    try:
        tweets = API.user_timeline(
            screen_name=username,
            count=200,
            exclude_replies=OPTIONS.no_replies,
            include_rts=OPTIONS.no_retweets,
            tweet_mode='extended',
            max_id=OPTIONS.start_at_id[0] if OPTIONS.start_at_id else None)

        while len(tweets) > 0:

            for tweet in tweets:
                process_tweet(tweet, save_folder)

            tweets = API.user_timeline(screen_name=username,
                                       count=200,
                                       exclude_replies=OPTIONS.no_replies,
                                       include_rts=OPTIONS.no_retweets,
                                       tweet_mode='extended',
                                       max_id=(tweets[-1].id - 1))

        if SQ.get_user(username) is None:
            IQ.user(username)

        #UQ.update_user(username, status='Active')

    except tweepy.error.TweepError as err:

        if err.response.status_code == 429:
            error_message = 'The request limit for this resource has been reached.'
            IQ.error(username, 'RateLimit', 429)

        else:
            error_code, error_message = err.response.json(
            )['errors'][0].values()

            if error_code == 63:  # User Suspended
                UQ.update_user(username, status='Suspended')
                IQ.error(username, 'Suspended', error_code)

            elif error_code == 144:  # Tweet Deleted
                UQ.update_user(username, status='Deleted')
                IQ.error(username, 'Deleted', error_code)

            elif error_code == 179:  # User Private
                UQ.update_user(username, status='Protected')
                IQ.error(username, 'Protected', error_code)

        MsgPrinter.print_error(error_message)

    except (MsgPrinter.MaxDupesFound, MsgPrinter.MaxTweetsFetched) as err:
        global DUPES_COUNT, FETCHED_TWEETS_COUNT
        DUPES_COUNT = 0
        FETCHED_TWEETS_COUNT = 0
        MsgPrinter.print_warning(err)

    except Exception as err:
        MsgPrinter.print_error(err)
def rename_user(old_user_name, new_user_name, command):
    db = DB.database()

    if SQ.get_user(old_user_name) is None:
        raise Queries.Exceptions.UnknownUser(
            "We couldn't find any user with the name [ {} ] in the database!".
            format(old_user_name))

    if new_user_name != sanitize_filename(new_user_name):
        raise Queries.Exceptions.InvalidName(
            "User [ {} ] already exists in the database!".format(
                new_user_name))

    if SQ.get_user(new_user_name):
        raise Queries.Exceptions.UserExists(
            "User [ {} ] already exists in the database!".format(
                new_user_name))

    if os.path.isdir(os.path.join(os.getcwd(), new_user_name)):
        raise Queries.Exceptions.FolderExists(
            "A folder named [ {} ] already exists!".format(new_user_name))

    db.query(
        "UPDATE TWITTER_USERS SET TWEET_AUTHOR = ? WHERE lower(TWEET_AUTHOR) = ?",
        values=(new_user_name, old_user_name.lower()))

    folder_to_rename = os.path.join(os.getcwd(), old_user_name)

    for _, _, files in os.walk(folder_to_rename):

        for file in files:

            try:

                if old_user_name.lower() in file.lower():

                    old_file = os.path.join(folder_to_rename, file)
                    renamed_file = file.lower().replace(
                        old_user_name.lower(), new_user_name)
                    new_file = os.path.join(folder_to_rename, renamed_file)
                    os.rename(old_file, new_file)

            except FileExistsError:

                renamed_file = "[Duplicate] " + file.lower().replace(
                    old_user_name.lower(), new_user_name)
                new_file = os.path.join(folder_to_rename, renamed_file)
                os.rename(old_file, new_file)

        break

    os.rename(folder_to_rename, os.path.join(os.getcwd(), new_user_name))
    Queries.Exceptions.print_info(
        "====> User [ {} ] changed its name to [ {} ]".format(
            old_user_name, new_user_name))

    values = [old_user_name.lower()]
    values.append(new_user_name.lower())
    values.append(time.strftime('%Y-%m-%d %X', time.localtime()))
    values.append(command)
    db.query(statement="INSERT INTO RENAMED_USERS_HISTORY VALUES(?,?,?,?)",
             values=tuple(values),
             commit=True)
    db.close()