- PVSM.RU - https://www.pvsm.ru -
Какое-то время я хотел убрать комментарии из своего блога; в основном, потому что здесь вообще мало комментариев, да и не хочется возиться с лишними «тормозами» от Disqus [1]. Посмотрев на время загрузки Disqus, я был потрясён тем, что приходится терпеть посетителям сайта по моей вине (кроме тех, кто использует блокировщики вроде Privacy Badger [2] и uBlock Origin [3].
Эта статья заточена под Hugo, но код легко адаптируется для любого сайта.
Вот как выглядит типичный журнал запросов с включенным Disqus.
А вот лог после отключения Disqus.
ЧЕГО!?
Важные моменты здесь следующие:
Среди сетевых запросов вы можете обнаружить такие:
Я не могу посетить многие из этих сайтов, потому что они заблокированы в uBlock Origin, так что информацию пришлось собирать из результатов поиска Google и со сторонних сайтов. Нечего и говорить — довольно противно видеть, как некоторые бесплатные продукты превращают вас самого в продукт. Ещё больше опасений вызывают сервисы, которые пытаются скрыть своё предназначение и цель, зачем они следят за вашими действиями.
В любом случае, удаляйте это. Прошу прощения перед всеми за то, что отравил свой сайт этими сетями. Перейдём к лучшим вещам.
Я обсуждал удаление Disqus, и @HarryDenholm [6] упомянул, что его друг умудрился реализовать комментарии на своём статичном блоге Github, используя пулл-реквесты. Я подумал, что это гениальная идея, и решил выяснить, можно ли сделать что-то такое для Hugo на внешнем сайте.
Ответ содержится в Github Issue API [7]. Процесс довольно простой и он уже работает для этого поста в блоге [8]:
Преимущества такого подхода вы получаете немедленно:
Для чтения данных Github JSON не требуется ключ API; они полностью открыты для доступа. Комментарии к этому посту можно считать в виде JSON здесь [12]. Первый комментарий выглядит так:
{
"url": "https://api.github.com/repos/dwilliamson/donw.io/issues/comments/295004846",
"html_url": "https://github.com/dwilliamson/donw.io/issues/1#issuecomment-295004846",
"issue_url": "https://api.github.com/repos/dwilliamson/donw.io/issues/1",
"id": 295004846,
"user": {
"login": "dwilliamson",
"id": 1532903,
"avatar_url": "https://avatars3.githubusercontent.com/u/1532903?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/dwilliamson",
"html_url": "https://github.com/dwilliamson",
"followers_url": "https://api.github.com/users/dwilliamson/followers",
"following_url": "https://api.github.com/users/dwilliamson/following{/other_user}",
"gists_url": "https://api.github.com/users/dwilliamson/gists{/gist_id}",
"starred_url": "https://api.github.com/users/dwilliamson/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/dwilliamson/subscriptions",
"organizations_url": "https://api.github.com/users/dwilliamson/orgs",
"repos_url": "https://api.github.com/users/dwilliamson/repos",
"events_url": "https://api.github.com/users/dwilliamson/events{/privacy}",
"received_events_url": "https://api.github.com/users/dwilliamson/received_events",
"type": "User",
"site_admin": false
},
"created_at": "2017-04-18T22:39:16Z",
"updated_at": "2017-04-18T22:39:16Z",
"body": "This is a comment"
},
Первым делом следует добавить новый шаблон в свой каталог с частями шаблонов. Он будет считывать и отображает комментарии Github (comments.html
). Вот код, который я использовал:
var url = "https://github.com/dwilliamson/donw.io/issues/" + {{ $.Params.ghcommentid }}
var api_url = "https://api.github.com/repos/dwilliamson/donw.io/issues/" + {{ $.Params.ghcommentid }} + "/comments"
$(document).ready(function () {
$.ajax(api_url, {
headers: {Accept: "application/vnd.github.v3.html+json"},
dataType: "json",
success: function(comments) {
$("#gh-comments-list").append("Visit the <b><a href='" + url + "'>Github Issue</a></b> to comment on this post");
$.each(comments, function(i, comment) {
var date = new Date(comment.created_at);
var t = "<div id='gh-comment'>";
t += "<img src='" + comment.user.avatar_url + "' width='24px'>";
t += "<b><a href='" + comment.user.html_url + "'>" + comment.user.login + "</a></b>";
t += " posted at ";
t += "<em>" + date.toUTCString() + "</em>";
t += "<div id='gh-comment-hr'></div>";
t += comment.body_html;
t += "</div>";
$("#gh-comments-list").append(t);
});
},
error: function() {
$("#gh-comments-list").append("Comments are not open for this post yet.");
}
});
});
Его можно вызвать со страницы поста:
{{ partial "comments.html" . }}
Переменные, на которые ссылается шаблон, следует добавить в заголовок html-страницы. В данном случае это единственная переменная ghcommentid
, она устанавливает номер Issue, который используется для комментариев.
Добавить больше нечего. Технически, вы можете вообще публиковать свои посты как Github Issues и забыть о блог-движке. Но это кажется использованием системы не по назначению.
Этот веб-сайт управляется на Github как dwilliamson/donw.io [13]. Там есть полный код для использования Github в качестве движка комментариев.
Автор: m1rko
Источник [14]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/253745
Ссылки в тексте:
[1] Disqus: https://disqus.com/
[2] Privacy Badger: https://www.eff.org/privacybadger
[3] uBlock Origin: https://github.com/gorhill/uBlock
[4] Image: https://habrastorage.org/files/a1a/3e3/02f/a1a3e302f4974b4093251befda71d3d4.png
[5] Image: https://habrastorage.org/files/86f/c0d/dad/86fc0ddad76c4bfba4cae2f78ce6f2cf.png
[6] @HarryDenholm: https://twitter.com/HarryDenholm
[7] Github Issue API: https://developer.github.com/v3/issues/
[8] этого поста в блоге: http://donw.io/post/github-comments/
[9] здесь: https://github.com/dwilliamson/donw.io/issues/1
[10] Markdown: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
[11] Github Reactions: https://developer.github.com/v3/reactions/
[12] здесь: https://api.github.com/repos/dwilliamson/donw.io/issues/1/comments
[13] dwilliamson/donw.io: https://github.com/dwilliamson/donw.io
[14] Источник: https://habrahabr.ru/post/327424/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.