文章最初发表于szhshp的第三边境研究所
转载请注明

关于博客评论

六月多说挂了,地球人都知道。

倡言、云跟帖、来必力都很烂,地球人都知道。

转Disqus的都是人才。

Disqus使用中遇到的问题

如果你常年写静态博客并且经常使用评论框,Disqus使用中你肯定会遇到一些问题,比如:

  1. 很难将其他平台的评论记录导入到Disqus
  2. 国内无法访问

第一个问题请参考之前的文章: Disqus评论框改造工程-"最近评论"的实现

迁移一般不成问题,不过国内访问依然是个大麻烦,于是这周我看了下使用反向代理实现Disqus国内访问的解决方案

Disqus国内访问

实现Disqus国内访问你需要几样东西:

  1. 你肯定要先有其他办法访问Disqus进行评论管理查看测试

    • 可以参考这篇文章( OmegaHosts-添加Hosts本该如此简单)修改Hosts访问Disqus
    • 当然很多地方集成的Hosts文件里面也已经有Disqus的IP了,也可以直接拿来用,反正Disqus的IP不会像Google一样经常改变
  2. 你需要一台服务器/VPS,你可以偷室友的/抢基友的/用公司的/偷学校的或者自己买,无论如何你需要一个可以操作的服务器

代理思路

目的是让所有用户都能看到评论框。

  • 首先GFW封锁了Disqus,一般网络无法访问。
  • 使用VPN/Hosts的用户打通了Disqus访问的路径
    • 但是没有使用VPN/Hosts的访客依然无法查看Disqus
  • 首先判断用户是否可以访问原生Disqus,如果可以,直接访问不做处理
  • 如果不行,这时我们创建一个代理,将所有用户的访问都Redirect到代理服务器
    • 当然我们需要让服务器可以直接访问Disqus
    • 可以购买国外的服务器或者在服务器上运行VPN
  • 如此可以实现让所有用户访问评论框

要实现这个功能,可以用现成的轮子: https://github.com/ciqulover/disqus-proxy

后端配置

  1. clone repo

         git clone https://github.com/ciqulover/disqus-proxy
    
  2. 安装依赖

         npm i --production
    // 或者
    yarn install --production
  3. 配置 server 目录下的config.js

        module.exports = {
// 服务端端口,需要与 disqus-proxy 前端设置一致
port: 5509,
// 你的 diqus secret key
api_secret: 'your secret key',
// 你的 disqus 名称,就是forum名称
username:'ciqu',
// 服务端 socks5 代理转发,便于在本地测试,生产环境通常为 null
socks5Proxy: null,
// 日志输出位置, 输出到文件或控制台 'file' | 'console'
log: 'console'
}

api secret key需要在Disqus的API页面申请
另外需要到Settings => Community 里开启访客评论

  1. 启动服务

         cd server
    node index.js

正常运行服务,关闭ssh的时候就会关闭服务器,因此可以考虑使用forever插件

前端配置

将build里面的几个文件夹放到自己项目路径,修改对应引用路径:

      <*div id="disqus_proxy_thread"><*/div>
<*div id="disqus_thread"><*/div>
<*script>
window.disqusProxy = {
username:'szhshp', --同样是Forum名字
server: '123.123.123.321', --这里是服务器IP
port: 3000,
defaultAvatar: '/img/default-avatar.png', --默认头像
adminAvatar: '/img/admin-avatar.png', --自己的头像
identifier: window.location.href --就是辨识符这样的东西,一般是用当前url
};
window.disqus_config = function () {
this.page.url = window.location.href;
this.page.identifier = window.location.href;
};
var s = document.createElement('script');
s.src = '/static/js/main.0d0338ae.js';
s.async = true;
document.body.appendChild(s);
<*/script>
<*link rel="stylesheet" href="/static/css/main.0603c539.css">

配置完成后,访问对应页面,如果当前网络状况无法访问Disqus,则会显示一个精简版的评论框,这个评论框仅支持添加匿名评论。

如果可以访问Disqus,就会显示原生Disqus评论框。

好,代理搭建完成,但是这还没有完成,还存在几个问题

Trouble Shooting

This application cannot create posts on the chosen forum

这个问题看了我两天

原来代码里面其实存在一个大问题,最大的问题就是一切配置正常的情况下,无法添加新的评论

对应的Post报错:This application cannot create posts on the chosen forum

这个很是奇怪,添加新评论将会通过Http.Post到 create.json前后端交互的一切逻辑都符合官方API的需求,但是偏偏就是无法添加新的匿名评论。

调查许久后,发现有一个key有些特殊:Post到create.json这个接口的时候对应的API_Key 是一个固定的值,而不是自己的Public Key或者Secret Key,这一点可以通过自己添加一个新的评论然后抓包证实。

同时很多文章也提到了这个问题(虽然没有feedback但是这儿是正确答案):Creating an anonymous post with disqus API fails

因此,将上面轮子里面的一个螺丝钉换一下即可:将post的其中一个参数改为固定值:

        router.post('/api/createComment', async function (ctx) {
logger.info('Create comment: ' + JSON.stringify(ctx.request.body))
let result
try {
result = await rq(Object.assign(req, {
url: 'https://disqus.com/api/3.0/posts/create.json',
method: 'POST',
form: Object.assign(ctx.request.body, {
api_key: 'E8Uh5l5fHZ6gD8U3KycjAIAk46f68Zw7C6eW8WSjZvCLXebZ7p0r1yrYDrLilk2F' //就是这儿!!!之前用的是public key!!!!!!
}),
json: true
}))
} catch (e) {
logger.error('Error when create comment:' + JSON.stringify(e.error))
ctx.body = e.error
return
}
ctx.body = result
logger.info('Create comment successfully with response code: ' + result.code)
})

