コード例 #1
0
ファイル: logViewer.py プロジェクト: shitianshiwa/PatchyVideo
def viewTaghistory(vid, language) :
	all_items = db.tag_history.aggregate([
		{'$match':{ 'vid': ObjectId(vid)}},
		{'$lookup': {'from': 'users', 'localField': 'user', 'foreignField': '_id', 'as': 'user_obj'}},
		{'$project': {'user_obj._id': 1, 'user_obj.profile.username': 1, 'user_obj.profile.image': 1, 'tags': 1, 'del': 1, 'add': 1, 'time': 1}},
		{'$sort': {"time": -1}}
		])
	all_items = list(all_items)
	for item in all_items :
		item['tags'], _, _ = tagdb.translate_tag_ids_to_user_language(item['tags'], language)
		item['del'], _, _ = tagdb.translate_tag_ids_to_user_language(item['del'], language)
		item['add'], _, _ = tagdb.translate_tag_ids_to_user_language(item['add'], language)
	return all_items
コード例 #2
0
def getCommonTags(user_language, videos, max_count = 20) :
	if len(videos) <= 0 :
		return []
	all_tags = list(itertools.chain(*[vid['tags'] for vid in videos]))
	tag_map = Counter(all_tags).most_common(n = max_count)
	tag_ids = [item[0] for item in tag_map]
	return tagdb.translate_tag_ids_to_user_language(tag_ids, user_language)[0]
コード例 #3
0
def queryBlacklist(user, language) :
	if 'blacklist' in user['settings'] :
		if isinstance(user['settings']['blacklist'], list) :
			return tagdb.translate_tag_ids_to_user_language(user['settings']['blacklist'], language)[0]
		else :
			return 'default'
	else :
		return 'default'
コード例 #4
0
def getAuthorRecord(tag, language):
    tag_obj = tagdb._tag(tag)
    if not 'author' in tag_obj:
        raise UserError('RECORD_NOT_FOUND')
    author_obj = db.authors.find_one({'_id': tag_obj['author']})
    assert author_obj
    author_obj['common_tags'] = tagdb.translate_tag_ids_to_user_language(
        author_obj['common_tagids'], language)
    return author_obj
コード例 #5
0
def getPopularTags(user_language, max_count = 20) :
	try :
		assert isinstance(max_count, int) and max_count <= 100 and max_count > 0
		response = get_page(TAG_TRACKER_ADDRESS + "/get?count=%d" % max_count)
		json_obj = json.loads(response)
		tag_ids = [int(i) for i in json_obj['tags']]
		tags, _, _ = tagdb.translate_tag_ids_to_user_language(tag_ids, user_language, id_data_map = json_obj['pops'])
		return [i[0] for i in tags], {i[0]: i[1] for i in tags}
	except :
		return []
コード例 #6
0
def getPopularTags(user_language, max_count=20):
    try:
        assert isinstance(max_count,
                          int) and max_count <= 100 and max_count > 0
        response = get_page(TAG_TRACKER_ADDRESS + "/get?count=%d" % max_count)
        json_obj = json.loads(response)
        tag_ids = [int(i) for i in json_obj['tags']]
        return tagdb.translate_tag_ids_to_user_language(
            tag_ids, user_language)[0]
    except:
        return []
コード例 #7
0
def getRelatedTagsFixedMainTags(user_language, tags, exclude=[], max_count=10):
    exclude_tag_ids = tagdb.filter_and_translate_tags(exclude)
    exclude_tags, _, _ = tagdb.translate_tag_ids_to_user_language(
        exclude_tag_ids, 'CHS')
    all_tags = remove_stop_words(
        [
            '东方MMD',
            '剧情MMD',
            '舞蹈MMD',
            '东方3D',
            '游戏',
            '东方FTG',
            '东方STG',
            '游戏宣传',  # exclude
            '音乐游戏',
            'mugen',
            'Minecraft',
            '实况',
            '攻略',
            '跑团',
            '音乐',
            '东方Arrange',
            '东方风Arrange',
            '东方PV',
            'XFD',
            'MV',
            '演奏',
            '东方手书',
            '漫画',
            '动画',
            '有配音',
            'Walfas',
            'MAD',
            'AMV',
            '音MAD',
            '鬼畜',
            '东方杂谈',
            '东方科普',
            '东方考据',
            '访谈',
            '电台',
            '排行',
            '线下活动',
            'Cosplay',
            '绘画过程',
            '模因',  # exclude
            #'Shitpost',  # exclude
            '手工艺',
            'VTuber',
            '图集',
            '主标签完成'
        ],
        exclude_tags)
    return [{k: 1} for k in all_tags]
コード例 #8
0
def getPlaylist(pid, lang):
    ret = playlist_db.retrive_item(pid)
    if not ret:
        raise UserError('PLAYLIST_NOT_EXIST')
    if 'tags' in ret:
        ret['tags_translated'], ret['tags_category'], ret[
            'tags_tags'] = tagdb.translate_tag_ids_to_user_language(
                ret['tags'], lang)
    else:
        ret['tags_translated'], ret['tags_category'], ret[
            'tags_tags'] = [], {}, {}
    return ret
コード例 #9
0
def inferTagsFromVideo(utags, title, desc, user_language):
    log(obj={
        'title': title,
        'desc': desc,
        'utags': utags,
        'lang': user_language
    })
    utags = [u.lower() for u in utags]
    utags.append(title)
    utags.append(desc)
    all_text = ' 3e7dT2ibT7dM '.join(utags)
    tagids = inferTagidsFromText(all_text)
    return db.translate_tag_ids_to_user_language(tagids, user_language)[0]
コード例 #10
0
def listVideoQuery(user, query_str, offset, limit, order = 'latest', user_language = 'CHS', hide_placeholder = True, qtype = 'tag', additional_constraint = '', human_readable_tag = False):
	log(obj = {'q': query_str, 'offset': offset, 'limit': limit, 'order': order, 'lang': user_language})
	if order not in ['latest', 'oldest', 'video_latest', 'video_oldest', 'last_modified'] :
		raise UserError('INCORRECT_ORDER')
	query_obj, tags = db.compile_query(query_str, qtype)
	query_obj_extra, _ = db.compile_query(additional_constraint, 'tag')
	log(obj = {'query': dumps(query_obj)})
	default_blacklist_tagids = [int(i) for i in Config.DEFAULT_BLACKLIST.split(',')]
	if user and 'settings' in user :
		if user['settings']['blacklist'] == 'default' :
			query_obj = {'$and': [query_obj, {'tags': {'$nin': default_blacklist_tagids}}, query_obj_extra]}
		else :
			query_obj = {'$and': [query_obj, {'tags': {'$nin': user['settings']['blacklist']}}, query_obj_extra]}
	else :
		query_obj = {'$and': [query_obj, {'tags': {'$nin': default_blacklist_tagids}}, query_obj_extra]}
	updateTagSearch(tags)
	exStats1 = None
	exStats2 = None
	try :
		result = db.retrive_items(query_obj)
		exStats1 = result.explain()
		if order == 'latest':
			result = result.sort([("meta.created_at", -1)])
		elif order == 'oldest':
			result = result.sort([("meta.created_at", 1)])
		elif order == 'video_latest':
			result = result.sort([("item.upload_time", -1)])
		elif order == 'video_oldest':
			result = result.sort([("item.upload_time", 1)])
		elif order == 'last_modified':
			result = result.sort([("meta.modified_at", -1)])
		ret = result.skip(offset).limit(limit)
		exStats2 = ret.explain()
		count = ret.count()
		videos = [item for item in ret]
		videos = filterVideoList(videos, user)
		for i in range(len(videos)) :
			videos[i]['tags'] = list(filter(lambda x: x < 0x80000000, videos[i]['tags']))
			if human_readable_tag :
				videos[i]['tags_readable'] = db.translate_tag_ids_to_user_language(videos[i]['tags'], user_language)[0]
		if hide_placeholder :
			videos = _filterPlaceholder(videos)
	except pymongo.errors.OperationFailure as ex:
		if '$not' in str(ex) :
			raise UserError('FAILED_NOT_OP')
		else :
			log(level = 'ERR', obj = {'ex': str(ex)})
			raise UserError('FAILED_UNKNOWN')
	return videos, *getCommonTags(user_language, videos), count, query_obj, exStats1, exStats2
