def run(configuration): LOGGER.info('Executing InstaBot') loop = asyncio.get_event_loop() stats_service = StatsService() loop.create_task(stats_service.run()) following_client = instagram.Client(configuration) try: user_service = UserService(following_client, configuration) except ConfigurationError as e: LOGGER.info('UserService wasn\'t started. {}'.format(e)) else: loop.create_task(user_service.run()) following_service = FollowingService(following_client, configuration) loop.create_task(following_service.run()) like_client = instagram.Client(configuration) try: media_service = MediaService(like_client, configuration) except ConfigurationError as e: LOGGER.info('MediaService wasn\'t started. {}'.format(e)) else: loop.create_task(media_service.run()) like_service = LikeService(like_client, media_service) loop.create_task(like_service.run()) loop.run_forever()
def install(configuration, db): LOGGER.info('Installing InstaBot') db.create_tables([User]) client = instagram.Client(configuration) now = datetime.datetime.utcnow() was_followed_at = now - \ datetime.timedelta(hours=configuration.following_hours) user = User.create( following_depth=0, instagram_id=client.id, username=configuration.instagram_username, # To prevent attempts to follow user by himself. was_followed_at=was_followed_at, ) unfollow(configuration)
def unfollow(configuration): LOGGER.info('Scheduling unfollowing of everyone') client = instagram.Client(configuration) loop = asyncio.get_event_loop() followed_users_json = loop.run_until_complete(client.get_followed( User.get(instagram_id=client.id), )) now = datetime.datetime.utcnow() was_followed_at = now - \ datetime.timedelta(hours=configuration.following_hours) for followed_json in followed_users_json: try: user = User.get(instagram_id=followed_json['id']) except User.DoesNotExist: user = User(instagram_id=followed_json['id']) user.username = followed_json['username'] user.following_depth = 0 user.is_followed = True if not user.was_followed_at or was_followed_at < user.was_followed_at: user.was_followed_at = was_followed_at user.save() LOGGER.info( '{0} followed users were saved in DB'.format(len(followed_users_json)), )