多说 UA 写回数据库

很久之前听到多说要关闭的这个消息内心十分复杂,因为又要花一些时间去转移数据啦~

况且千千的评论还这么多。

评论数量什么的都不重要啦,重要的是关闭插件以后的原生评论框好丑😭

算了,还是等一切都结束以后再做吧!

 

然后某天看到 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()

这一定是千千发出的有关多说的最后一篇文章啦~

谢谢你陪伴我一年的时间~

久安~


我想对千千说~

22 只已被捕捉

  • 闲鱼 QQ浏览器 | 9.6.10990.400 Windows 7

    多说这么一挂,好多人为评论发愁,还是老老实实用原装货吧

    • 千千 Edge | 15.15063 Windows 10/11

      是呀!还是自己的最安全了

  • 兰陵 Chrome | 58.0.3029.110 Windows 7

    多说其实挺方便的,然而

    • 千千 Edge | 15.15063 Windows 10/11

      然而你一直都没有用过它,是吧!φ( ̄∇ ̄o)

      • 兰陵 Chrome | 58.0.3029.110 Windows 7

        其实用过大半年

        • 千千 Edge | 15.15063 Windows 10/11

          现在撤掉啦!总之,为我们的博客再也不用加载那超big的embed.js干杯(゜-゜)つロ

  • 蔡锶铎 Chrome | 58.0.3029.110 Windows 7

    还有半个月多说就彻底GG了(´இ皿இ`)

    我选择妹blog,到处扒站真刺激(滑稽) 虽然作者肉肉到现在还在坑(╯°A°)╯︵○○○

    • 千千 Edge | 15.15063 Windows 10/11

      妹blog也挺好用的,我也试过(/ω\) 虽然后台非常简单,但也是肉肉自己写的

  • LiarOnce Chrome | 57.0.2987.110 Windows 10/11

    我仍然选择WordPress(谁叫它有官方手机客户端想什么时候水就什么时候水,随时都可以评论呢┑( ̄Д  ̄)┍)

    • 千千 Edge | 15.15063 Windows 10/11

      或许我也会一直留在这里也说不定呀~

  • 香菇 Maxthon Windows 10/11

    咦~没有换成typecho咩

    • 千 千 Edge | 15.15063 Windows 10/11

      因为感觉自己无力驾驭修改200+篇文章样式欸,到现在才修改完50+篇,忧伤的千千~

      • 友人C Chrome | 56.0.2924.87 Android 4.4.4

        完成了1/4了嘛

        • 千千 Edge | 15.15063 Windows 10/11

          万一不想转了怎么办,发现找不到自己喜欢的主题