1
2
3
4
5
6
|
from selenium import webdriver
from datetime import datetime
from PIL import Image
import time
import configparser
import urllib
|
이전 글에서 설치했던 모듈을 포함해 이번 프로젝트에 필요한 모듈들을 임포트한다.
1
2
3
4
|
myCity = '광주 광산구 첨단1동'
naver_input = urllib.parse.quote(myCity + ' 날씨')
AlertTime = 8 #매일 날씨를 알려줄 시간 (오전 여덟시)
|
myCity에 날씨정보가 필요한 동네 이름을 쓰자. myCity를 이용해 네이버 날씨에 검색할 것이다.
AlertTime은 매일 한 번 메시지를 보낼 시간이다. 아침 여덟시에 알림을 받도록 하겠다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
while True:
#알리기
Config = configparser.ConfigParser()
#카카오 아이디, 비밀번호 불러옴
Config = Config['MAIN']
id = Config['kakaoid']
pw = Config['kakaopw']
KaKaoURL = 'https://accounts.kakao.com/login/kakaoforbusiness?continue=https://center-pf.kakao.com/'
ChatRoom = '채팅방 주소'
options = webdriver.ChromeOptions()
#user-agent 변경
options.add_argument("user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
#크롬 드라이버 로드
driver.implicitly_wait(3)
#날씨 페이지 로드
#스크린샷 저장
screenshot_name = "/home/pi/robot/weather.png"
driver.save_screenshot(screenshot_name)
#스크린샷 불러오기
cutted_img.save('/home/pi/robot/weather.png')
#카카오 메인 페이지 로드
#로그인
driver.find_element_by_id('loginEmail').send_keys(id)
driver.find_element_by_id('loginPw').send_keys(pw)
driver.find_element_by_id('countryCodeRequired').find_element_by_xpath("//button[@type='submit']").click()
#채팅방 로드
#글 작성
driver.find_element_by_id('chatWrite').send_keys('라즈베리로봇 테스트 메시지입니다') #메시지 작성
driver.find_element_by_xpath("//input[@class='custom uploadInput']").send_keys('/home/pi/robot/weather.png') #날씨 사진 전송
driver.find_element_by_xpath("//div[@class='wrap_inp']//button[@type='button']").click() #전송버튼
time.sleep(60)
|
매일 반복시키기 위해 While True:로 무한 루프를 돌려주었다.
라즈베리가 카카오톡에 로그인하기 위해 사용할 자신의 카카오 아이디와 비밀번호를 불러오기 위해
info.conf 파일을 만들어 파이썬 파일과 같은 경로에 위치시키자.
필자는 /home/pi/robot/rasprobot.py 경로에 스크립트를 저장해뒀기때문에
info.conf 파일 경로는 /home/pi/robot/info.conf 이다.
1
2
3
|
[MAIN]
kakoid = 내 카카오 아이디
kakopw = 내 카카오 비밀번호
|
그다음 필요한 것은 라즈베리가 메시지를 보낼 채팅방의 주소이다.
카카오톡은 각 채팅방마다 고유한 주소를 가진다.
카카오톡에 등록된 자신의 플러스친구에게 메시지를 보낸다.
(메시지를 보내기 위해서는 플러스친구 관리자 화면에서 설정에 들어가 홈 공개를 해야한다.)
그러면 관리자 화면에서도 이렇게 1:1채팅이 생긴 것을 확인할 수 있다.
이 채팅방에 들어가보자
채팅방 화면 상단에 있는 채팅방의 주소를 복사해 ChatRoom 변수에 넣어주자.
(ChatRoom = 'https://xxxxxxxxxxx')
user-agent 변경 파트는 경우에 따라 필요 없는 경우도 많지만
이 파트의 유무에 따라 접속이 막히는 홈페이지가 있을 수 있으니 넣어뒀다.
네이버에 날씨를 검색한 후 화면을 캡쳐해 저장하고, 날씨 파트만 crop 함수로 잘라내어
다시 저장한 파일을 카카오톡으로 보내준다.
이후 60초를 기다림으로써 8시 01분이 되어 if (datetime.now().hour == AlertTime) and (datetime.now().minute == 0): 조건의 결과가 False가 되므로 다음날 8시 정각이 될 때까지 기다린다.
이제 이 스크립트를 자동실행하게 해 날씨 알리미 라즈베리로봇을 완성시켜보자.
터미널에서 /etc/profile.d 폴더로 이동한다.
cd /etc/profile.d
|
이 폴더 안에 스크립트를 만들면 부팅시 자동실행된다.
sudo vi run.sh
|
run.sh 파일을 만들어주자. 스크립트 이름은 다르게 해도 상관 없다.
1
2
|
#!/bin/bash
python3 /home/pi/robot/rasprobot.py
|
위 두줄을 입력한다. 파이썬 파일의 이름과 경로가 다르다면 그 경로에 맞게 써주도록 하자.
bash에서 파이썬 파일을 실행할 수 있어야 하므로 파이썬 파일이 있는 폴더로 이동해 권한설정을 바꿔준다.
cd /home/pi/robot
|
chmod 777 rasprobot.py
|
마지막으로 파이썬 파일 맨 윗줄(모듈을 임포트하는 줄보다도 더 위)에
1
|
#!/usr/bin/env python
|
이렇게 적어주자.
터미널에서 reboot 명령어로 재부팅 시켜주면 자동실행 스크립트와 함께 로봇이 일하기 시작한다.
reboot
|
이제 라즈베리파이를 집안 구석 (와이파이가 닿는 곳이라면 어디든) 신경쓰이지 않는곳에 두고 전원을 연결시켜두자.
내일 아침, 라즈베리가 당신의 두피를 산성비로부터 지키기 위해 날씨를 알려줄 것이다.
[결과]
사진은 테스트를 위해 메시지를 보낸 후 찍은거라 오전 8시가 아니지만, 위 코드대로 동작한다면 오전 8시에 알려준다.
'ToyProject' 카테고리의 다른 글
카카오톡으로 날씨 알려주는 라즈베리 로봇 만들기 1 - 모듈 설치 (0) | 2019.08.07 |
---|---|
카카오톡으로 날씨 알려주는 라즈베리 로봇 만들기 0 - 준비 (0) | 2019.08.07 |