python微信接口测试代码

本文介绍了一个基于Python和SQLite的自动化午餐菜单生成系统,该系统能够根据预设的菜单和用户偏好,每日随机生成午餐建议,并通过微信通知所有成员。系统包括了菜单管理、历史记录查询、用户管理等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- coding:utf-8 --

import sqlite3
import sys
reload (sys)
sys.setdefaultencoding(‘utf8’)
import itchat
from itchat.content import *
import random
import time

############################################################################################

DB APIs

############################################################################################

def GetMaxID(tableName):
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
strSql = ‘’‘SELECT MAX(ID) AS MAXID FROM ‘’’ + tableName
cursor = c.execute(strSql)
retData = c.fetchall()
print (len(retData))
print (retData[0][0])
conn.commit()
conn.close()
if retData[0][0] is None:
return 0
return retData[0][0]

def AddMenu(menuName, wFactor):
print (‘enter AddMenu…’)
maxId = GetMaxID(‘ALL_MENU’)
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
strSql = ‘’‘INSERT INTO ALL_MENU(ID, NAME, WFACTOR) VALUES(?, ?, ?)’’’
v = (maxId + 1, menuName, wFactor)
c.execute(strSql, v)
conn.commit()
conn.close()

def DelMenu(id):
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
if id > 0:
strSql = ‘’‘DELETE FROM ALL_MENU WHERE ID = ‘’’ + str(id)
else:
strSql = ‘’‘DELETE FROM ALL_MENU’’’
c.execute(strSql)
conn.commit()
conn.close()

def ModifyMenu(id, menuName, wFactor):
print (‘enter AddMenu…’)
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
strSql = ‘’‘UPDATE ALL_MENU SET NAME = ?, WFACTOR = ? WHERE ID = ?’’’
v = (menuName, wFactor, id)
c.execute(strSql, v)
conn.commit()
conn.close()

def GetAllMenu():
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
strSql = ‘’‘SELECT * FROM ALL_MENU’’’
c.execute(strSql)
retData = c.fetchall()
print (len(retData))
print (retData)
conn.commit()
conn.close()
return retData

def GetLunchResult(num):
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
strSql = ‘’‘SELECT * FROM LUNCH_RESULT ORDER BY ID DESC LIMIT ‘’’ + str(num)
c.execute(strSql)
retData = c.fetchall()
print (len(retData))
print (retData)
conn.commit()
conn.close()
if len(retData) == 0:
return None
return retData

def AddLunchResult(menuName, aaMode, Date):
maxId = GetMaxID(‘LUNCH_RESULT’)
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
strSql = ‘’‘INSERT INTO LUNCH_RESULT(ID, MENU, AAMODE, DATE) VALUES(?, ?, ?, ?)’’’
v = (maxId + 1, menuName, aaMode, Date)
c.execute(strSql, v)
conn.commit()
conn.close()

def DelAllLunchResult():
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
strSql = ‘’‘DELETE FROM LUNCH_RESULT’’’
c.execute(strSql)
conn.commit()
conn.close()

def GetAllUser():
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
strSql = ‘’‘SELECT * FROM USER’’’
c.execute(strSql)
retData = c.fetchall()
print (len(retData))
print (retData)
conn.commit()
conn.close()
return retData

def AddUser(name, wFactor):
maxId = GetMaxID(‘USER’)
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
strSql = ‘’‘INSERT INTO USER(ID, NAME, WFACTOR) VALUES(?, ?, ?)’’’
v = (maxId + 1, name, wFactor)
c.execute(strSql, v)
conn.commit()
conn.close()

def DelAllUsers():
conn = sqlite3.connect(‘antony.db’)
c = conn.cursor()
strSql = ‘’‘DELETE FROM USER’’’
c.execute(strSql)
conn.commit()
conn.close()

############################################################################################
############################################################################################

############################################################################################

APP apis

############################################################################################

def IsMenuGenerated():
todayDate = time.strftime(’%Y-%m-%d’,time.localtime(time.time()))
menuResult = GetLunchResult(1)
if menuResult is None:
return False
if menuResult[0][3] is None:
return False
if cmp(menuResult[0][3], todayDate):
return False
return True

def GenerateLunchMsg():
curMenu = GetLunchResult(1)
AAMode = curMenu[0][2]
if cmp(AAMode, ‘AA’):
AAMode += ‘请客’
msg1 = ‘大哥,我们今天中午去’ + curMenu[0][1] + ', ’ + AAMode + ‘, 你觉得可以?’
msg2 = ‘大哥说,今天中午去’ + curMenu[0][1] + ', ’ + AAMode + ‘!!’
return msg1, msg2

def DisplayLunchResult(num):
allResult = GetLunchResult(num)
retData = ‘’
for item in allResult:
retData += ‘[’ + item[1] + ', ’ + item[2] + ', ’ + item[3] + ‘]\n’
return retData

