From 4e7a4bd592d902b8ab3e625c5e99f55a33d60fa8 Mon Sep 17 00:00:00 2001 From: Ivan Dyedov Date: Sun, 24 Mar 2013 16:13:47 -0400 Subject: [PATCH] make the disqus_static plugin work for sites with over 25 comments --- pelicanext/disqus_static/README.rst | 4 +++- pelicanext/disqus_static/disqus_static.py | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pelicanext/disqus_static/README.rst b/pelicanext/disqus_static/README.rst index 05c68b6..9bcc84f 100644 --- a/pelicanext/disqus_static/README.rst +++ b/pelicanext/disqus_static/README.rst @@ -9,6 +9,9 @@ Installation Because we use disqus API to retrieve the comments you need to create an application at http://disqus.com/api/applications/ which will provide you with a secret and public keys for the API. +We use disqus-python package for communication with disqus API: +``pip install disqus-python`` + Put ``disqus_static.py`` plugin in ``plugins`` folder in pelican installation and use the following in your settings:: @@ -57,4 +60,3 @@ TODO ----- - handle replies to comments properly and maintain parent-child relationships - - test for sites with over 100 comments (I think disqus API only returns 100 items per request) diff --git a/pelicanext/disqus_static/disqus_static.py b/pelicanext/disqus_static/disqus_static.py index 78b56e5..c775474 100644 --- a/pelicanext/disqus_static/disqus_static.py +++ b/pelicanext/disqus_static/disqus_static.py @@ -6,7 +6,7 @@ This plugin adds a disqus_comments property to all articles. Comments are fetched at generation time using disqus API. """ -from disqusapi import DisqusAPI +from disqusapi import DisqusAPI, Paginator from pelican import signals def initialized(pelican): @@ -20,11 +20,13 @@ def initialized(pelican): def disqus_static(generator): disqus = DisqusAPI(generator.settings['DISQUS_SECRET_KEY'], generator.settings['DISQUS_PUBLIC_KEY']) - threads = disqus.threads.list(forum=generator.settings['DISQUS_SITENAME']) + threads = Paginator(disqus.threads.list, + forum=generator.settings['DISQUS_SITENAME']) thread_dict = {} # disqus thread id => title for thread in threads: thread_dict[thread['id']] = thread['title'] - posts = disqus.posts.list(forum=generator.settings['DISQUS_SITENAME']) + + posts = Paginator(disqus.posts.list, forum=generator.settings['DISQUS_SITENAME']) post_dict = {} # title => [post1, post2, ...] for post in posts: if post['thread'] not in thread_dict.keys(): @@ -32,6 +34,7 @@ def disqus_static(generator): if thread_dict[post['thread']] not in post_dict.keys(): post_dict[thread_dict[post['thread']]] = [] post_dict[thread_dict[post['thread']]].append(post) + for article in generator.articles: if article.title in post_dict: article.disqus_comments = post_dict[article.title]