Über den Grund, warum ich mich dazu entschlossen habe. Ich habe beschlossen, eine kleine Stapelverarbeitung auf dem Raspberry Pi auszuführen, aber als ich den Server lange Zeit betrieb, nicht nur auf dem Raspberry Pi, wurde der Server unwissentlich gestoppt. Es kann eine Veranstaltung geben. Obwohl der Server selbst funktioniert, ist es möglich, dass die Stapelverarbeitung aus irgendeinem Grund zu moos wird, aber es ist schwierig, sich jeden Tag anzumelden und zu überprüfen. Daher war ich froh, das Smartphone über das Ergebnis informieren zu können, ob die Stapelverarbeitung auf dem Raspberry Pi normal oder abnormal ist. Wenn keine Benachrichtigung vorliegt, kann festgestellt werden, dass mit dem Server ein Fehler aufgetreten ist. Ein Weg, um es zu implementieren
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Die Vorbereitung für die Veröffentlichung wird empfohlen, da sie in früheren Artikeln leicht verständlich organisiert ist. https://qiita.com/connvoi_tyou/items/7cd7ffd5a98f61855f5c
Erstellen Sie im Voraus eine Tabelle in Google Drive. Notieren Sie sich einen Teil der Datei-URL, da Sie diese in Ihr Programm schreiben müssen.
https://docs.google.com/spreadsheets/d/<XXXXXXXXXXXXXXXXXXX>/edit#gid=zzzzzzzz
# "<XXXXXXXXXXXXXXXXXXX>"Notieren
Zu Google Spreadsheet wie unten Ich habe es mit dem Namen "server_check.py" gemacht.
server_check.py
from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
SCOPES = 'https://www.googleapis.com/auth/spreadsheets'
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('sheets', 'v4', credentials=creds)
#Bis zu diesem Punkt ist es fast das gleiche wie das in der Anleitung von Google beschriebene.
#Geben Sie unten die spezifischen Informationen für die Tabelle ein.
spreadsheet_id = '<XXXXXXXXXXXXXXXXXXX>'
sheetname='Blatt1'
range_ = sheetname
#Datumsinformationen abrufen
import datetime
_str_dt=datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")
#Ersetzen Sie Daten, um in die Spalten A, B und C zu schreiben
#Spalte A ist das Datum, die Spalten B und C sind beliebige Zeichenfolgen(Ersetzen Sie diesmal eine Testzeichenfolge)
values = [
[_str_dt,"Status-1","Status-2"]
]
body = {
'values' : values
}
#Schreiben Sie in die Tabelle
result=service.spreadsheets().values().append(spreadsheetId=spreadsheet_id,valueInputOption='RAW',range=range_,body=body).execute()
print(result)
Im obigen Programm ist die Testnachricht so etwas wie "Status-1". Extrahieren Sie beim tatsächlichen Betrieb die Ausgabe der Protokolldatei. Ich denke, es wird dem Werte-Array hinzugefügt.
Führen Sie nach dem Reparieren der erforderlichen Teile das obige Python-Programm aus. ** Zu diesem Zeitpunkt muss die Datei "credentials.json" im selben Verzeichnis vorhanden sein. ** ** ** Wenn das Programm zum ersten Mal ausgeführt wird, ist eine Browserauthentifizierung erforderlich, sodass es in einer GUI-Umgebung ausgeführt werden muss.
Nach der Ausführung wird der Browser gestartet und die Bestätigungsseite für das Google-Konto angezeigt. Gewähren Sie Zugriffsrechte entsprechend dem Bildschirm. (Unterwegs wird eine Warnung zu einer unsicheren Seite angezeigt, die jedoch fortgesetzt wird.) Wenn ein Zeichen wie "Der Authentifizierungsablauf ist abgeschlossen. Sie können dieses Fenster schließen." An den Browser ausgegeben wird, ist die Einstellung abgeschlossen.
Wenn der Zugriff gewährt wird, sollte der Tabelle ein Eintrag hinzugefügt werden (Wert in der ersten Zeile eingegeben). Außerdem wird eine "token.pickle" -Datei im selben Verzeichnis wie das Programm erstellt. Mit dieser Datei wird beim nächsten Überspringen der Browserauthentifizierung die Zeile hinzugefügt.
Das ultimative Ziel dieses Mal war es, das Zielprogramm vom Himbeerkuchen aus auszuführen, aber der Himbeerkuchen hatte keine GUI-Umgebung (normalerweise mit einer SSH-Verbindung). Selbst wenn ich "server_check.py" für den Himbeerkuchen ausführe, kann der Browser nicht geöffnet werden, sodass ich die Berechtigungen nicht festlegen kann.
In einem solchen Fall können Sie das Programm wahrscheinlich auch auf der CUI ausführen, wenn Sie dasselbe Programm in einer anderen GUI-Umgebung ausführen und die generierte Datei "token.pickle" auf dem Zielserver ablegen. Indem ich dasselbe Programm auf meinem Mac ausführe und das generierte token.pickle an den Himbeerkuchen sende, kann ich es jetzt auch auf dem Himbeerkuchen ausführen.
Gelegentlich trat beim Ausführen des Programms eine Fehlermeldung auf.
[root@localhost python]# python server_check.py
Traceback (most recent call last):
File "server_check.py", line 17, in <module>
creds.refresh(Request())
File "/usr/local/lib/python3.7/site-packages/google/oauth2/credentials.py", line 182, in refresh
self._scopes,
File "/usr/local/lib/python3.7/site-packages/google/oauth2/_client.py", line 248, in refresh_grant
response_data = _token_endpoint_request(request, token_uri, body)
File "/usr/local/lib/python3.7/site-packages/google/oauth2/_client.py", line 124, in _token_endpoint_request
_handle_error_response(response_body)
File "/usr/local/lib/python3.7/site-packages/google/oauth2/_client.py", line 60, in _handle_error_response
raise exceptions.RefreshError(error_details, response_body)
google.auth.exceptions.RefreshError: ('invalid_scope: Some requested scopes were invalid. {invalid=[a, c, d, e, g, h, i, l, m, ., /, o, p, r, s, t, u, w, :]}', '{\n "error": "invalid_scope",\n "error_description": "Some requested scopes were invalid. {invalid\\u003d[a, c, d, e, g, h, i, l, m, ., /, o, p, r, s, t, u, w, :]}",\n "error_uri": "http://code.google.com/apis/accounts/docs/OAuth2.html"\n}')
[root@localhost python]#
Ich bin nicht sicher, was der Fehler war, aber ich habe ihn durch Neuerstellung von "token.pickle" behoben. Um es neu zu erstellen, löschen Sie einfach "token.pickle" und führen Sie das Programm aus. Seien Sie jedoch vorsichtig mit der CUI-Umgebung, in der Sie den Browser nicht öffnen können, da er erneut über den Browser eingestellt wird.
Ich weiß übrigens nicht, warum es passiert, aber aus persönlicher Sicht habe ich das Gefühl, dass zum folgenden Zeitpunkt ein Fehler aufgetreten ist.
--Wenn das Programm erheblich renoviert wird --Wenn Sie ein anderes Programm zur Authentifizierung ausführen
Damit bemerkte ich früh, wenn die Stapelverarbeitung abnormal war oder der Server stoppte, aber ich bin es ein wenig leid, dass jeden Tag LINE kommt. Eigentlich wollte ich LINE benachrichtigen, wenn eine Anomalie festgestellt wurde (der Server hat eine Anomalie festgestellt oder es gab keinen regelmäßigen Kontakt), und zwar im Stil "Keine Nachrichten sind ein gesunder Beweis", aber das ist das nächste Problem. Das war's.
Recommended Posts