Beispiel #1
0
def get_user_feed(user_id, page):
    feed_key = FEED_KEY.format(user_id)
    update_key = ACTIVITY_UPDATED_KEY.format(user_id)
    if rdb.get(update_key):
        items = ActivityFeed.get_all()
        if items:
            rdb.zadd(feed_key, *sum([(int(time), id) for id, time in items],
                                    ()))  # noqa
        rdb.set(update_key, 1, ex=ONE_MINUTE * 5)
    start = (page - 1) * PER_PAGE
    end = start + PER_PAGE
    post_ids = rdb.zrange(feed_key, start, end)
    items = Post.get_multi([int(id) for id in post_ids])
    total = rdb.zcard(feed_key)
    return Pagination(None, page, PER_PAGE, total, items)
Beispiel #2
0
def get_user_feed(from_id, page):
    """ 获取用户的`FEED_KEY`的文章 """
    feed_key = FEED_KEY.format(from_id)
    update_key = ACTIVITY_UPDATED_KEY.format(from_id)
    if not rdb.get(update_key):
        items = ActivityFeed.get_all()
        if items:
            rdb.zadd(feed_key, dict(items))
        rdb.set(update_key, 1, ex=ONE_MINUTE * 5)
    start = (page - 1) * PER_PAGE
    end = start + PER_PAGE - 1
    post_ids = rdb.zrange(feed_key, start, end)
    items = Post.get_multi([int(id) for id in post_ids])
    total = rdb.zcard(feed_key)
    return Pagination(None, page, PER_PAGE, total, items)
Beispiel #3
0
def tag(ident):
    ident = ident.lower()
    tag = Tag.get_by_name(ident)
    if not tag:
        tag = Tag.get(ident)
        if not tag:
            abort(404)
    page = request.args.get('page', default=1, type=int)
    type = request.args.get('type', default='hot')  # hot/latest
    if type == 'latest':
        posts = PostTag.get_posts_by_tag(ident, page)
    elif type == 'hot':
        posts = Item.get_post_ids_by_tag(ident, page, type)  # 从Elasticsearch中查找 # noqa
        posts.items = Post.get_multi(posts.items)
    else:
        # 未知类型
        posts = []
    return render_template('tag.html', tag=tag, ident=ident, posts=posts,
                           type=type)  # 模板能忽略post类型的错误,即使传入posts=[]
Beispiel #4
0
def tag(identifier):
    identifier = identifier.lower()
    tag = Tag.get_by_name(identifier)
    if not tag:
        tag = Tag.get_or_404(identifier)
    page = request.args.get("page", type=int, default=1)
    type = request.args.get("type", default="latest")
    if type == "latest":
        posts = PostTag.get_post_by_tag(identifier, page)
    elif type == "hot":
        posts = Item.get_post_ids_by_tag(tag, page, order_by="hot")
        posts.items = Post.get_multi(posts.items)
    else:
        posts = []
    return render_template("tag.html",
                           tag=tag,
                           identifier=identifier,
                           posts=posts,
                           type=type)
Beispiel #5
0
def tag(ident):
    ident = ident.lower()
    tag = Tag.get_by_name(ident)
    if not tag:
        tag = Tag.get(ident)
        if not tag:
            abort(404)
    page = request.args.get('page', default=1, type=int)
    type = request.args.get('type', default='hot')  # hot/latest
    if type == 'latest':
        posts = PostTag.get_posts_by_tag(ident, page)  # paginate
    elif type == 'hot':
        posts = Item.get_post_ids_by_tag(ident, page,
                                         type)  # via Elasticsearch
        posts.items = Post.get_multi(posts.items)
    else:
        # Unknown type
        posts = []
    return render_template('tag.html',
                           tag=tag,
                           ident=ident,
                           posts=posts,
                           type=type)  #  `posts` here is pagination object.