声明
该脚本的目的只是为了提升博客创作效率和博主互动效率,希望大家还是要尊重各位博主的劳动成果。
数据库设计
尽量我们要新建一个数据库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