From 6bba781c496ad692d1bce21c561abab7e971e061 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Fri, 12 Feb 2016 08:16:26 +0300 Subject: rename the scripts --- README.md | 15 +++---- mutual_friends.py | 34 ++++++++++++++++ print_mutual_friends.py | 34 ---------------- track_online.py | 104 ------------------------------------------------ track_status.py | 104 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 146 insertions(+), 145 deletions(-) create mode 100644 mutual_friends.py delete mode 100644 print_mutual_friends.py delete mode 100644 track_online.py create mode 100644 track_status.py diff --git a/README.md b/README.md index 980c5f4..4ee74f8 100644 --- a/README.md +++ b/README.md @@ -4,27 +4,28 @@ A collection of scripts abusing VK.com API. ## Usage -To use this software, you need to be able to run Python 3 scripts. +To use this software, you need to be able to run Python 3 scripts (3.4 or higher +is required). -### track_online.py +### track_status.py Track when people go online/offline: - track_online.py [-h] [-t TIMEOUT] [-l LOG] UID [UID ...] + track_status.py [-h] [-t TIMEOUT] [-l LOG] UID [UID ...] For example, - track_online.py egor.tensin id5245998 + track_status.py egor.tensin id5245998 -### print_mutual_friends.py +### mutual_friends.py Learn who your ex and her new boyfriend are both friends with: - print_mutual_friends.py [-h] UID [UID ...] + mutual_friends.py [-h] UID [UID ...] For example, - print_mutual_friends.py egor.tensin durov + mutual_friends.py egor.tensin durov ## Licensing diff --git a/mutual_friends.py b/mutual_friends.py new file mode 100644 index 0000000..9de77cb --- /dev/null +++ b/mutual_friends.py @@ -0,0 +1,34 @@ +# Copyright 2015 Egor Tensin +# This file is licensed under the terms of the MIT License. +# See LICENSE.txt for details. + +import sys + +from api import * + +def query_friends(api, user): + return api.friends_get(user.get_uid(), fields=User.Field.SCREEN_NAME) + +def format_user(user): + if user.has_last_name(): + return '{} {} ({})'.format(user.get_last_name(), user.get_first_name(), user.get_screen_name()) + else: + return '{} ({})'.format(user.get_first_name(), user.get_screen_name()) + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser( + description='Learn who your ex and her new boyfriend are both friends with.') + + parser.add_argument(metavar='UID', dest='user_ids', nargs='+', + help='user IDs or "screen names"') + args = parser.parse_args() + + api = API(Language.EN) + users = api.users_get(args.user_ids, fields=User.Field.SCREEN_NAME) + + friend_lists = map(lambda user: frozenset(query_friends(api, user)), users) + mutual_friends = frozenset.intersection(*friend_lists) + if mutual_friends: + for friend in mutual_friends: + print(format_user(friend)) diff --git a/print_mutual_friends.py b/print_mutual_friends.py deleted file mode 100644 index 9de77cb..0000000 --- a/print_mutual_friends.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2015 Egor Tensin -# This file is licensed under the terms of the MIT License. -# See LICENSE.txt for details. - -import sys - -from api import * - -def query_friends(api, user): - return api.friends_get(user.get_uid(), fields=User.Field.SCREEN_NAME) - -def format_user(user): - if user.has_last_name(): - return '{} {} ({})'.format(user.get_last_name(), user.get_first_name(), user.get_screen_name()) - else: - return '{} ({})'.format(user.get_first_name(), user.get_screen_name()) - -if __name__ == '__main__': - import argparse - parser = argparse.ArgumentParser( - description='Learn who your ex and her new boyfriend are both friends with.') - - parser.add_argument(metavar='UID', dest='user_ids', nargs='+', - help='user IDs or "screen names"') - args = parser.parse_args() - - api = API(Language.EN) - users = api.users_get(args.user_ids, fields=User.Field.SCREEN_NAME) - - friend_lists = map(lambda user: frozenset(query_friends(api, user)), users) - mutual_friends = frozenset.intersection(*friend_lists) - if mutual_friends: - for friend in mutual_friends: - print(format_user(friend)) diff --git a/track_online.py b/track_online.py deleted file mode 100644 index 2c6776e..0000000 --- a/track_online.py +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright 2015 Egor Tensin -# This file is licensed under the terms of the MIT License. -# See LICENSE.txt for details. - -import argparse -import logging -import time -import sys - -from api import * - -def format_user(user): - if user.has_last_name(): - return '{} {}'.format(user.get_last_name(), user.get_first_name()) - else: - return '{}'.format(user.get_first_name()) - -def format_user_is_online(user): - return '{} is ONLINE'.format(format_user(user)) - -def format_user_is_offline(user): - return '{} is OFFLINE'.format(format_user(user)) - -def format_user_last_seen(user): - return '{} was last seen at {}'.format(format_user(user), user.get_last_seen()) - -def format_user_went_online(user): - return '{} went ONLINE'.format(format_user(user)) - -def format_user_went_offline(user): - return '{} went OFFLINE'.format(format_user(user)) - -def user_is_offline(user): - logging.info(format_user_is_offline(user)) - logging.info(format_user_last_seen(user)) - -def user_went_online(user): - logging.info(format_user_went_online(user)) - -def user_went_offline(user): - logging.info(format_usre_went_offline(user)) - -def print_status(user): - if user.is_online(): - user_is_online(user) - else: - user_is_offline(user) - -def print_status_update(user): - if user.is_online(): - user_went_online(user) - else: - user_went_offline(user) - -def parse_timeout(source): - timeout = int(source) - if timeout < 1: - raise argparse.ArgumentTypeError( - 'please specify a positive number of seconds as refresh timeout') - return timeout - -DEFAULT_TIMEOUT=5 - -def loop_update_status(api, user_ids, timeout=DEFAULT_TIMEOUT): - fields = User.Field.ONLINE, User.Field.LAST_SEEN - users = list(api.users_get(user_ids, fields)) - for user in users: - print_status(user) - while True: - time.sleep(timeout) - updated_users = list(api.users_get(user_ids, fields)) - for i in range(len(updated_users)): - if users[i].is_online() != updated_users[i].is_online(): - users[i] = updated_users[i] - print_status_update(updated_users[i]) - -if __name__ == '__main__': - parser = argparse.ArgumentParser( - description='Track when people go online/offline.') - - parser.add_argument(metavar='UID', dest='user_ids', nargs='+', - help='user IDs or "screen names"') - parser.add_argument('-t', '--timeout', default=DEFAULT_TIMEOUT, - type=parse_timeout, - help='set refresh interval (seconds)') - parser.add_argument('-l', '--log', type=argparse.FileType('w'), - default=sys.stdout, - help='set log file path (stdout by default)') - args = parser.parse_args() - - logging.basicConfig(format='[%(asctime)s] %(message)s', - stream=args.log, - level=logging.INFO, - datefmt='%Y-%m-%d %H:%M:%S') - - api = API(Language.EN) - - try: - loop_update_status(api, args.user_ids, timeout=args.timeout) - except KeyboardInterrupt: - pass - except Exception as e: - logging.exception(e) - sys.exit(1) diff --git a/track_status.py b/track_status.py new file mode 100644 index 0000000..2c6776e --- /dev/null +++ b/track_status.py @@ -0,0 +1,104 @@ +# Copyright 2015 Egor Tensin +# This file is licensed under the terms of the MIT License. +# See LICENSE.txt for details. + +import argparse +import logging +import time +import sys + +from api import * + +def format_user(user): + if user.has_last_name(): + return '{} {}'.format(user.get_last_name(), user.get_first_name()) + else: + return '{}'.format(user.get_first_name()) + +def format_user_is_online(user): + return '{} is ONLINE'.format(format_user(user)) + +def format_user_is_offline(user): + return '{} is OFFLINE'.format(format_user(user)) + +def format_user_last_seen(user): + return '{} was last seen at {}'.format(format_user(user), user.get_last_seen()) + +def format_user_went_online(user): + return '{} went ONLINE'.format(format_user(user)) + +def format_user_went_offline(user): + return '{} went OFFLINE'.format(format_user(user)) + +def user_is_offline(user): + logging.info(format_user_is_offline(user)) + logging.info(format_user_last_seen(user)) + +def user_went_online(user): + logging.info(format_user_went_online(user)) + +def user_went_offline(user): + logging.info(format_usre_went_offline(user)) + +def print_status(user): + if user.is_online(): + user_is_online(user) + else: + user_is_offline(user) + +def print_status_update(user): + if user.is_online(): + user_went_online(user) + else: + user_went_offline(user) + +def parse_timeout(source): + timeout = int(source) + if timeout < 1: + raise argparse.ArgumentTypeError( + 'please specify a positive number of seconds as refresh timeout') + return timeout + +DEFAULT_TIMEOUT=5 + +def loop_update_status(api, user_ids, timeout=DEFAULT_TIMEOUT): + fields = User.Field.ONLINE, User.Field.LAST_SEEN + users = list(api.users_get(user_ids, fields)) + for user in users: + print_status(user) + while True: + time.sleep(timeout) + updated_users = list(api.users_get(user_ids, fields)) + for i in range(len(updated_users)): + if users[i].is_online() != updated_users[i].is_online(): + users[i] = updated_users[i] + print_status_update(updated_users[i]) + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description='Track when people go online/offline.') + + parser.add_argument(metavar='UID', dest='user_ids', nargs='+', + help='user IDs or "screen names"') + parser.add_argument('-t', '--timeout', default=DEFAULT_TIMEOUT, + type=parse_timeout, + help='set refresh interval (seconds)') + parser.add_argument('-l', '--log', type=argparse.FileType('w'), + default=sys.stdout, + help='set log file path (stdout by default)') + args = parser.parse_args() + + logging.basicConfig(format='[%(asctime)s] %(message)s', + stream=args.log, + level=logging.INFO, + datefmt='%Y-%m-%d %H:%M:%S') + + api = API(Language.EN) + + try: + loop_update_status(api, args.user_ids, timeout=args.timeout) + except KeyboardInterrupt: + pass + except Exception as e: + logging.exception(e) + sys.exit(1) -- cgit v1.2.3