示例#1
0
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")
示例#2
0
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")
示例#3
0
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")
示例#4
0
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")
示例#5
0
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()