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
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
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)
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)
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
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
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
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