Esempio n. 1
0
def check_for_videos(sender, path_to_json, subject, subject_data,
                     subject_section_data, sessions_list):
    objNewVideo = dataloader.NewVideo()

    response = objNewVideo.new_video(sender, sessions_list,
                                     subject_data, subject_section_data)

    last_date = int(subject_section_data["last_date"])

    n = len(response["items"]) - 1

    while n >= 0:
        item = response["items"][n]

        if item["date"] > last_date:

            subject_id = {
                "subject_id": item["owner_id"]
            }

            item.update(subject_id)

            message, post_attachments =\
                objNewVideo.make_message(sender,
                                         sessions_list["admin_session"],
                                         item)

            message_object = {
                "message": message,
                "post_attachments": post_attachments
            }

            objNewVideo.send_message(sender,
                                     sessions_list["bot_session"],
                                     subject_data, subject_section_data,
                                     message_object)

            last_date = item["adding_date"]

            subject_section_data["last_date"] = str(last_date)
            # пока не знаю, что делать с total_last_date
            # if int(last_date) > int(subject_data["total_last_date"]):
            #     subject_data["total_last_date"] = str(last_date)

            datamanager.write_json(path_to_json,
                                   "video_checker_settings",
                                   subject_section_data)

            date = datetime.datetime.fromtimestamp(
                        int(last_date)).strftime("%d.%m.%Y %H:%M:%S")

            mess_for_log = subject_data["name"] +\
                "'s new video" + ": " + str(date)
            logger.message_output(sender, mess_for_log)

        n -= 1

    return subject_data
Esempio n. 2
0
def check_for_comments_photo(sender, path_to_json, subject, subject_data,
                             subject_section_data, sessions_list):
    objNewPhotoComment = dataloader.NewPhotoComment()

    response = objNewPhotoComment.new_photo_comment(sender,
                                                    sessions_list,
                                                    subject_data,
                                                    subject_section_data)

    last_date = int(subject_section_data["last_date"])

    n = len(response["items"]) - 1
    while n >= 0:
        item = response["items"][n]

        if item["date"] > last_date:

            message, comment_attachments =\
                objNewPhotoComment.make_message(sender,
                                                sessions_list["admin_session"],
                                                item, subject_data)

            message_object = {
                "message": message,
                "comment_attachments": comment_attachments
            }

            objNewPhotoComment.send_message(sender,
                                            sessions_list["bot_session"],
                                            subject_data,
                                            subject_section_data,
                                            message_object)

            last_date = item["date"]

            subject_section_data["last_date"] = str(last_date)
            # пока не знаю, что делать с total_last_date
            # if int(last_date) > int(subject_data["total_last_date"]):
            #     subject_data["total_last_date"] = str(last_date)

            datamanager.write_json(path_to_json,
                                   "photo_comments_checker_settings",
                                   subject_section_data)

            date = datetime.datetime.fromtimestamp(
                        int(last_date)).strftime("%d.%m.%Y %H:%M:%S")

            mess_for_log = subject_data["name"] +\
                "'s new comment under photo: " + str(date)
            logger.message_output(sender, mess_for_log)

        n -= 1

    return subject_data
Esempio n. 3
0
def update_data(entries_list):
    PATH = datamanager.read_path()
    fields_data = datamanager.read_json(PATH + "wall_monitor/", "data")

    fields_data["access_token"] = entries_list["entry_token"].get_text()
    fields_data["public_url"] = entries_list["entry_public_url"].get_text()
    fields_data["date"]["day"] = entries_list["entry_date_day"].get_text()
    fields_data["date"]["month"] = entries_list["entry_date_month"].get_text()
    fields_data["date"]["year"] = entries_list["entry_date_year"].get_text()
    fields_data["post_count"] = entries_list["entry_posts_count"].get_text()
    fields_data["evaluator_template"] = entries_list[
        "evaluator_template"].get_text()

    datamanager.write_json(PATH + "wall_monitor/", "data", fields_data)
