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))
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")
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))