diff --git a/main.py b/main.py index 2a023c7..192d717 100644 --- a/main.py +++ b/main.py @@ -26,7 +26,8 @@ def main(): def read_streamer_logins(): user_input = [] if len(sys.argv) <= 1: # no command-line args (the first is always source file name) - twitch_streamers = input("Enter the streamer name (or several separated by commas): ") + print("Enter the streamer name (or several separated by commas). More important streamers go first.") + twitch_streamers = input("Streamer names: ") user_input = twitch_streamers.split(",") else: for i in range(1, len(sys.argv)): diff --git a/twitch_data.py b/twitch_data.py index 00a7e74..2792bdc 100644 --- a/twitch_data.py +++ b/twitch_data.py @@ -7,9 +7,9 @@ from exceptions import StreamerIsOfflineException, StreamerDoesNotExistException TWITCH_CLIENT_ID = "kimne78kx3ncx6brgo4mv6wki5h1ko" USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" -streamer_logins = [] -_is_online = {} # streamer login -> are they online -last_offline_time = {} # the time when a streamer went offline +streamer_logins = [] # the list is sorted by priorities: more important streamers go first +online_streamers = [] # ditto +last_offline_time = {} # the time when each streamer went offline (if they did) # specify the streamers we'll be watching @@ -17,7 +17,6 @@ def set_streamer_logins(streamer_logins_): global streamer_logins streamer_logins = streamer_logins_ for streamer_login in streamer_logins: - _is_online[streamer_login] = False check_online(streamer_login, print_offline_message=True) @@ -39,28 +38,30 @@ def check_online(streamer_login, print_offline_message=False): return if not is_online(streamer_login): - _is_online[streamer_login] = True + # maintain the priorities of streamers + online_streamers.append(streamer_login) + online_streamers.sort(key=lambda streamer: streamer_logins.index(streamer)) + try: from watch_minute import update_minute_watched_event_request # circular dependencies update_minute_watched_event_request(streamer_login) except StreamerIsOfflineException: - if print_offline_message: - set_offline(streamer_login) - else: - _is_online[streamer_login] = False + set_offline(streamer_login, print_offline_message) else: print(f"{streamer_login} is live!") -def set_offline(streamer_login): +def set_offline(streamer_login, print_offline_message=True): if is_online(streamer_login): - _is_online[streamer_login] = False + online_streamers.remove(streamer_login) last_offline_time[streamer_login] = time.time() - print(f"{streamer_login} is offline currently.") + + if print_offline_message: + print(f"{streamer_login} is offline currently.") def is_online(streamer_login): - return _is_online[streamer_login] + return streamer_login in online_streamers def get_user_id(): diff --git a/watch_minute.py b/watch_minute.py index 5a5c182..a322735 100644 --- a/watch_minute.py +++ b/watch_minute.py @@ -24,11 +24,13 @@ minute_watched_requests = {} def send_minute_watched_events(): headers = {"user-agent": USER_AGENT} - streamers = get_streamer_logins() minutes_passed = 0 while True: - for streamer_login in streamers: - next_iteration = time.time() + 60 / len(streamers) + # Twitch has a limit - you can't watch more than 2 channels at one time. + # We take the first two streamers from the list as they have the highest priority. + streamers_watching = online_streamers[:2] + for streamer_login in streamers_watching: + next_iteration = time.time() + 60 / len(streamers_watching) if is_online(streamer_login): request_info = minute_watched_requests[streamer_login] try: