def headlines(tag, limit=200): def date_parser(obj): import datetime if isinstance(obj, datetime.datetime): return obj.isoformat() return obj conn.indices.refresh('newsworld') articles = ArticleModel.objects.filter( tag=tag, main=True, date__gte=datetime.now()-timedelta(hours=24) ).order_by('-date')[:limit] try: for his in articles: his['similar'] = [ similar.prepare_es_dto(a) for a in his['similar'] ] his['similar'] = sorted( his['similar'], key=lambda s: s['date'], reverse=True) except: utils.print_exception() r = redis.StrictRedis(host='localhost', port=6379, db=0) h = [utils.from_es_dict_dto(a) for a in articles] h = sorted(h, key=lambda a: len(a['similar']), reverse=True) r.set('headlines_%s' % tag, json.dumps(h[:5], default=date_parser)) logger.info('[headlines] %s updated' % tag)
def articles(request, tag): page = int(request.GET.get('page', 1)) cat = parse_tag(tag) start = (page - 1) * 40 stop = page * 40 articles = store.get_articles(tag, start=start, limit=stop) fudge = [utils.from_es_dict_dto(a) for a in articles] return HttpResponse(json.dumps({ 'articles': fudge, 'cat': cat, }, default=date_parser), mimetype='application/json' )