def activity(request, page): """ Returns the list of most recent activities by the users that the current user follows. """ me = request.session['_auth_user_id'] following = api.get_following(me) return HttpResponse(api.get_user_activity(me, following, page), mimetype="application/json")
def following(request, user_id, page): """ Returns the list of users who the user is following. """ me = request.session['_auth_user_id'] following = api.get_following(user_id) try: following.remove(me) except: pass return HttpResponse(api.get_user_boxes(me, following, page), mimetype="application/json")
def run(): ptts.initialize() logging.disable(logging.CRITICAL) config = configparser.ConfigParser() parser = argparse.ArgumentParser( description="You are running PyTikTokScraper {:s} using Python {:s}". format(Constants.SCRIPT_VER, Constants.PYTHON_VER)) parser.add_argument( '-d', '--download', dest='download', type=str, required=False, help="The username (or uid) of the user whose posts you want to save.") parser.add_argument( '-ht', '--hashtag', dest='hashtag', type=str, required=False, help="The hashtag whose posts in the feed you want to save.") parser.add_argument( '-r', '--recent', dest='recent', action='store_true', help="When used, only retrieves the first 10 videos in the user's feed." ) parser.add_argument( '-gf', '--get-following', dest='getfollowing', type=str, required=False, help="When used, retrieves the list of people you're following.") parser.add_argument( '-uid', '--is-uid', dest='isuid', action='store_true', help="When used, treat the download argument as the user ID.") parser.add_argument('-s', '--single', dest='single', type=str, required=False, help="Pass a single video Id to download.") parser.add_argument( '-l', '--livestream', dest='livestream', type=str, required=False, help="Pass an username to download a livestream, if available.") args = parser.parse_args() if validate_inputs(config, args): api.login() if args.download or args.livestream and not args.isuid: try: target_user_json = api.search_user(ptts.tt_target_user) for user in target_user_json.get('user_list'): if user.get('user_info').get( 'unique_id') == ptts.tt_target_user: ptts.tt_target_id = user.get('user_info').get('uid') response_user = api.get_user_info(ptts.tt_target_id) ptts.tt_target_user_liveroomid = response_user.get( 'user').get('room_id') if response_user.get( 'user').get('room_id') > 0 else None video_count = user.get('user_info').get('aweme_count') logger.info( "Found matching user profile with {:d} videos.". format(video_count)) if args.download and video_count < 1: logger.separator() logger.binfo( "This user has no available videos to download." ) logger.separator() sys.exit(0) if not ptts.tt_target_id: raise IndexError except (IndexError, TypeError): logger.error( "No user found matching '{:s}', trying tiktokapi.ga search." .format(ptts.tt_target_user)) logger.separator() try: target_user_json = api.search_user_tta(ptts.tt_target_user) if target_user_json: for user in target_user_json.get('user_list'): if user.get('user_info').get( 'unique_id') == ptts.tt_target_user: open("usersearch.json", "w").write( json.dumps(user.get("user_info"))) ptts.tt_target_id = user.get('user_info').get( 'uid') ptts.tt_target_user_liveroomid = user.get( 'user_info' ).get('room_id') if user.get('user_info').get( 'room_id') > 0 else None video_count = user.get('user_info').get( 'aweme_count') logger.info( "Found matching user profile with {:d} videos." .format(video_count)) if args.download and video_count < 1: logger.separator() logger.binfo( "This user has no available videos to download." ) logger.separator() sys.exit(0) if not ptts.tt_target_id: raise IndexError else: raise IndexError except (IndexError, TypeError): logger.error( "No results on tiktokapi.ga either, the script will now exit." .format(ptts.tt_target_user)) logger.separator() sys.exit(0) elif args.download and args.isuid: ptts.tt_target_id = args.download try: int(ptts.tt_target_id) except ValueError: logger.error( "The user ID '{}' is not a valid value. Exiting.".format( ptts.tt_target_id)) logger.separator() sys.exit(1) elif args.livestream and args.isuid: ptts.tt_target_id = args.livestream try: int(ptts.tt_target_id) except ValueError: logger.error( "The user ID '{}' is not a valid value. Exiting.".format( ptts.tt_target_id)) logger.separator() sys.exit(1) response_user = api.get_user_info(ptts.tt_target_id) ptts.tt_target_user_liveroomid = response_user.get('user').get( 'room_id' ) if response_user.get('user').get('room_id') > 0 else None if ptts.tt_target_id: logger.info("Retrieved user ID: {:s}".format(ptts.tt_target_id)) logger.separator() if args.getfollowing: logger.info("Retrieving list of following users...") logger.warn( "Pagination does not work properly, use this at own risk!") logger.separator() json_resp = api.get_following(ptts.tt_target_id) following_txt = os.path.join( os.getcwd(), "following_{:s}.txt".format(ptts.tt_target_user)) if os.path.isfile(following_txt): os.remove(following_txt) for user in json_resp.get('followings'): user_text = user.get('unique_id') + " - " + user.get('uid') logger.plain(user_text) open(following_txt, 'a').write(user_text + '\n') logger.separator() logger.info("Written {:d} users to {:s}".format( len(json_resp.get('followings')), following_txt)) logger.separator() if ptts.args.download: logger.info("Starting download of all videos from profile.") downloader.download_all(ptts.tt_target_id) if ptts.args.hashtag: logger.info( "Starting download of all posts from hashtag '{:s}'.".format( ptts.tt_target_hashtag)) downloader.download_hashtag(ptts.tt_target_hashtag) if ptts.args.livestream: if ptts.tt_target_user_liveroomid: logger.info("Starting download for livestream.") downloader.download_live(ptts.tt_target_user_liveroomid) else: logger.warn("There currently no ongoing livestream available.") logger.separator()