GoogleHome에서 REST를 두드려 실행 결과를 말한다 [2]
계속.
기사 목록
[2] 로컬 네트워크에 연결된 Raspberrypi에서 [1] 수신
RaspBerrypi에서 gspread를 사용하여 GoogleSpreadSheet에서 값을 가져오고 씁니다.
참고 : Using OAuth2 for Authorization — gspread 3.0.0 documentation
Google 측 API 설정
Google Developers Console로 이동하여 프로젝트를 만듭니다.
왼쪽 상단 메뉴에서 API 및 서비스 > 라이브러리
'Google Sheet API'와 'Google Drive API'를 선택하여 사용 설정합니다.
방금 전과 같은 왼쪽 상단 메뉴에서 "라이브러리"아래에 맞는 "인증 정보"를 누르십시오.
자격 증명 만들기 > 서비스 계정 키 만들기
계정명을 적당히 붙여, 역할은 우선 Project > 편집자.
키 타입은 JSON을 선택.
작성된 json 파일 안에는 여러 가지 엉망이 쓰여져 있지만
여기서 필요한 것은 우선 "client_email". 주소를 복사.
[1] IFTTT에서 GoogleAssistant⇒GoogleSpreadSheet에서 작업 이름을 씁니다. 에서 만든 SpreadSheet 화면의 오른쪽 상단에서 "공유".
주소를 붙여넣고 "보내기"로 공유 완료.
↑의 json 파일은 나중에 사용하므로 어딘가에 저장해 둔다.
Raspberry 측에서 GoogleSpreadSheet를 만지작 준비
$ sudo apt install python3-pip
pip3 설치
$ sudo pip3 install gspread
$ sudo pip3 install oauth2client
$ sudo pip3 install PyOpenSSL
gspread 및 oauth2client 설치
PyOpenSSL도 환경에 따라서는 필요하다고 한다. 일단 설치.
$ mkdir google_test
적당하게 폴더를 작성. 방금 만든 서비스 계정 키의 json을 이 안에 넣는다.
google_test/test.py# -*- coding: utf-8 -*-
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('保存したjsonファイルの名前.json', scope)
gc = gspread.authorize(credentials)
wks = gc.open('cue').sheet1
print(wks.acell('B1'))
파이썬 파일을 만들어 이것도 폴더 안에 넣어 버린다.
테스트 실행.
SpreadSheet의 B1셀에서 「RobotName」을 취득할 수 있었다.
협력에 성공.
서비스 계정 키를 만들고 즉시 실행하면 오류가 반환되어 10 분 정도 기다려 보면 좋을지도 모른다.
실행되지 않은 작업을 SpreadSheet 추가 순서로 받기
google_test/test.py# -*- coding: utf-8 -*-
import gspread
import datetime
from oauth2client.service_account import ServiceAccountCredentials
.
.
.
gc = gspread.authorize(credentials)
wks = gc.open('cue').sheet1
i = 1
for i in wks.col_values(1):
if wks.cell(i,3).value != '': #C列(RobotDirectory)がブランクでなければ
if wks.cell(i,5).value == '': #E列(start)がブランクなら
wks.update_cell(i,5,datetime.datetime.today().strftime("%Y/%m/%d %H:%M:%S")) #E列に実行開始日時を入力
robotdir = wks.cell(i,3).value #C列(RobotDirectory)を取得
print(robotdir)
방금 테스트한 파이썬의 11행째 이후를 재작성. 일시를 기입하므로 datetime도 임포트한다.
[1] IFTTT에서 GoogleAssistant⇒GoogleSpreadSheet에서 작업 이름을 씁니다. 에서 준비한 GAS와 함수에 의해 3열째에는 2열째로부터 자동으로 변환된 값이 들어가게 되어 있으므로, 그것을 받는다.
첫 번째 행에서 마지막 행까지 반복하여 C 열에 입력이 있고 E 열에 입력이없는 행에서 C 열의 값을 가져옵니다.
즉, 「명령이 끝났지만 미실행의 행」이라고 하는 것.
취득하면 E열에는 일시를 넣어 실행 완료의 플래그로 한다.
실행.
C2, C3의 값을 받을 수 있었다.
SpreadSheet를 보면, E열에 실행 완료를 나타내는 일시가 들어 있다.
다시 한번 같은 명령을 입력해도 미실행의 행은 없기 때문에 아무것도 취득할 수 없다.
여기까지 확인으로 테스트 완료.
계속
Reference
이 문제에 관하여(GoogleHome에서 REST를 두드려 실행 결과를 말한다 [2]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sahksas/items/11944574ca3c24ba0193
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ sudo apt install python3-pip
$ sudo pip3 install gspread
$ sudo pip3 install oauth2client
$ sudo pip3 install PyOpenSSL
$ mkdir google_test
# -*- coding: utf-8 -*-
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('保存したjsonファイルの名前.json', scope)
gc = gspread.authorize(credentials)
wks = gc.open('cue').sheet1
print(wks.acell('B1'))
# -*- coding: utf-8 -*-
import gspread
import datetime
from oauth2client.service_account import ServiceAccountCredentials
.
.
.
gc = gspread.authorize(credentials)
wks = gc.open('cue').sheet1
i = 1
for i in wks.col_values(1):
if wks.cell(i,3).value != '': #C列(RobotDirectory)がブランクでなければ
if wks.cell(i,5).value == '': #E列(start)がブランクなら
wks.update_cell(i,5,datetime.datetime.today().strftime("%Y/%m/%d %H:%M:%S")) #E列に実行開始日時を入力
robotdir = wks.cell(i,3).value #C列(RobotDirectory)を取得
print(robotdir)
Reference
이 문제에 관하여(GoogleHome에서 REST를 두드려 실행 결과를 말한다 [2]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sahksas/items/11944574ca3c24ba0193텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)