Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- """
- Club Penguin Wiki chat log searcher.
- Use username = None to match any user.
- term may be either a string to find or a regular expression.
- """
- __author__ = "Hey.youcp, nagi123"
- __version__ = "1.0"
- __date__ = "April 1, 2018"
- import os
- import html
- import subprocess
- import datetime
- import re
- import requests
- def daterange(start, end):
- for i in range((end - start).days + 1):
- yield start + datetime.timedelta(i)
- def search(username, term, date):
- response = requests.get(date.strftime("http://clubpenguin.wikia.com/wiki/Club_Penguin_Wiki:Chat/Logs/%d_%B_%Y?action=raw"))
- if not response.text:
- return None, 0
- lines, line_count = [], 0
- for line in response.iter_lines(decode_unicode=True):
- line = html.unescape(line)
- match = re.match(r"\[?.*?\]? <(.*?)>", line)
- if (username is None or match is not None and match.group(1).lower() == username.lower()) and re.search(term, line, flags=re.IGNORECASE):
- lines.append(line)
- line_count += 1
- return lines, line_count
- def search_all(username, term, start, end):
- if username is None:
- print('Searching for "{}"'.format(term))
- else:
- print('Searching for messages by "{}" containing "{}"'.format(username, term))
- pages_found, total_results_count = 0, 0
- with open("output.txt", "w", encoding="utf-8") as output:
- for date in daterange(start, end):
- lines, line_count = search(username, term, date)
- if lines is None:
- print(date.strftime("%B %d, %Y logs not found."))
- continue
- results_count = 0
- for line in lines:
- if results_count == 0:
- output.write(date.strftime("\n===%B %d, %Y===\n"))
- output.write(line + "\n")
- results_count += 1
- print(date.strftime("%B %d, %Y: {} lines, {} results.".format(line_count, results_count)))
- pages_found += 1
- total_results_count += results_count
- print("{} pages were processed and {} total results were found.".format(pages_found, total_results_count))
- return pages_found, total_results_count
- def display(total_results_count):
- if total_results_count:
- if os.name == "nt":
- os.startfile("output.txt")
- elif os.name == "posix":
- subprocess.call(["xdg-open", "output.txt"])
- else:
- os.remove("output.txt")
- def main():
- username = None
- term = r"\bHello\b"
- start = datetime.date(2018, 1, 1)
- end = min(datetime.date(2018, 8, 30), datetime.date.today())
- pages_found, total_results_count = search_all(username, term, start, end)
- display(total_results_count)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement