Ejemplo n.º 1
0
def feeds_filter_by_user_topic(request):
    """
    Filter the feeds in three days from topics and users
    topics, users and groups are all list of string
    Args:
        #. topics
        #. users
        #. groups
        #. type?
    """
    topics = []
    users = []
    groups = []
    page_type = ''
    try:
        topics = request.POST.getlist('topics[]')
        users = request.POST.getlist('users[]')
        groups = request.POST.getlist('groups[]')
        page_type = request.POST['page_type']
    except:
        return HttpResponse('{"code":"1","msg":"参数错误!"}')
    
    #Add users in UserGroup to users list
    users_set = set(users)
    for g in groups:
        u_ms = UserGroup_Membership.objects.filter(group__pk=int(g))
        for u_m in u_ms:
            users_set.add(str(u_m.user_id))
    users = list(users_set)
    
    # Avoid empty input
    if not topics and not users:
        #TODO: it's better to redirect to profile page or home page
        return HttpResponse('{"code":"1", "msg":"未指定筛选条件!"}')
    
    feeds_10, top_70_item_list = feeds_of_feedgroup(topics, users, request.user.pk)
    
    feeds_origin = []
    if feeds_10:
        local_feeds = feeds_10

        feeds_query_str = ''
        for local_feed in local_feeds:
            feeds_query_str += str(local_feed.id) + ','
        # get all topics and recommenders once
        topics_of_item = get_topics_of_item(feeds_query_str[0:-1], request.user.pk)
        recommenders_of_item = get_friends_of_item(feeds_query_str[0:-1], request.user.pk)
        user_item_status_dict = get_user_items(feeds_query_str[0:-1], request.user.pk)
        
        feeds_origin = json.loads(serializers.serialize('json', local_feeds, ensure_ascii=False, fields=('name', 'url', 'share_count', 'snippet')))
        
        for f in range(len(feeds_origin)):
            feeds_origin[f]['fields']['share_count'] = prettify_count(feeds_origin[f]['fields']['share_count'])
            if topics_of_item.has_key(feeds_origin[f]['pk']):
                feeds_origin[f]['fields']['topics'] = topics_of_item[feeds_origin[f]['pk']]
            else:
                feeds_origin[f]['fields']['topics'] = []
            if recommenders_of_item.has_key(feeds_origin[f]['pk']):
                feeds_origin[f]['fields']['users'] = recommenders_of_item[feeds_origin[f]['pk']]
            else:
                feeds_origin[f]['fields']['users'] = []
            if user_item_status_dict.has_key(feeds_origin[f]['pk']):
                feeds_origin[f]['fields']['user_item_status_dict'] = user_item_status_dict[feeds_origin[f]['pk']]
            else:
                feeds_origin[f]['fields']['user_item_status_dict'] = [0, 0, 0]

    return_value = {}
    return_value['code'] = '0'
    return_value['msg'] = 'success'
    return_value['json'] = {}
    return_value['json']['feeds'] = feeds_origin
    
    if top_70_item_list:
        return_value['json']['feeds_hidden'] = top_70_item_list
    return HttpResponse(json.dumps(return_value, ensure_ascii=False))
Ejemplo n.º 2
0
def influence_gen_image(str_inf_pk, friends_images):

    inf_pk = int(str_inf_pk)
    inf = Influence.objects.get(pk=inf_pk)
    
    im = Image.new("RGBA",(400,400),(255,255,255))
    bg = Image.open(settings.STATIC_ROOT + 'images/apps/influence-bg.jpg')
    im.paste(bg, (0,0,400,400))
    
    draw = ImageDraw.Draw(im)
    
    #Draw the score
    score_font = ImageFont.truetype(MSYHBD,35)
    score_xy = (300,55) if inf.influence_score > 9 else (312,55)
    draw.text(score_xy, unicode(inf.influence_score), font=score_font, fill=(255,255,255))
    
    #Paste the profile images
    profile_image_addr = gen_temp_file(inf.profile_image_url)
    profile_image = Image.open(profile_image_addr)
    profile_image = profile_image.resize((57,57), Image.ANTIALIAS)     
    im.paste(profile_image, (90,160,147,217))
    #im.paste(profile_image, (92,170,142,220)) #Original size
    os.remove(profile_image_addr)
    
    #Paste images for influenced friends
    friends_xy = [89,252]
    forloop = 0
    tip_font = ImageFont.truetype(MSYH,13)
    if len(friends_images) == 0:
       draw.text((145,262), u'暂时没有好友受我影响:(', font=tip_font, fill=(0,0,0))
    else: 
        for image in friends_images:
            friend_image_addr = gen_temp_file(image)
            friend_image = Image.open(friend_image_addr)
            friend_image = friend_image.resize((31,31), Image.ANTIALIAS)     
            im.paste(friend_image, tuple(friends_xy))
            friends_xy[0] += 46
            os.remove(friend_image_addr)
            forloop += 1
        draw.text((friends_xy[0]+4,262), u'深受我影响:)', font=tip_font, fill=(0,0,0))    
    
    #Fill in the number of fans and active fans
    followers_str = prettify_count(inf.follower_count)
    active_followers_str = prettify_count(inf.active_follower_count)
    follower_font = ImageFont.truetype(MSYH,14)
    draw.text((17,271), followers_str, font=follower_font, fill=(255,255,255))
    draw.text((47,245), active_followers_str, font=follower_font, fill=(255,255,255))
    
    #Fill in the name of user
    name_font = ImageFont.truetype(MSYH,16)
    draw.text((160,160), unicode(inf.screen_name), font=name_font, fill=(0,0,0))
    
    #Fill in status_count and influenced people
    status_font = ImageFont.truetype(MSYH,12)
    draw.text((300,173), unicode(inf.status_count), font=status_font, fill=(255,128,0))
    influence_str = prettify_count(inf.influence_count)
    draw.text((300,200), influence_str, font=status_font, fill=(255,122,50))
    #Fill in the 'energy bar' for status count and influenced people
    bar = Image.open(settings.STATIC_ROOT + 'images/apps/green-bar.gif')
    status_bar_score = int(math.ceil(math.sqrt(inf.status_count*1.0/3000)*100))
    influence_bar_score = inf.influence_score
    for i in range(status_bar_score):
        im.paste(bar,(229+i,188))
    for i in range(influence_bar_score):
        im.paste(bar,(229+i,215))

    del draw
    image_name = 'apps/influence/' + generate_random_file_name() + '.jpg'
    print image_name
    inf.result_image = image_name
    inf.save()
    im.save(settings.MEDIA_ROOT + image_name, "JPEG")
Ejemplo n.º 3
0
def more_items(request):
    try:
        page_type = request.GET['page_type']
        items_to_fetch = request.GET.getlist('items_to_fetch[]')
    except:
        return HttpResponse('{"code":"1", "msg":"参数错误!"}')
    
    authorized = request.user.is_authenticated()
    if authorized:
        user_id = request.user.pk
    else:
        user_id = 1
    
    feeds_query_str = ''
    for local_feed in items_to_fetch:
        feeds_query_str += local_feed + ','
    feeds_query_str = feeds_query_str[0:-1]
    # get all topics and recommenders once
    topics_of_item = get_topics_of_item(feeds_query_str, user_id)
    if authorized:
        recommenders_of_item = get_friends_of_item(feeds_query_str, user_id)
        if page_type == 'index': #Do not show items that user has shared/favourites
            user_item_status_dict = {}
        else:
            user_item_status_dict = get_user_items(feeds_query_str, user_id)
    
    items = Item.objects.filter(pk__in=items_to_fetch)
    if page_type == 'index':
        feeds_id_10 = ','.join([str(i.id) for i in items])
        ui_list = get_user_item_list(feeds_id_10, request.user.pk)
        item_to_del_dict = {}
        for ui in ui_list:
            item_to_del_dict[ui[2]] = 1
        items = [i for i in items if i.id not in item_to_del_dict]
    
    feeds_origin = json.loads(serializers.serialize('json', items, ensure_ascii=False, fields=('name', 'url', 'image', 'share_count', 'sina_count', 'snippet', 'type', 'thumb', 'video_url')))
    
    #TODO: Also, reuturn feeds, topics and users separately
    for f in range(len(feeds_origin)):
        if feeds_origin[f]['fields']['type'] != 1:
            feeds_origin[f]['fields'].pop('thumb')
            feeds_origin[f]['fields'].pop('video_url')
        feeds_origin[f]['fields']['share_count'] = prettify_count(feeds_origin[f]['fields']['share_count']+feeds_origin[f]['fields']['sina_count']) 
        if topics_of_item.has_key(feeds_origin[f]['pk']):
            feeds_origin[f]['fields']['topics'] = topics_of_item[feeds_origin[f]['pk']]
        else:
            feeds_origin[f]['fields']['topics'] = []
        
        if authorized:
            if feeds_origin[f]['pk'] in recommenders_of_item:
                feeds_origin[f]['fields']['users'] = recommenders_of_item[feeds_origin[f]['pk']]
            else:
                feeds_origin[f]['fields']['users'] = []
            if feeds_origin[f]['pk'] in user_item_status_dict:
                feeds_origin[f]['fields']['user_item_status_dict'] = user_item_status_dict[feeds_origin[f]['pk']]
            else:
                feeds_origin[f]['fields']['user_item_status_dict'] = [0, 0, 0]
    
    return_value = {}
    return_value['code'] = '0'
    return_value['msg'] = 'success'
    return_value['json'] = {}
    return_value['json']['feeds'] = feeds_origin
    return HttpResponse(json.dumps(return_value, ensure_ascii=False))