关于这个问题,有可能是Disqus方面后期修改的,导致原始代码无法创建新评论。

最终改造

Fix之后,我还修改了一些前端Style:

最终的repo在这儿: https://github.com/szhielelp/disqus-proxy

这下终于可以让所有人在我博客评论了

参考文献

Disqus-Proxy 配置说明

Disqus评论框改造工程-Jekyll等静态博客实现Disqus代理访问的更多相关文章

  1. MWeb 1.4 新功能介绍一:引入文件夹到 MWeb 中管理,支持 Octpress、Jekyll 等静态博客拖拽插入图片和实时预览

    之前在 MWeb 中打开非文档库中的 Markdown 文档,如果文档中有引用到本机图片,是没办法在 MWeb 中显示出来和预览的.这是因为 Apple 规定在 Mac App Store(MAS) ...

  2. 利用github webhook 结合openresty自动更新静态博客

    使用hexo在github pages上弄了一个静态博客,后来觉得访问有点慢,于是放到自己vps上. 对于静态博客的部署非常简单,本来就是html,js,css等静态文件,只要nginx上配置下目录就 ...

  3. Github、Jekyll 搭建及优化静态博客方法指南

    尝试自己写 Blog 的人,一般会经历三个阶段. 第一阶段,刚接触 Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉 ...

  4. 【一】Ubuntu14.04+Jekyll+Github Pages搭建静态博客

    本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...

  5. Jekyll搭建个人博客-拓展版

    关于Jekyll Jekyll 是一个简单的博客形态的静态站点生产机器.它有一个模版目录,其中包含原始文本格式的文档,通过 Markdown (或者 Textile) 以及 Liquid 转化成一个完 ...

  6. 使用GitHub Pages+Jekyll搭建个人博客

    GitHub Pages 免费无限容量的站点数据托管工具(国内访问速度较慢),内置Jekyll服务,能将特定名称的代码仓库动态编译为静态网页 Jekyll 基于Ruby的静态网页生成系统,采用模板将M ...

  7. MWeb 1.4 新功能介绍二:静态博客功能增强

    MWeb 比较有特色的是一键生成静态博客功能,然后从 MWeb 最开始规划要做静态博客生成功能时,我就希望 MWeb 的静态博客生成功能在易用的同时,还要有很强大的扩展性. 比如说能自己增加网站公告, ...

  8. Hexo搭建Github静态博客

    1. 环境环境 1.1 安装Git 请参考[1] 1.2 安装node.js 下载:http://nodejs.org/download/ 可以下载 node-v0.10.33-x64.msi 安装时 ...

  9. hexo搭建静态博客

    1. 环境环境 1.1 安装Git 请参考[1] 1.2 安装node.js 下载:http://nodejs.org/download/ 可以下载 node-v0.10.33-x64.msi 安装时 ...

随机推荐

  1. [Go] Cookie 使用简介

    Golang 的 Cookie web 开发免不了要和 cookie 打交道.Go 的 http 库也提供了 cookie 的相关操作. type Cookie struct { Name strin ...

  2. Android记录3--ExpandableListView使用+获取SIM卡状态信息

    Android记录3--ExpandableListView使用+获取SIM卡状态信息 2013年8月9日Android记录 ExpandableListView是一个可以实现下拉列表的控件,大家可能 ...

  3. EF6+Sqlite连接字符串的动态设置

    摘要 在winform中应用sqlite和ef,对于sqlite连接字串的设置,大多情况下是不想写死了,你不知道用户会将你的exe程序安装在什么位置,也不知道他的电脑盘符是什么,如果写死了,那么很有可 ...

  4. Xcode5和6共存时,如何发布应用到商店

    如何你和我一样手贱安装了Xcode6,同时又需要发布应用到商店时,你会发现打好的包是通不过审核的.验证报错: unable to validate application archives of ty ...

  5. C#编程(五十)----------栈

    栈 栈与队列是一个非常类似的容器,他们的区别在于队列是先进先出,而栈是后进先出. Stack与Stack<T>,像队列一样,栈也提供了泛型与非泛型版本. Stack的方法: 方法 说明 P ...

  6. Spring Websocket实现文本、图片、声音、文件下载及推送、接收及显示(集群模式)

    相关环境 Nginx,Spring5.x当前(要选择4.0+),tomcat8.x,Quartz 2.x集群(实际运用是Quartz的集群模式和单机模式共存的) 测试面页:http://sms.rey ...

  7. 斯巴达克斯诅咒者之战第三季/全集Spartacus迅雷下载

    本季Spartacus 3第三季(2013)看点:<斯巴达克斯>系列是美国Starz电视网历史上的首部原创作品,凭借其重口味的流血镜头.香艳的画面.血腥的打斗场面和优良的制作一经推出就瞬间 ...

  8. 超能英雄第一至四季/全集Heroes迅雷下载

    本季第一.二.三.四季 Heroes Season (2006-2009) 看点:<Heroes>是NBC电视台于2006年九月开播的最新科幻电视剧.Heroes(中文剧名为“英雄”或“天 ...

  9. SEO如何利用百度知道日引流上千IP

    个人小站长.SEO们经常为网站没有流量而发愁,一个没有流量的网站就像一个不喝水的人,迟早得死.没有流量,就没有PV,也就是说你的网站只是 给你一个人看的,那做站有什么意义呢?网站上所发布的内容都是分享 ...

  10. Eclipse 汉化的和修改字体的方法

    先进入 http://www.eclipse.org/babel/downloads.php 找到自己对应版本的网址,然后复制下来. 然后,进入eclipse.点工具栏上的Help - Install ...