Esempio n. 4
0
def reach_collector(vk_admin_session, owner_id, str_date, template_filedata):
    def get_posts(sender, vk_admin_session, owner_id):
        sender += " -> Get posts"

        values = {
            "owner_id": owner_id,
            "count": 100,
            "filter": "all"
        }

        response = vk_admin_session.method("wall.get", values)

        return response["items"]

    def selection_post(sender, str_date, posts):
        sender += " -> Selection post"

        UNIX_MINUTE = 60

        date = datetime.datetime.fromtimestamp(time.mktime(time.strptime(str_date, '%d-%m-%Y')))

        unix_date = int(time.mktime(date.timetuple()))

        begin_of_day = unix_date - UNIX_MINUTE * 10
        end_of_day = begin_of_day + UNIX_MINUTE * 60 * 24

        posts_per_day = []

        # i = len(posts) - 1
        i = 0

        while i < len(posts):
            if posts[i]["date"] >= begin_of_day and\
              posts[i]["date"] < end_of_day:
                posts_per_day.append(copy.deepcopy(posts[i]))

            i += 1

        return posts_per_day

    def get_reach(sender, vk_admin_session, owner_id, post_id):
        sender += " -> Get reach"

        values = {
            "owner_id": owner_id,
            "post_id": post_id
        }

        response = vk_admin_session.method("stats.getPostReach", values)

        return response[0]

    def sort_by_time(sender, posts_reach, template, str_date):
        sender += " -> Sort by time"

        log = copy.deepcopy(template)

        UNIX_MINUTE = 60

        i = 0

        while i < len(log):

            str_time_begin = log[str(i)]["time"][:5]
            str_date_begin = str_date + " " + str_time_begin

            date_begin = datetime.datetime.fromtimestamp(time.mktime(time.strptime(str_date_begin, '%d-%m-%Y %H:%M')))
            unix_date_begin = int(time.mktime(date_begin.timetuple()))

            str_time_end = log[str(i)]["time"][6:]
            str_date_end = str_date + " " + str_time_end

            date_end = datetime.datetime.fromtimestamp(time.mktime(time.strptime(str_date_end, '%d-%m-%Y %H:%M')))
            unix_date_end = int(time.mktime(date_end.timetuple()))

            begin_of_interval = unix_date_begin - UNIX_MINUTE * 10
            end_of_interval = unix_date_end - UNIX_MINUTE * 10

            if str_time_end == "00:00":
                end_of_interval += UNIX_MINUTE * 60 * 24

            count = 0
            reach = 0

            j = 0

            while j < len(posts_reach):

                if posts_reach[j]["date"] >= begin_of_interval and\
                   posts_reach[j]["date"] < end_of_interval:

                    count += 1

                    reach += posts_reach[j]["reach"]

                j += 1

            if count > 1:
                reach = reach / count

            reach = int(round(float(reach) / 100)) * 100

            log[str(i)]["value"] = reach

            i += 1

        return log

    def create_log(sender, str_date, log):
        date = datetime.datetime.fromtimestamp(time.mktime(time.strptime(str_date, '%d-%m-%Y')))

        weekday = date.isoweekday()
        day = int(datetime.datetime.strftime(date, '%d'))
        month = int(datetime.datetime.strftime(date, '%m'))

        loads_json = {
            "day_number": day,
            "month_number": month,
            "day_week": weekday,
            "coverage": log
        }

        return loads_json

    def set_filename(sender, str_date):
        sender += " -> Set file name"

        date = datetime.datetime.fromtimestamp(time.mktime(time.strptime(str_date, '%d-%m-%Y')))

        name_weekday = [
            "mon", "tue", "wed",
            "thu", "fri", "sat",
            "sun"
        ]

        name_month = [
            "jan", "feb", "mar",
            "apr", "may", "jun",
            "jul", "aug", "sep",
            "oct", "nov", "dec"
        ]

        weekday = date.isoweekday()
        day = int(datetime.datetime.strftime(date, '%d'))
        month = int(datetime.datetime.strftime(date, '%m'))

        file_name = "log_" + str(day) + "-" +\
                    name_month[month - 1] + "-" +\
                    name_weekday[weekday - 1]

        return file_name

    sender = "Main"

    PATH = datamanager.read_path()

    posts = get_posts(sender, vk_admin_session, owner_id)

    posts_per_day = selection_post(sender, str_date, posts)

    posts_reach = []

    i = len(posts_per_day) - 1

    while i >= 0:
        owner_id = posts_per_day[i]["owner_id"]
        post_id = posts_per_day[i]["id"]

        reach = copy.deepcopy(get_reach(sender, vk_admin_session, owner_id, post_id))
        date = posts_per_day[i]["date"]

        post = {
            "reach": reach["reach_subscribers"],
            "date": date
        }

        posts_reach.append(copy.deepcopy(post))

        i -= 1

    template_path = template_filedata["path"]
    template_filename = template_filedata["name"]

    template = datamanager.read_json(template_path, template_filename)

    log = copy.deepcopy(sort_by_time(sender, posts_reach, template, str_date))

    file_name = set_filename(sender, str_date)

    loads_json = create_log(sender, str_date, log)

    datamanager.write_json(PATH + "wall_monitor/reach_data/", file_name, loads_json)
