-
-
Save whyrlpool/39b041bbb51b690ea246656a54365e38 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python3 | |
| # export your data on desktop from settings -> advanced -> export telegram data | |
| # update the userid below to yours | |
| # run this in the same directory as your result.json | |
| # based off adryd325's discord-scatter-plot.py; | |
| # which was based off lunasorcery's twitter-scatter-plot.py | |
| from datetime import datetime, timedelta, timezone | |
| import dateutil.parser | |
| import matplotlib.pyplot as plt | |
| import matplotlib.ticker as ticker | |
| import matplotlib.dates as mdates | |
| import csv | |
| import json | |
| import os | |
| # User parameters | |
| yourNameHere = "@your.name.here" | |
| renderHorizontal = True | |
| userid="user12345678" | |
| #grab the userid from the result.json TODO automate this | |
| dates = [] | |
| print(f"reading all telegram messages") | |
| with open('result.json', 'r', encoding="utf-8") as json_file: | |
| json2 = json.load(json_file) | |
| for chat in json2['chats']['list']: | |
| for message in chat['messages']: | |
| if message['type'] == 'message': | |
| if message['from_id'] == userid: | |
| dates.append(datetime.fromisoformat(message['date'])) | |
| json_file.close() | |
| print(f"total messages: {len(dates)}") | |
| now = datetime.utcnow() | |
| days=[] | |
| times=[] | |
| print("processing dates") | |
| for date in dates: | |
| timeNoDate = datetime(1970, 1, 1, date.hour, date.minute, date.second) | |
| dateNoTime = datetime(date.year, date.month, date.day) | |
| days.append(dateNoTime) | |
| times.append(timeNoDate) | |
| print("processing graph") | |
| hoursMajorLocator = mdates.HourLocator(interval=6) | |
| hoursMinorLocator = mdates.HourLocator(interval=1) | |
| hoursMajorFormatter = mdates.DateFormatter('%H:%M') | |
| daysMajorLocator = mdates.YearLocator(base=1) | |
| daysMinorLocator = mdates.MonthLocator() | |
| daysMajorFormatter = mdates.DateFormatter('%Y') | |
| daysMinorFormatter = mdates.DateFormatter('%b') | |
| if renderHorizontal: | |
| fig, ax = plt.subplots(figsize=((max(days)-min(days)).days / 200, 3)) | |
| plt.scatter(days, times, s=1, linewidths=0, color='#1f77b4c0') | |
| plt.xlim(min(days), max(days)) | |
| plt.ylim(0, 1) | |
| dateAxis = ax.xaxis | |
| hoursAxis = ax.yaxis | |
| daysMinorFormatter = mdates.DateFormatter('') | |
| else: | |
| fig, ax = plt.subplots(figsize=(3, (max(days)-min(days)).days / 200)) | |
| plt.scatter(times, days, s=1, linewidths=0, color='#1f77b4c0') | |
| plt.ylim(min(days), max(days)) | |
| plt.xlim(0, 1) | |
| dateAxis = ax.yaxis | |
| hoursAxis = ax.xaxis | |
| ax.tick_params(axis='y', which='minor', labelsize=5, color='#777') | |
| # time goes downwards and to the right | |
| plt.gca().invert_yaxis() | |
| hoursAxis.set_major_locator(hoursMajorLocator) | |
| hoursAxis.set_minor_locator(hoursMinorLocator) | |
| hoursAxis.set_major_formatter(hoursMajorFormatter) | |
| dateAxis.set_major_locator(daysMajorLocator) | |
| dateAxis.set_minor_locator(daysMinorLocator) | |
| dateAxis.set_major_formatter(daysMajorFormatter) | |
| dateAxis.set_minor_formatter(daysMinorFormatter) | |
| hoursAxis.set_label('Time of day') | |
| dateAxis.set_label('Date') | |
| plt.title(f"When does {yourNameHere} post on Telegram (UTC)") | |
| print("rendering png") | |
| plt.savefig('out.png', bbox_inches='tight', pad_inches=0.3, dpi=300) | |
| print("rendering svg") | |
| plt.savefig('out.svg', bbox_inches='tight', pad_inches=0.3) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment