
 
声明
该脚本的目的只是为了提升博客创作效率和博主互动效率,希望大家还是要尊重各位博主的劳动成果。
数据库设计
尽量我们要新建一个数据库csdn_article,再在其中建一个数据表article
-- csdn_article
 	-- article
 		-- 需要进行自动评论的表格信息...
CREATE TABLE `article` (
 
  `articleId` bigint NOT NULL COMMENT 'id',
 
  `articleDetailUrl` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'url',
 
  `articleTitle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标题',
 
  `nickName` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '昵称',
 
  `hotRankScore` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '热度',
 
  `comment` int NOT NULL DEFAULT '0' COMMENT '是否评论(0,否,1是)',
 
  `like` int NOT NULL DEFAULT '0' COMMENT '是否点赞(0,否,1是)',
 
  `insert_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 
  PRIMARY KEY (`articleId`) USING BTREE
 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
代码
import random, time, os, threading
import requests
import pymysql
from dbutils.pooled_db import PooledDB
from schedule import every, repeat, run_pending
import json
POOL = PooledDB(
    creator=pymysql,  # 使用链接数据库的模块
    maxconnections=20,  # 连接池允许的最大连接数,0和None表示不限制连接数
    mincached=6,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
    maxcached=None,  # 链接池中最多闲置的链接,0和None不限制
    maxshared=5,
    blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
    maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
    setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
    ping=0,  # ping MySQL服务端,检查是否服务可用。
    host='127.0.0.1', port=3306, user='xxx', password='xxx', database='csdn_article', charset='utf8')
def insert_article(articleId, articleDetailUrl, articleTitle, nickName, hotRankScore):
    print("===【插入文章】运行开始 ===\n")
    db = POOL.connection()
    conn = db.cursor()  # 使用cursor()方法获取操作游标
    sql = "INSERT INTO `article` (`articleId`, `articleDetailUrl`, `articleTitle`, `nickName`, `hotRankScore`) VALUES (%s, %s, %s, %s, %s);"
    data = (articleId, articleDetailUrl, articleTitle, nickName, hotRankScore)
    conn.execute(sql, data)    # 使用execute方法执行SQL语句
    data = db.commit()  # 使用 fetchone() 方法获取一条数据
    db.close()
    print("===【插入文章】运行结束 ===\n")
    return data
def select_is_insert(articleId):
    print("===【检查文章是否已插入】运行结束 ===\n")
    db = POOL.connection()
    conn = db.cursor()  # 使用cursor()方法获取操作游标
    conn.execute("SELECT COUNT(*) FROM `article` WHERE `articleId` = %s;" % articleId)  # 使用execute方法执行SQL语句
    data = conn.fetchall()  # 使用 fetchone() 方法获取一条数据
    db.close()
    print("===【检查文章是否已插入】运行结束 ===\n")
    return data[0][0]
def select_is_comment():  # 查询没有评论的数据
    print("===【查询未评论文章】运行开始 ===\n")
    db = POOL.connection()
    conn = db.cursor()  # 使用cursor()方法获取操作游标
    conn.execute(
        # "SELECT `articleId`,`articleDetailUrl` FROM `article` WHERE `comment` = '0' LIMIT 0, 2;")  # 使用execute方法执行SQL语句
        "SELECT `articleId`,`articleDetailUrl` FROM `article` WHERE `comment` = '0' LIMIT 0, 10;")
    data = conn.fetchall()  # 使用 fetchone() 方法获取一条数据
    db.close()
    print("===【查询未评论文章】运行结束 ===\n")
    return data
def update_article(articleId, comment=1):
    print("===【更新文章评论状态(未评论->已评论)】运行开始 ===\n")
    db = POOL.connection()
    conn = db.cursor()  # 使用cursor()方法获取操作游标
    conn.execute(
        "UPDATE `article` SET  `comment` =%s WHERE `articleId` = %s;" % (comment, articleId))  # 使用execute方法执行SQL语句
    data = db.commit()  # 使用 fetchone() 方法获取一条数据
    db.close()
    print("===【更新文章评论状态(未评论->已评论)】运行结束 ===\n")
    return data
def comment(articleId):
    """评论"""
    print("===【评论功能】运行开始 ===\n")
    # time.sleep(5)
    # user_headers = {
   
    #     'Host': 'blog.csdn.net',
    #     'Connection': 'keep-alive',
    #     'Content-Length': '75',
    #     'sec-ch-ua


