Esempio n. 5
0
def check_for_posts(sender, path_to_json, subject, subject_data,
                    subject_section_data, sessions_list):
    objNewPost = dataloader.NewPost()

    response = objNewPost.new_post(sender, sessions_list, subject_data,
                                   subject_section_data)

    last_date = int(subject_section_data["last_date"])

    def sort_posts(posts):
        for j in range(len(posts) - 1):
            f = 0
            for i in range(len(posts) - 1 - j):
                if posts[i]["date"] < posts[i + 1]["date"]:
                    x = posts[i]
                    y = posts[i + 1]
                    posts[i + 1] = x
                    posts[i] = y
                    f = 1
            if f == 0:
                break
        return posts

    items = response["items"]

    if len(items) > 1:
        items = sort_posts(items)

    n = len(items) - 1

    while n >= 0:
        item = response["items"][n]

        if item["date"] > last_date:

            message, post_attachments =\
                objNewPost.make_message(sender,
                                        sessions_list["admin_session"],
                                        item)

            message_object = {
                "message": message,
                "post_attachments": post_attachments
            }

            objNewPost.send_message(sender, sessions_list["bot_session"],
                                    subject_data,
                                    subject_section_data, message_object)

            last_date = item["date"]

            subject_section_data["last_date"] = str(last_date)
            # пока не знаю, что делать с total_last_date
            # if int(last_date) > int(subject_data["total_last_date"]):
            #     subject_data["total_last_date"] = str(last_date)

            datamanager.write_json(path_to_json,
                                   "post_checker_settings",
                                   subject_section_data)

            date = datetime.datetime.fromtimestamp(
                        int(last_date)).strftime("%d.%m.%Y %H:%M:%S")

            post_type = subject_section_data["filter"]

            if post_type == "all":
                post_type = "post"

            mess_for_log = subject["name"] +\
                "'s new " +\
                post_type +\
                ": " + str(date)
            logger.message_output(sender, mess_for_log)

        n -= 1
