aboutsummaryrefslogtreecommitdiff
path: root/content/Informatique/2015-08-09-disqus.rst
blob: b5fd31ece79f6105ba3cda8eb2435ac552b0a5df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
.. -*- mode: rst -*-
.. -*-  coding: utf-8 -*-

==============================
Pelican, disqus, et vie privée
==============================

:date: 2015-08-09
:tags: Libre, blog, ViePrivée
:slug: pelican-disqus-vie-privee
:logo: {static}/images/disqus/privacy.jpg
:summary:   Comment configurer pelican pour utiliser les commentaires disqus,
            sans que le service ne vienne systématiquement pister les
            visiteurs…

.. figure:: {static}/images/disqus/privacy_240.jpg
    :figwidth: 240
    :figclass: floatright
    :alt: Privacy !

    Image : `Frankielon`_ (creativecommons_)

.. _Frankielon: https://www.flickr.com/photos/armydre2008/3865993401/
.. _creativecommons: https://creativecommons.org/licenses/by/2.0/

Le moteur de blog statique propose nativement un plugin pour gérer les
commentaires avec disqus. Il permet de donner un peu de dynamisme au blog, qui
est entièrement statique… Sauf qu'il s'agit d'un service non libre, qui
enregistre les données des utilisateurs…

Le plugin disqus_static_ permet d'intégrer à la page html les commentaires
trouvés sur le service disqus. Cela permet de les inclure nativement dans
l'article, et évite au lecteur du blog d'informer disqus de sa navigation sur
le site. Voici la manière dont je l'utilise sur le blog.

.. _disqus_static: https://github.com/getpelican/pelican-plugins/tree/master/disqus_static

.. admonition:: Attention !

    Cette configuration est *moins pire* que celle proposée par défaut par le
    blog, mais elle continue d'enregistrer l'ensemble des commentaires auprès
    d'une entreprise privée. Mieux vaut, si vous en avez la possibilité,
    basculer sur une solution hébergée comme isso_.

.. _isso: http://posativ.org/isso/

Création du compte
==================

En suivant la documentation du plugin, on enregistre notre application sur le
site de l'`api de disqus`_ :

.. _api de disqus: https://disqus.com/api/applications/

.. image:: {static}/images/disqus/disqus_api.png
    :alt: Configuration du compte

Le compte n'a besoin d'accéder aux commentaires qu'en mode lecture, penser
aussi à renseigner le nom de domaine utilisé par le blog dans les paramètres du
compte.

Configuration du plugin
=======================

Le compte et la clef seront renseignés dans un fichier à part, que nous allons
nommer `disqus.py`. Normalement, il devrait juste contenir ces lignes :

.. code-block:: python

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    # Configuration des commentaires
    DISQUS_SITENAME='Votre compte disqus'
    DISQUS_SECRET_KEY = u'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    DISQUS_PUBLIC_KEY = u'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'


Pour éviter de diffuser ce fichier sur un serveur git public, ne pas oublier de
l'ajouter au fichier .gitignore ! Ainsi, nous serons sûr que notre clef privée
ne sera jamais transmise sur internet…

Dans le fichier `publish.conf`, nous allons ajouter le chargement du plugin :

.. code-block:: python

    import sys
    import os.path
    try:
        sys.path.append(os.path.dirname(os.path.abspath(__file__)))
        from disqus import *
        PLUGINS.append("disqus_static")
    except:
        pass

Cela permet de génerer le blog, même si la configuration pour les commentaires
n'est pas présente.

Utiliser le fichier `publish.conf` permet de générer le blog sans faire appel à
l'API pour éditer le blog, par contre, ceux-ci seront intégrés dès que l'on
lancera la commande `make publish` pour publier le blog.

Changement du template
======================

Maintenant que tout est prêt, il ne reste plus qu'à modifier son template pour
éviter de charger disqus automatiquement. C'est dommage d'intégrer les
commentaires dans la page, si ceux chargés par disqus sont affichés
automatiquement…

Sur mon blog, il faut cliquer sur le bouton pour recharger les commentaires (ou
pour en ajouter de nouveaux). C'est juste un peu de javascript, et vous pouvez
vous inspirer de ce bout de code :

.. code-block:: html

    {% if DISQUS_SITENAME %}

    <div class="comments">
    <h2>Commentaires&nbsp;:</h2>
        <div id="disqus_thread">
        {% if article.disqus_comments %}
        <ul class="post-list">
            {% for comment in article.disqus_comments recursive %}
            <li class="post">
                <div class="post-content">
                    <div class="avatar hovercard">
                        <img alt="Avatar" src="{{ comment.author.avatar.small.cache }}">
                    </div>
                    <div class="post-body">
                        <header>
                            <span class="publisher-anchor-color">{{ comment.author.name }}</span>
                            <span class="time-ago" title="{{ comment.createdAt }}">{{ comment.createdAt }}</span>
                        </header>
                        <div class="post-message-container">
                            <div class="post-message publisher-anchor-color ">
                                {{ comment.message }}
                            </div>
                        </div>
                    </div>
                </div>
                {% if comment.children %}
                <ul class="children">
                    {{ loop(comment.children) }}
                </ul>
                {% endif %}
            </li>
            {% endfor %}
        </ul>
        {% else %}
          Aucun commentaire pour l'instant.
        {% endif %}
        </div>
    </div>
    <div id="disqus_comments">
        <button onclick="load_disqus()">recharger</button>
    </div>
    <script type="text/javascript">
        var disqus_identifier = "{{ article.url }}";
        function load_disqus() {
            var dsq = document.createElement('script');
            dsq.type = 'text/javascript';
            dsq.async = true;
            dsq.src = '//{{ DISQUS_SITENAME }}.disqus.com/embed.js';
            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
            var load_button = document.getElementById('disqus_comments');
            load_button.parentNode.removeChild(load_button);
      };
    </script>
    {% endif %}