def DisplayAllMenus():
retData = ‘’
menuList = GetAllMenu()
for item in menuList:
retData += ‘[’ + str(item[0]) + ', ’ + item[1] + ', ’ + str(item[2]) + ']\n ’
return retData

def DisplayAllUsers():
retData = ‘’
userList = GetAllUser()
for item in userList:
retData += ‘[’ + str(item[0]) + ', ’ + item[1] + ', ’ + str(item[2]) + ']\n ’
return retData

def DynamicMenuFactors(chooseName):
print ‘enter ActiveMenuFactors…’
menuList = GetAllMenu()
print len(menuList)
totalFactor = 0
for item in menuList:
wFactor = item[2] + 1
if item[1] == chooseName:
wFactor -= len(menuList)
if wFactor < 1:
wFactor = 1
totalFactor += wFactor
ModifyMenu(item[0], item[1], wFactor)
if 10 * len(memuList) - totalFactor >= 5:
for item in menuList:
ModifyMenu(item[0], item[1], wFactor+1)
############################################################################################
############################################################################################

############################################################################################

process actions

############################################################################################
def ProcShowHistory(msg):
param = msg.split(’#’, 1)
if len(param) == 2:
try:
menuNum = int(param[1])
except IOError:
return ‘’
else:
menuNum = 1

if menuNum > 5:
    return DisplayLunchResult(5)
else:
    return DisplayLunchResult(menuNum)

def ProcShowAllMenus():
return DisplayAllMenus()

def ProcShowAllUsers():
return DisplayAllUsers()
############################################################################################
############################################################################################
def GetAllGroupMembers():
GroupMembers = []
loginUser = itchat.search_friends()
if not len(loginUser):
print ‘ERROR: cannot get login user!!’
return ‘’
GroupMembers.append(loginUser[‘UserName’])

#add all user to admin list
userList = GetAllUser()
for item in userList:
    userItem = itchat.search_friends(name = item[1])
    #print userItem
    if len(userItem):
        GroupMembers.append(userItem[0]['UserName'])
#end of add lucas to admin list
return GroupMembers

@itchat.msg_register(TEXT)
def simple_reply(msg):
adminUsers = GetAllGroupMembers()

print '\n*************************************************************'
print 'received from : [%s] [%s]' % (msg['FromUserName'], msg["Text"])

if not msg['FromUserName'] in adminUsers :
    print 'not admin user, ignore...'
    return ''

if msg["Text"].upper().find('LUNCH') >= 0 or msg["Text"].upper().find('饭') >= 0:
    GenerateMenuAndNotify()
elif msg["Text"].upper().find('SHOW HIST') >= 0:
    return ProcShowHistory(msg["Text"].upper())
elif msg["Text"].upper().find('SHOW MENUS') >= 0:
    return ProcShowAllMenus()
elif msg["Text"].upper().find('SHOW USERS') >= 0:
    return ProcShowAllUsers()
else:
    print 'not support...'
    return '哦,然后呢?'
return ''

def send_move(recverName, msg):
users = itchat.search_friends(name=recverName) # 使用备注名来查找实际用户名
#获取好友全部信息,返回一个列表,列表内是一个字典
#print users
#获取UserName,用于发送消息
userName = users[0][‘UserName’]
itchat.send(msg,toUserName = userName)
print ‘send to [’ + userName + ‘] succeed!’

def sendByUsername(sendTo, msg):
itchat.send(msg,toUserName = sendTo)
print ‘send to [’ + sendTo + ‘] succeed!’

def GetTodaysMenu():
allDBMenus = GetAllMenu()
allMenuList = []
for item in allDBMenus :
for i in range(item[2]) :
allMenuList.append(item[1])
#print allMenuList
random.shuffle(allMenuList)
#print allMenuList
return random.choice(allMenuList)

def WhosGoingToPay():
userList = GetAllUser()
allPayModeList = []
for item in userList:
for i in range(item[2]) :
allPayModeList.append(item[1])
#print allPayModeList
random.shuffle(allPayModeList)
#print allPayModeList
return random.choice(allPayModeList)

def GenerateMenuAndNotify():
msgToBigBrother = ‘’
lunchNotifyMsg = ‘’
todayDate = time.strftime(’%Y-%m-%d’,time.localtime(time.time()))
if IsMenuGenerated() == False:
print ‘have not generated lunch menu…’
chooseItem = GetTodaysMenu()
payMode = WhosGoingToPay()
print ‘menu for today:’
print chooseItem
print payMode
print todayDate
AddLunchResult(chooseItem, payMode, todayDate)
DynamicMenuFactors(chooseItem)

msgToBigBrother, lunchNotifyMsg  = GenerateLunchMsg()
#send_move('刘大', msgToBigBrother)
#send_move('张大', lunchNotifyMsg)
#send_move('刘鹏飞', lunchNotifyMsg)
#send_move('郭三', lunchNotifyMsg)
#send_move('姜四', lunchNotifyMsg)

adminUsers = GetAllGroupMembers()
for item in adminUsers:
    sendByUsername(item, lunchNotifyMsg)

if name==‘main’:
#ms1,ms2 = GenerateLunchMsg()
#print ms1
#print ms2

itchat.auto_login(hotReload=True)  # 首次扫描登录后后续自动登录
itchat.run()
print 'start running...'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值