Esempio n. 6
0
def check_for_comments_post(sender, path_to_json, subject, subject_data,
                            subject_section_data, sessions_list):
    objNewPostComment = dataloader.NewPostComment()

    response = objNewPostComment.get_posts(sender,
                                           sessions_list["admin_session"],
                                           subject_data, subject_section_data)

    last_date = int(subject_section_data["last_date"])

    posts = response["items"]

    comments = []

    n = len(posts) - 1

    while n >= 0:
        post = posts[n]

        response = objNewPostComment.new_post_comment(sender,
                                                      sessions_list,
                                                      post, subject_data,
                                                      subject_section_data)
        items = response["items"]

        if len(items) > 0 and last_date < items[0]["date"]:

            post_id = {
                "post_id": post["id"],
                "post_owner_id": post["owner_id"]
            }

            i = 0

            while i < len(items):
                items[i].update(post_id)

                i += 1

            comments.extend(items)

        n -= 1

    def sort_comments(comments):
        array = comments

        left = []
        equals = []
        right = []

        s = int((array[0]["date"] + array[int(len(array) / 2)]["date"] +
                 array[len(array) - 1]["date"]) / 3)

        for item in array:
            if item["date"] > s:
                left.append(item)
            elif item["date"] < s:
                right.append(item)
            else:
                equals.append(item)

        if len(left) > 1:
            left = sort_comments(left)
        if len(right) > 1:
            right = sort_comments(right)

        array = []
        array.extend(left)
        array.extend(equals)
        array.extend(right)

        return array

    if len(comments) > 1:
        comments = sort_comments(comments)

    n = len(comments) - 1

    while n >= 0:
        item = comments[n]

        if item["date"] > last_date:

            check = False

            if not check:

                if subject_section_data["check_by_communities"] == 1:

                    if str(item["from_id"])[0] == "-":
                        check = True

            if not check:

                if subject_section_data["check_by_attachments"] == 1:

                    if "attachments" in item:
                        attachments = item["attachments"]

                        i = 0

                        while i < len(attachments):

                            media_item = attachments[i]
                            if media_item["type"] == "photo" or\
                               media_item["type"] == "video" or\
                               media_item["type"] == "doc" or\
                               media_item["type"] == "link":
                                check = True

                            i += 1

            if not check:

                if subject_section_data["check_by_keywords"] == 1:

                    def char_changer(chars_for_changer, text):
                        chars = list(text)
                        for i in range(len(chars)):
                            if chars[i] in chars_for_changer:
                                chars[i] = chars_for_changer[chars[i]]
                        text = ''.join(chars)

                        return text

                    def check_algorithm(subject_section_data, text, check):

                        def check_by_len(condition, check,
                                         text, subject_section_data):
                            if len(text) == condition and\
                               len(subject_section_data["keywords"]) > 0:
                                text = text.lower()
                                keywords = subject_section_data["keywords"]

                                for keyword in keywords:
                                    if len(keyword) == condition:
                                        search_result =\
                                            text.find(keyword.lower())
                                        if search_result != -1:
                                            check = True
                                            break
                            return check

                        if len(text) > 0 and\
                           len(subject_section_data["keywords"]) == 0:
                            check = True

                        len_small_keywords = 2

                        for i in range(len_small_keywords):
                            check = check_by_len(i + 1, check,
                                                 text, subject_section_data)
                            if check:
                                break

                        if len(text) > len_small_keywords and\
                           len(subject_section_data["keywords"]) > 0:
                            text = text.lower()
                            keywords = subject_section_data["keywords"]

                            for keyword in keywords:
                                if len(keyword) > len_small_keywords:
                                    search_result = text.find(keyword.lower())
                                    if search_result != -1:
                                        check = True
                                        break
                        return check

                    if subject_section_data["check_by_charchange"] == 1:
                        text = item["text"]
                        chars_cyr_to_lat =\
                            subject_section_data["chars_cyr_to_lat"]
                        text = char_changer(chars_cyr_to_lat, text)
                        check = check_algorithm(subject_section_data, text, check)
                        if not check:
                            chars_lat_to_cyr =\
                                subject_section_data["chars_lat_to_cyr"]
                            text = char_changer(chars_lat_to_cyr, text)
                            check = check_algorithm(subject_section_data,
                                                    text, check)
                    else:
                        text = item["text"]
                        check = check_algorithm(subject_section_data,
                                                text, check)

            if check:
                message, comment_attachments =\
                    objNewPostComment.make_message(sender,
                                                   sessions_list["admin_session"],
                                                   item, subject_data)

                message_object = {
                    "message": message,
                    "comment_attachments": comment_attachments
                }

                objNewPostComment.send_message(sender,
                                               sessions_list["bot_session"],
                                               subject_data,
                                               subject_section_data,
                                               message_object)

                last_date = item["date"]

                subject_section_data["last_date"] = str(last_date)
                # пока не знаю, что делать с total_last_date
                # if int(last_date) > int(subject_data["total_last_date"]):
                #     subject_data["total_last_date"] = str(last_date)

                datamanager.write_json(path_to_json,
                                       "post_comments_checker_settings",
                                       subject_section_data)

                date = datetime.datetime.fromtimestamp(
                            int(last_date)).strftime("%d.%m.%Y %H:%M:%S")

                mess_for_log = subject_data["name"] +\
                    "'s new comment under post: " + str(date)
                logger.message_output(sender, mess_for_log)

        if n == 0 and last_date < item["date"]:
            last_date = item["date"]
            subject_section_data["last_date"] = str(last_date)

            datamanager.write_json(path_to_json,
                                   "post_comments_checker_settings",
                                   subject_section_data)

        n -= 1

    return subject_data
