python 정시 qq 메시지 발송 실현

8010 단어 python정시 발송
생활 속 에서 여러 가지 일 을 잊 어 버 리 고 마침 python 을 배우 고 있 기 때문에 python 을 통 해 알림 임 무 를 실현 하고 싶 은 이상 한 생각 이 들 었 습 니 다.(TIM 은 정시 기능 이 있 지만)친구,군,토론 팀 에 도 정기 적 으로 qq 메 시 지 를 보 낼 수 있 습 니 다.그 작업 절 차 는 데이터 베 이 스 를 방문 하여 최근 계획 을 추출 하 는 것 입 니 다.>데이터 내용(알림 시간,알림 대상,알림 내용)에 따라 정시 작업 을 설정 합 니 다.>특정 qq 친구 에 게 메 시 지 를 보 냅 니 다.
1.소프트웨어 버 전:

2.설치 의존 환경
pymysql 설치:pip install pymysqlqqbot 설치:pip install qqbot
3.데이터베이스 조작
데이터 베 이 스 는 아주 간단 합 니 다.자바 와 비슷 합 니 다.스스로 초보 튜 토리 얼 에 가서 기초 문법 을 보면 됩 니 다.

#coding: utf-8
import pymysql #  pymysql  

db = pymysql.connect("localhost","root","root","info_db" ) #       
cursor = db.cursor()

#    
def insertSchedule(schedule):
 insertsql = "insert into dutyschedule_tb(worktime,name) values(%s,%s)"
 try:
 #          sql  
 cursor.execute(insertsql,(schedule['worktime'],schedule['name']))
 db.commit()
 except Exception:
 db.rollback()
 raise Exception

#    
def deleteSchedule():
 deletesql = ""
 try:
 cursor.execute(deletesql)
 db.commit()
 except Exception:
 db.rollback()

def updateSchedule(user):
 updatesql = ""
 try:
 cursor.execute(updatesql)
 db.commit()
 except Exception:
 db.rollback()

#       
def findScheduleByNewTime():
 selectsql = "SELECT * FROM dutyschedule_tb where NOW() <= date_format(worktime,'%Y-%m-%d %H:%i:%S') ORDER BY worktime ASC;"
 try:
 cursor.execute(selectsql)
 results = cursor.fetchone()
 schedule = {}
 schedule['worktime'] = results[1]
 schedule['name'] = results[2]
 schedule['content'] = results[3]
 return schedule
 except Exception:
 return None
4.qqbot 로그 인 정보 설정
설정 하지 않 아 도 됩 니 다.설정 하지 않 으 면 매번 코드 를 스 캔 하여 로그 인 하 는 것 입 니 다.그러나 이것 은 Linux 시스템 에서 사용 하기 어렵 습 니 다.저 는 설명 에 따라 로그 인 QR 코드 를 고정 qq 메 일 로 보 내 는 것 으로 설정 을 바 꾸 었 습 니 다.qqbot 모듈 은 GitHub 에 있 습 니 다.모듈 설명 을 보 세 요qqbot
설정 파일 은 기본적으로 사용자 디 렉 터 리 에 있 는.qqbot-tmp/v 2.3.conf,linux 와 유사 합 니 다.