コード例 #11
0
def listVideo(offset, limit, user, order = 'latest', user_language = 'CHS', hide_placeholder = True, additional_constraint = '', human_readable_tag = False):
	if order not in ['latest', 'oldest', 'video_latest', 'video_oldest', 'last_modified'] :
		raise UserError('INCORRECT_ORDER')
	default_blacklist_tagids = [int(i) for i in Config.DEFAULT_BLACKLIST.split(',')]
	query_obj_extra, _ = db.compile_query(additional_constraint, 'tag')
	query_obj = {}
	empty_query = True
	if user and 'settings' in user :
		if user['settings']['blacklist'] == 'default' :
			empty_query = False
			query_obj = {'$and': [{'tags': {'$nin': default_blacklist_tagids}}, query_obj_extra]}
		else :
			if user['settings']['blacklist'] or query_obj_extra :
				empty_query = False
			query_obj = {'$and': [{'tags': {'$nin': user['settings']['blacklist']}}, query_obj_extra]}
	else :
		empty_query = False
		query_obj = {'$and': [{'tags': {'$nin': default_blacklist_tagids}}, query_obj_extra]}
	if empty_query :
		query_obj = {}
	exStats1 = None
	exStats2 = None
	result = db.retrive_items(query_obj)
	exStats1 = result.explain()
	if order == 'latest':
		result = result.sort([("meta.created_at", -1)])
	elif order == 'oldest':
		result = result.sort([("meta.created_at", 1)])
	elif order == 'video_latest':
		result = result.sort([("item.upload_time", -1)])
	elif order == 'video_oldest':
		result = result.sort([("item.upload_time", 1)])
	elif order == 'last_modified':
		result = result.sort([("meta.modified_at", -1)])
	videos = result.skip(offset).limit(limit)
	exStats2 = videos.explain()
	video_count = videos.count()
	videos = [i for i in videos]
	videos = filterVideoList(videos, user)
	for i in range(len(videos)) :
		videos[i]['tags'] = list(filter(lambda x: x < 0x80000000, videos[i]['tags']))
		if human_readable_tag :
			videos[i]['tags_readable'] = db.translate_tag_ids_to_user_language(videos[i]['tags'], user_language)[0]
	if hide_placeholder :
		videos = _filterPlaceholder(videos)
	tags, pops, pop_tagid_map = getPopularTags(user_language)
	return videos, video_count, tags, pops, query_obj, pop_tagid_map, exStats1, exStats2
コード例 #12
0
def inferTagsFromVideo(utags,
                       title,
                       desc,
                       user_language,
                       video_url: str = '',
                       user_urls: [str] = []):
    log(
        obj={
            'title': title,
            'desc': desc,
            'utags': utags,
            'lang': user_language,
            'video_url': video_url,
            'user_urls': user_urls
        })
    video_url = video_url.strip()
    tagids = []
    if video_url:
        obj, cleanURL = dispatch(video_url)
        if obj is not None:
            uid = obj.unique_id(obj, cleanURL)
            vid_item = db.retrive_item({'item.unique_id': uid})
            if vid_item is not None:
                tagids = list(
                    filter(lambda x: x < 0x80000000, vid_item['tags']))
    if not tagids:
        utags = [u.lower() for u in utags]
        utags.append(title)
        utags.append(desc)
        all_text = ' 3e7dT2ibT7dM '.join(utags)
        tagids = inferTagidsFromText(all_text)
    matched_author_records, matched_author_tags = matchUserSpace(user_urls)
    matched_common_ids = itertools.chain.from_iterable(
        [x['common_tagids'] for x in matched_author_records])
    tagids = list(
        set(tagids) | set([x['id'] for x in matched_author_tags])
        | set(matched_common_ids))
    return db.translate_tag_ids_to_user_language(tagids, user_language)[0]
コード例 #13
0
def listYourVideo(uid, offset, limit, user, order = 'latest', human_readable_tag = False, user_language = 'CHS'):
	if order not in ['latest', 'oldest', 'video_latest', 'video_oldest', 'last_modified'] :
		raise UserError('INCORRECT_ORDER')
	result = db.retrive_items({'meta.created_by': ObjectId(uid)})
	if order == 'latest':
		result = result.sort([("meta.created_at", -1)])
	elif order == 'oldest':
		result = result.sort([("meta.created_at", 1)])
	elif order == 'video_latest':
		result = result.sort([("item.upload_time", -1)])
	elif order == 'video_oldest':
		result = result.sort([("item.upload_time", 1)])
	elif order == 'last_modified':
		result = result.sort([("meta.modified_at", -1)])
	videos = result.skip(offset).limit(limit)
	video_count = videos.count()
	videos = [i for i in videos]
	videos = filterVideoList(videos, user)
	for i in range(len(videos)) :
		videos[i]['tags'] = list(filter(lambda x: x < 0x80000000, videos[i]['tags']))
		if human_readable_tag :
			videos[i]['tags_readable'] = db.translate_tag_ids_to_user_language(videos[i]['tags'], user_language)[0]
	return videos, video_count