Esempio n. 7
0
def check_for_topics(sender, path_to_json, subject, subject_data,
                     subject_section_data, sessions_list):
    objNewTopicMessage = dataloader.NewTopicMessage()

    response, subject_data, list_response =\
        objNewTopicMessage.new_topic_message(sender,
                                             sessions_list,
                                             subject_data,
                                             subject_section_data)

    n = 0

    while n < len(list_response):

        comments_values = list_response[n]

        j = len(comments_values["comments"]) - 1

        while j >= 0:

            item = comments_values["comments"][j]
            last_date = comments_values["last_date"]

            if item["date"] > int(last_date):

                message, post_attachments =\
                    objNewTopicMessage.make_message(sender,
                                                    sessions_list["admin_session"],
                                                    subject_data,
                                                    comments_values, item)

                message_object = {
                    "message": message,
                    "post_attachments": post_attachments
                }

                objNewTopicMessage.send_message(sender,
                                                sessions_list["bot_session"],
                                                subject_data,
                                                subject_section_data,
                                                message_object)

                last_date = item["date"]

                k = 0

                while k < len(subject_section_data["topics"]):

                    if comments_values["topic_id"] ==\
                      subject_section_data["topics"][k]["id"]:
                        subject_section_data["topics"][k]["last_date"] =\
                            last_date

                    k += 1

                # пока не знаю, что делать с total_last_date
                # x = 0
                # while x < len(subject_data["topics"]):
                #     topic = subject_data["topics"][x]
                #     if int(topic["last_date"]) >\
                #        int(subject_data["total_last_date"]):
                #         subject_data["total_last_date"] =\
                #             str(topic["last_date"])
                #     x += 1

                datamanager.write_json(path_to_json,
                                       "topic_checker_settings",
                                       subject_section_data)

                date = datetime.datetime.fromtimestamp(
                            int(last_date)).strftime("%d.%m.%Y %H:%M:%S")

                mess_for_log = comments_values["topic_title"] +\
                    "'s new comment" + ": " + str(date)
                logger.message_output(sender, mess_for_log)

            j -= 1

        n += 1

    return subject_data
Esempio n. 8
0
def check_for_comments_video(sender, path_to_json, subject, subject_data,
                             subject_section_data, sessions_list):
    objNewVideoComment = dataloader.NewVideoComment()

    response = objNewVideoComment.get_videos(sender,
                                             sessions_list["admin_session"],
                                             subject_data, subject_section_data)

    last_date = int(subject_section_data["last_date"])

    videos = response["items"]

    comments = []

    n = len(videos) - 1

    while n >= 0:
        video = videos[n]

        response = []
        items = []

        if video["owner_id"] == subject_data["owner_id"]:
            response = objNewVideoComment.new_video_comment(sender,
                                                            sessions_list,
                                                            video, subject_data,
                                                            subject_section_data)
            items = response["items"]

        if len(items) > 0 and last_date < items[0]["date"]:

            video_id = {
                "video_id": video["id"],
                "video_owner_id": video["owner_id"]
            }

            i = 0

            while i < len(items):
                items[i].update(video_id)

                i += 1

            comments.extend(items)

        n -= 1

    def sort_comments(comments):
        array = comments

        left = []
        equals = []
        right = []

        s = int((array[0]["date"] + array[int(len(array) / 2)]["date"] +
                 array[len(array) - 1]["date"]) / 3)

        for item in array:
            if item["date"] > s:
                left.append(item)
            elif item["date"] < s:
                right.append(item)
            else:
                equals.append(item)

        if len(left) > 1:
            left = sort_comments(left)
        if len(right) > 1:
            right = sort_comments(right)

        array = []
        array.extend(left)
        array.extend(equals)
        array.extend(right)

        return array

    if len(comments) > 1:
        comments = sort_comments(comments)

    n = len(comments) - 1

    while n >= 0:
        item = comments[n]

        if item["date"] > last_date:

            message, comment_attachments =\
                objNewVideoComment.make_message(sender,
                                                sessions_list["admin_session"],
                                                item, subject_data)

            message_object = {
                "message": message,
                "comment_attachments": comment_attachments
            }

            objNewVideoComment.send_message(sender,
                                            sessions_list["bot_session"],
                                            subject_data,
                                            subject_section_data,
                                            message_object)

            last_date = item["date"]

            subject_section_data["last_date"] = str(last_date)
            # пока не знаю, что делать с total_last_date
            # if int(last_date) > int(subject_data["total_last_date"]):
            #     subject_data["total_last_date"] = str(last_date)

            datamanager.write_json(path_to_json,
                                   "video_comments_checker_settings",
                                   subject_section_data)

            date = datetime.datetime.fromtimestamp(
                        int(last_date)).strftime("%d.%m.%Y %H:%M:%S")

            mess_for_log = subject_data["name"] +\
                "'s new comment under video: " + str(date)
            logger.message_output(sender, mess_for_log)

        n -= 1

    return subject_data