본문 바로가기

디스코드 봇 개발일지

디스코드 자작봇 개발일지#9

사진이 안보이신다면 https://blog.naver.com/turnbf/221376509168 에서 봐주세요.

오늘은 네이버 실시간검색어 기능을 개선,
학교 급식정보를 제공해주는 기능을 만들었다.

!실검 or !실시간검색어
!급식

개선하기전 !실검 실행모습

개선하기전에는 불필요한공백이 많았고 바로가기 링크가 없어서 불편했다.



개선후 실행화면

개선후에는 불필요한 공백제거, 구분선추가, 링크추가를 하였다.
가능하다면 저 링크를 짧은 텍스트 하이퍼링크로 만들어봐야겠다.

아래는 !실검 기능을 개선한 소스이다.

if message.content.startswith('!실시간검색어') or message.content.startswith('!실검'): url = "https://www.naver.com/" html = urllib.request.urlopen(url) bsObj = bs4.BeautifulSoup(html, "html.parser") realTimeSerach1 = bsObj.find('div', {'class': 'ah_roll_area PM_CL_realtimeKeyword_rolling'}) realTimeSerach2 = realTimeSerach1.find('ul', {'class': 'ah_l'}) realTimeSerach3 = realTimeSerach2.find_all('li') embed = discord.Embed( title='네이버 실시간 검색어', description='실시간검색어', colour=discord.Colour.green() ) for i in range(0,19): realTimeSerach4 = realTimeSerach3[i] realTimeSerach5 = realTimeSerach4.find('span', {'class': 'ah_k'}) realTimeSerach = realTimeSerach5.text.replace(' ', '') realURL = 'https://search.naver.com/search.naver?ie=utf8&query='+realTimeSerach print(realTimeSerach) embed.add_field(name=str(i+1)+'위', value='**----'+realTimeSerach +'----**'+ '\n'+realURL, inline=False) await client.send_message(message.channel, embed=embed)


다음으로는 !급식 기능이다
!급식을 입력할경우 군포e비즈니스고등학교 오늘, 내일, 모래의 급식 정보를 제공한다
아래는 실행화면이다.

소스를 작성할때 이번에는 함수로 만들어서 사용해봤다.
확실히 함수로 만들고나서 사용하니 더 깔끔하고 좋은거같다.

파이썬 함수 사용법에대해 알아서 좋은 경험이었던 것 같다.
def 이름():
  return 받을값

오늘,내일,모래 날짜를 구하는데는
from datetime import datetime
이것을 사용하였다.
datetime.today().day 를 하면 오늘의 일
datetime.today().year를 하면 오늘의 년
datetime.today().month를 하면 오늘의 월 을 구해준다
이것외에도 다양한 기능이 있지만 사용한것은 이것뿐이니 이렇게만 설명하겠다.

아래는 급식.py 소스 (함수파일)

#https://stu.goe.go.kr/edusys.jsp?page=sts_m42320 import urllib from urllib.request import Request import bs4 from datetime import datetime # 날짜 구하는거 def lunchtext(): hdr = {'User-Agent': 'Mozilla/5.0'} url = 'http://www.gunpo-ebiz.hs.kr/lunch.list?mcode=161311&cate=161311' print(url) print(datetime.today().day) # 오늘 Day 값 가져옴 today = datetime.today().day # 오늘날짜 구함 req = Request(url, headers=hdr) html = urllib.request.urlopen(req) bsObj = bs4.BeautifulSoup(html, "html.parser") lunch1 = bsObj.find('div', {'id': 'foodListArea'}) lunch2 = lunch1.find('tbody') lunch3 = lunch2.find_all('td') lunch4 = lunch3[today] lunch5 = lunch4.text lunchlen = len(lunch5)# 텍스트의 문자길이 구함 itLunchlen = int(lunchlen)# 텍스트 문자길이 int형으로 변환 if itLunchlen<=2: # 만약 길이가 2보다 작거나 같다면 lunch5 = "없음" else: lunch5_1 = lunch4.find('div', {'class': 'lunch'}) lunch5 = lunch5_1.text.strip() return lunch5 def lunchtextD1(): hdr = {'User-Agent': 'Mozilla/5.0'} url = 'http://www.gunpo-ebiz.hs.kr/lunch.list?mcode=161311&cate=161311' print(url) print(datetime.today().day) # 오늘 Day 값 가져옴 today = datetime.today().day # 오늘날짜 구함 req = Request(url, headers=hdr) html = urllib.request.urlopen(req) bsObj = bs4.BeautifulSoup(html, "html.parser") lunch1 = bsObj.find('div', {'id': 'foodListArea'}) lunch2 = lunch1.find('tbody') lunch3 = lunch2.find_all('td') lunch4 = lunch3[today+1] lunch5 = lunch4.text lunchlen = len(lunch5) # 텍스트의 문자길이 구함 itLunchlen = int(lunchlen) # 텍스트 문자길이 int형으로 변환 if itLunchlen<=2: # 만약 길이가 2보다 작거나 같다면 lunch5 = "없음" else: lunch5_1 = lunch4.find('div', {'class': 'lunch'}) lunch5 = lunch5_1.text.strip() return lunch5 def lunchtextD2(): hdr = {'User-Agent': 'Mozilla/5.0'} url = 'http://www.gunpo-ebiz.hs.kr/lunch.list?mcode=161311&cate=161311' print(url) print(datetime.today().day) # 오늘 Day 값 가져옴 today = datetime.today().day #오늘 날짜 구함 req = Request(url, headers=hdr) html = urllib.request.urlopen(req) bsObj = bs4.BeautifulSoup(html, "html.parser") lunch1 = bsObj.find('div', {'id': 'foodListArea'}) lunch2 = lunch1.find('tbody') lunch3 = lunch2.find_all('td') lunch4 = lunch3[today+2] lunch5 = lunch4.text lunchlen = len(lunch5) # 텍스트의 문자길이 구함 itLunchlen = int(lunchlen)# 텍스트 문자길이 int형으로 변환 if itLunchlen<=2: # 만약 길이가 2보다 작거나 같다면 lunch5 = "없음" else: lunch5_1 = lunch4.find('div', {'class': 'lunch'}) lunch5 = lunch5_1.text.strip() return lunch5 print(lunchtext()) print(lunchtextD1()) print(lunchtextD2())

아래는 디스코드봇.py이다 (봇 파일)

import 급식 if message.content.startswith("!급식"): embed = discord.Embed( title='군포 E 비즈니스 고등학교 급식', description='급식입니다.', colour=discord.Colour.green() ) embed.add_field(name='오늘', value=급식.lunchtext(), inline=False) embed.add_field(name='내일', value=급식.lunchtextD1(), inline=False) embed.add_field(name='모래', value=급식.lunchtextD2(), inline=False) await client.send_message(message.channel, embed=embed)


오늘부터 깃허브에 소스를 업데이트하겠습니다.
https://github.com/YeChan39/YeChanParkDark