コード例 #14
0
def listVideoRandimzied(user, limit, query_str = '', user_language = 'CHS', qtype = 'tag', additional_constraint = '', human_readable_tag = False) :
	query_obj, _ = db.compile_query(query_str, qtype)
	query_obj_extra, _ = db.compile_query(additional_constraint, 'tag')
	log(obj = {'query': dumps(query_obj)})
	default_blacklist_tagids = [int(i) for i in Config.DEFAULT_BLACKLIST.split(',')]
	if user and 'settings' in user :
		if user['settings']['blacklist'] == 'default' :
			query_obj = {'$and': [query_obj, {'tags': {'$nin': default_blacklist_tagids}}, query_obj_extra]}
		else :
			query_obj = {'$and': [query_obj, {'tags': {'$nin': user['settings']['blacklist']}}, query_obj_extra]}
	else :
		query_obj = {'$and': [query_obj, {'tags': {'$nin': default_blacklist_tagids}}, query_obj_extra]}
	videos = list(db.aggregate([
		{'$match': query_obj},
		{'$sample': {'size': limit * 2}}
	]))
	videos = filterVideoList(videos, user)
	for i in range(len(videos)) :
		videos[i]['tags'] = list(filter(lambda x: x < 0x80000000, videos[i]['tags']))
		if human_readable_tag :
			videos[i]['tags_readable'] = db.translate_tag_ids_to_user_language(videos[i]['tags'], user_language)[0]
	videos = _filterPlaceholder(videos)
	videos = videos[: limit]
	return videos, *getCommonTags(user_language, videos)
コード例 #15
0
def listCommonTags(user, pid, language):
    return tagdb.translate_tag_ids_to_user_language(
        listCommonTagIDs(pid, user), language)[0]
コード例 #16
0
def getDefaultBlacklist(language):
    return tagdb.translate_tag_ids_to_user_language(
        [int(i) for i in Config.DEFAULT_BLACKLIST_POPULAR_TAG.split(',')],
        language)[0]
コード例 #17
0
def viewRawTagHistory(offset, limit, language):
    all_items = db.tag_history.aggregate([
        {
            '$sort': {
                "time": -1
            }
        },
        {
            '$skip': offset
        },
        {
            '$limit': limit
        },
        {
            '$lookup': {
                'from': 'users',
                'localField': 'user',
                'foreignField': '_id',
                'as': 'user_obj'
            }
        },
        {
            '$project': {
                'vid': 1,
                'user_obj._id': 1,
                'user_obj.profile.username': 1,
                'user_obj.profile.image': 1,
                'tags': 1,
                'del': 1,
                'add': 1,
                'time': 1
            }
        },
        {
            '$lookup': {
                'from': 'videos',
                'localField': 'vid',
                'foreignField': '_id',
                'as': 'video_obj'
            }
        },
        {
            '$project': {
                'vid': 1,
                'user_obj._id': 1,
                'user_obj.profile.username': 1,
                'user_obj.profile.image': 1,
                'tags': 1,
                'del': 1,
                'add': 1,
                'time': 1,
                'video_obj.item': 1
            }
        },
    ])
    all_items = list(all_items)
    for item in all_items:
        item['tags'], _, _ = tagdb.translate_tag_ids_to_user_language(
            item['tags'], language)
        item['del'], _, _ = tagdb.translate_tag_ids_to_user_language(
            item['del'], language)
        item['add'], _, _ = tagdb.translate_tag_ids_to_user_language(
            item['add'], language)
    return all_items
コード例 #18
0
def inferTagsFromUtags(utags, user_language):
    log(obj={'utags': utags, 'lang': user_language})
    tagids = inferTagidsFromUtags(utags)
    return db.translate_tag_ids_to_user_language(tagids, user_language)[0]
コード例 #19
0
def listSubscriptionTags(user, language = 'CHS') :
	ret = list(db.subs.find({'meta.created_by': makeUserMeta(user), 'tagid': {'$exists': True}}))
	return tagdb.translate_tag_ids_to_user_language([x['tagid'] for x in ret], language)[0]