请所有用户在 6/25-7/25 期间尽快完成实名认证,对于未进行实名认证的账户,我们将禁止其创建或者激活应用,并禁止应用转移以及数据导入导出等操作,应用内具体的 API 请求不受影响;认证过渡期后我们会完全停止为尚未提交认证信息的账户提供服务。

  最近 LeanCloud 要实名才给用了,国际版也要验证手机号。可是本萌妹偏偏就不想实名,所以就只好放弃这个评论框了。好久没 po 文好不容易 po 一篇居然是这种……

评论导出

  现在 LeanCloud 后台已经禁止数据导出了,但是并没有禁止 API 请求,可以用 LeanCloud API 在线测试工具 把评论导出来。不过到 7/25 之后就完全不给用了,所以要趁早。

评论转换

  搜了搜没有找到现成的转换工具,只好自己硬着头皮鼓捣了。

  下面是把 Valine 评论数据转换成 Disqus 可导入的 WordPress WXR 格式的脚本。(需要安装 jq 和 curl

  用法:

  valine-to-wxr.sh commentfile site

  像我就是:

  valine-to-wxr.sh comment.json https://veltlion.github.io

  因为 WordPress 的 WXR 格式需要文章标题,所以需要网址联网获取。但是不填好像也能导入,比如它也需要文章内容,我没填也正常导入了。

  转换完之后到 https://import.disqus.com 导入就好了。

如果之前是从别的评论框转到 Valine ,记得先把之前导入到 Valine 的评论日期改回正确的。

Disqus 不好用了

  导入后评论者的头像都没有了,中文的标点符号也都变成英文的了,而且有些中文 url 文章下的评论也没有显示,但这都不是主要的。

  现在 Disqus 的后台把评论者的 Email 和 IP 都打码了,导出的评论中没有评论者的 Email 和 IP 信息,也没有之前导入的评论。这样以后如果要换到其他评论框的话,这些评论都不能通过 Email 获取评论者的 Gravatar 头像。

  还是不用 Disqus 了,我想支持 WordPress WXR 导入或转换的评论框应该会有很多吧,在 LeanCloud 不给用后到换用其他评论框之前还是先关掉评论好了。(其实本来也没多少人评论

(说到底还是多说好用,为多说默哀三秒钟。

valine-to-wxr.sh下载
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
#!/usr/bin/env bash
# 空
# Valine to WordPress WXR
# 2019-07-03

comfile="$1"
site="$2"

line=$(grep comment $comfile |wc -l)

comment() {
for ((j=0; j<$line; j++)); do
linkc=$(jq -r ".results[$j].url" $comfile)
if [[ $link == $linkc ]]; then
comid=$(jq -r ".results[$j].objectId" $comfile)
author=$(jq -r ".results[$j].nick" $comfile)
email=$(jq -r ".results[$j].mail" $comfile)
aurl=$(jq -r ".results[$j].link" $comfile | sed 's/^null$//')
aip=$(jq -r ".results[$j].ip" $comfile)
date=$(jq -r ".results[$j].createdAt" $comfile | sed 's/T/ /; s/\.[0-9]\{3\}Z//')
parent=$(jq -r ".results[$j].rid" $comfile | sed 's/^null$//')
content=$(jq -r ".results[$j].comment" $comfile)

echo "<wp:comment>
<wp:comment_id>$comid</wp:comment_id>
<wp:comment_author>$author</wp:comment_author>
<wp:comment_author_email>$email</wp:comment_author_email>
<wp:comment_author_url>$aurl</wp:comment_author_url>
<wp:comment_author_IP>$ip</wp:comment_author_IP>
<wp:comment_date_gmt>$date</wp:comment_date_gmt>
<wp:comment_content><"!"[CDATA[$content]]></wp:comment_content>
<wp:comment_approved>1</wp:comment_approved>
<wp:comment_parent>$parent</wp:comment_parent>
</wp:comment>"
fi
done
}

item() {
for ((i=0; i<$line; i++)); do
link=$(jq -r ".results[$i].url" $comfile)
touch $comfile.xml
check=$(grep $link $comfile.xml)
if [[ $check != '' ]]; then
continue
fi
if [[ $site != '' ]]; then
page=$(curl -s $site$link)
title=$(echo $page | grep -Po '(?<=\<title\>).*(?=\<\/title\>)')
fi
echo "<item>
<title>$title</title>
<link>$site$link</link>
<content:encoded><"!"[CDATA[]]></content:encoded>
<wp:post_date_gmt></wp:post_date_gmt>
<wp:comment_status>open</wp:comment_status>
$(comment)
</item>">>$comfile.xml
done
}

echo '<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:wp="http://wordpress.org/export/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dsq="http://www.disqus.com/" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel>'>>$comfile.xml
item
echo '</channel></rss>'>>$comfile.xml
echo done!