{

 # QQBot      
 #    qqbot -u somebody      ,    :
 #     ->      ->    somebody     ->        
 #    qqbot      ,    :
 #     ->      ->        
 
 "fantasy" : {
  #               ,     qqbot              
 # QQBot-term (HTTP-API)       (       IP   127.0.0.1 )
 #     0          (   qq     HTTP-API        )。
 "termServerPort" : 8188,
 
 #     http     ip,       ip      
 "httpServerIP" : "",
 
 #     http       
 "httpServerPort" : 8189,
 
 #       QQ  
 "qq" : "  qq",
 
 #             
 "mailAccount" : "    ",
 
 #      IMAP/SMTP      ,         
 "mailAuthCode" : "     ",
 
 #             
 "cmdQrcode" : False,
 
 #   /      
 "debug" : False,

 # QQBot        
 "restartOnOffline" : True,
 
 #       qqbot ( daemon   )
 "daemon": False,
 
 #                  QQBot 
 "startAfterFetch" : False,
 
 #     
 "pluginPath" : ".",
 
 #          
 "plugins" : [],
 
 #      (      )
 "pluginsConf" : {},
 
 },
 
 #    somebody    ,      
 "somebody" : {
 #            ,      ,      
 
 
 },
 
 #                       
 "    " : {
 "qq" : "",
 "pluginPath" : "",
 "plugins" : [
  'qqbot.plugins.sampleslots',
  'qqbot.plugins.schedrestart',
 ],
 "pluginsConf" : {
  'qqbot.plugins.schedrestart': '8:00',
 }
 },
 
 # #   :       ,      (              )
 # "   " : {
 # "termServerPort" : 8188,
 # "httpServerIP" : "",
 # "httpServerPort" : 8189,
 # "qq" : "",
 # "mailAccount" : "",
 # "mailAuthCode" : "",
 # "cmdQrcode" : False,
 # "debug" : False,
 # "restartOnOffline" : False,
 # "daemon" : False,
 # "startAfterFetch" : False,
 # "pluginPath" : "",
 # "plugins" : [],
 # "pluginsConf" : {}
 # },

}
5.사용자 정의 기능

from qqbot import _bot as bot

#  qq,       fantasy
bot.Login(['-u','fantasy'])

#     ,       qqbot  
#        
def getBuddyByName(nickname):
 return bot.List('buddy',nickname)

#       
def getGroupByName(groupname):
 return bot.List('group',groupname)

#   (        ) nickname     content  
def sendToNickname(nickname,content):
 user = getBuddyByName(nickname)
 if user:
 bot.SendTo(user[0],content)
 else:
 print("      :"+nickname)

6.입구 메 인 프로그램

#coding: utf-8
import time
import sched
import datetime
from Dao.DutyscheduleDao import *
from Utils.QQInterface import *
#sched python       


schedule = sched.scheduler(time.time, time.sleep)
#           
newschedule = findScheduleByNewTime()

#            
def getSeconds():
 #      
 global newschedule
 newschedule = findScheduleByNewTime()
 if newschedule:
 return (newschedule['worktime'] - datetime.datetime.now()).total_seconds()
 else:
 print("        ,    ……")
 exit()

#     
def SendTo():
 global newschedule
 sendToNickname(newschedule['name'],newschedule['content'])

#    ,                
def perform():
 SendTo()
 #  5 ,           
 time.sleep(5)
 sleepSecond = getSeconds()
 print("        :"+str(newschedule['worktime']))
 #             
 schedule.enter(sleepSecond,1,perform,())


def run():
 #1.                  
 #2.                 (  : )
 sleepSecond = getSeconds()
 print("    :"+str(newschedule['worktime']))
 #3.        
 schedule.enter(sleepSecond,1,perform,())
 #4.      
 schedule.run()

if __name__ == '__main__':
 run()
7.기타
데이터베이스 구조:

drop database if exists info_db;
create database info_db default character set utf8;

use info_db;
create table dutyschedule_tb(
 id int(11) auto_increment primary key,
 worktime timestamp not null,
 name varchar(10) not null,
 content varchar(100) not null
)engine=InnoDB auto_increment=1 default charset=utf8;
이상 은 qq 메 시 지 를 순환 적 으로 보 내 는 코드 입 니 다.다음은 프로젝트 디 렉 터 리 구조 입 니 다.그 중 일부 나타 나 지 않 은 파일 은 자체 테스트 에 사용 되 므 로 관심 을 가지 지 않 아 도 됩 니 다.
在这里插入图片描述
효과 그림:

在这里插入图片描述
요약:기본 기능 이 완성 되 었 지만 조작 이 우호 적 이지 않 아서 수 동 으로 데이터 베 이 스 를 입력 해 야 합 니 다.그 다음 에 데이터 관리의 전단 을 결합 하여 사용 하면 많은 조작 을 간소화 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기