2016-05-12 3 views
1

私は221の記事を持っています。以下のコードは221件の記事を返しますが、重複した記事は169件しかありません。shopify.find(blog_id = xxx、limit = 50、page = zzz)は重複記事を返します

existing_articles = [] 
for i in xrange(1, 6): 
    existing_artciles.extend(shopify.Article.find(blog_id=the_blog.id, limit=50, page=i)) 
len(existing_articles) 
# 211 
len(set([a.id for a in existing_articles])) 
# 169 

ブログですべての記事(重複しない)を取得するにはどうすればよいですか?

答えて

0

あなたはおそらくすでにこれを理解していると思いますが、私が推測するのは、実際に記事の5ページを持っていないということです。最後のページよりも大きいページを指定すると、最後のページが戻され、重複した記事が表示されます。

まず、記事の数を取得し、それを使用してページの総数を決定し、xrange関数でその値を使用することをおすすめします。ここでは、関数である:

def get_all_articles(): 
    article_count = shopify.Article.count() 

    articles = [] 
    if article_count > 0: 
     for page in xrange(1, ((article_count-1) // 50) + 2): 
      articles.extend(shopify.Article.find(page=page)) 

    return articles 

あなたはさらにいくつかの手順を行って、任意の可算shopifyリソースを処理するために、これを汎用化することができます

def get_all_of_resource(resource, **kwargs): 
    resource_count = resource.count(**kwargs) 

    resources = [] 
    if resource_count > 0: 
     for page in xrange(1, ((resource_count-1) // 250) + 2): 
      arguments = kwargs 
      arguments.update({"limit" : 250, "page" : page}) 
      resources.extend(resource.find(**arguments)) 

    return resources 

あなたはこのようにそれを使用したい:

shirts = get_all_of_resource(shopify.Product, product_type="T-Shirt") 

ご覧のとおり、追加のパラメータを渡して結果をフィルタリングし、ページあたりの最大アイテム数(250)を要求する機能も追加しました。

関連する問題