很久之前听到多说要关闭的这个消息内心十分复杂,因为又要花一些时间去转移数据啦~
况且千千的评论还这么多。
评论数量什么的都不重要啦,重要的是关闭插件以后的原生评论框好丑😭
算了,还是等一切都结束以后再做吧!
然后某天看到 LWL12
写过的 记弃用多说牵扯出来的一堆坑
中有这么一句:
多说的
WordPress
插件众所周知是有一个自动往本地数据库回写的功能的,也是这个功能让不少站长很开心的入了坑。然而有一个比较坑的地方是,这个回写并不会把正确的
User-Agent
写到本地数据库,而是用一个Duoshuo/1.2:0000000000000000000
这样的字符串来代替。所以如果你把多说给撤了,那么不做处理的话这些 UA 数据就是相当于丢了。
于是,默默的打开自己的数据库看了看,真的是欸~ (悲伤几分钟)
因为 LWL12
有贴出自己写的代码,然后就放心的把 UA
有关的预计处理时间置零咯~
直到昨天才发现代码中 https://你的多说管理后台前缀.duoshuo.com/api/posts/list.json
已失效,明明还没有到儿童节的说 /(ㄒoㄒ)/~~
{"code":990002,"errorMessage":"很抱歉,多说项目已关闭.请见http:\/\/duoshuo.com"}
只能找其他方法咯~
多说也有提供导出数据的功能啦,只是 export.json
中还是没有我想要的 UA
信息。
于是,去翻了翻官方文档中的 获取文章的评论
然后尝试了一篇自己的文章
发现 parentPosts
中的每一个 id
都代表一条评论,并且每一条评论中的 agent
便是我们需要找的 UA
😝~
回到数据库中又看了看,发现这里的 id
刚好是数据库中 Duoshuo/1.2:
后面的内容。
然后问题便解决啦~
贴出自己写的代码,使用的话需要保证你的电脑上要有 Python2.7
的环境哦~
还有别忘了修改代码中前面的几个字段。(代码保质期:18天)
# -*- coding:utf-8 -*-
import MySQLdb
import urllib
import json
# 多说短名
short_name = 'short_name'
db_host = "localhost"
db_user = "root"
db_pass = "pass"
db_name = "wordpress"
db_charset = "utf8mb4"
# 表前缀
fi_table = "dw_"
db = MySQLdb.connect(db_host, db_user, db_pass, db_name)
cursor = db.cursor()
cursor.execute("set names " + db_charset)
work_list = []
fail_list = []
# 从 json 数据中获取评论的 agent 信息
def get_ua(js, agent):
try:
# print js
if len(js['parentPosts']) > 0:
comment = js['parentPosts'][agent]
print comment['author']['name'], comment['message']
return comment['agent']
except KeyError:
pass
return ''
# 根据多说短名与文章 id 获取当前文章所有评论信息
def get_json(thread_id):
global short_name
url = 'http://api.duoshuo.com/threads/listPosts.json?thread_key=' + str(
thread_id) + '&short_name=' + short_name + '&page=1&limit=1000'
print url
html = urllib.urlopen(url).read()
return json.loads(html)
def get_data(post_id):
global cursor
sql = "select * from " + fi_table + "comments where comment_agent like 'Duoshuo%' and comment_post_ID = " + str(
post_id)
cursor.execute(sql)
return cursor.fetchall()
# 将找到的ua信息写回数据库
def update_data(comment_id, ua_info):
global db, cursor
if ua_info == '':
fail_list.append(comment_id)
return
sql = "update " + fi_table + "comments set comment_agent = '" + ua_info + "' where comment_ID = " + str(comment_id)
print sql
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
# 获取需要修改的评论文章所在ID
def get_work_list():
global cursor, work_list
sql = "SELECT DISTINCT comment_post_ID from " + fi_table + "comments where comment_agent like 'Duoshuo%'"
cursor.execute(sql)
data = cursor.fetchall()
for i in data:
work_list.append(i[0])
get_work_list()
for i in work_list:
js = get_json(i)
data = get_data(i)
for i in data:
# 字符串切片 去掉 'duoshuo/1.2:'
ua_info = get_ua(js, str(i[11])[12:])
update_data(i[0], ua_info)
# 出错评论 ID
print fail_list
db.close()
这一定是千千发出的有关多说的最后一篇文章啦~
谢谢你陪伴我一年的时间~
久安~
多说这么一挂,好多人为评论发愁,还是老老实实用原装货吧
是呀!还是自己的最安全了
多说其实挺方便的,然而
然而你一直都没有用过它,是吧!φ( ̄∇ ̄o)
其实用过大半年
现在撤掉啦!总之,为我们的博客再也不用加载那超big的embed.js干杯(゜-゜)つロ
还有半个月多说就彻底GG了(´இ皿இ`)
我选择妹blog,到处扒站真刺激(滑稽) 虽然作者肉肉到现在还在坑(╯°A°)╯︵○○○
妹blog也挺好用的,我也试过(/ω\) 虽然后台非常简单,但也是肉肉自己写的
我仍然选择WordPress(谁叫它有官方手机客户端想什么时候水就什么时候水,随时都可以评论呢┑( ̄Д  ̄)┍)
或许我也会一直留在这里也说不定呀~
咦~没有换成typecho咩
因为感觉自己无力驾驭修改200+篇文章样式欸,到现在才修改完50+篇,忧伤的千千~
完成了1/4了嘛
万一不想转了怎么办,发现找不到自己喜欢的主题