2017-06-28 3 views
0

J'essaie d'écrire des données de capteur sur une feuille google. J'ai pu écrire sur cette même feuille il y a environ un an, mais je suis de nouveau actif sur ce projet et je n'arrive pas à le faire fonctionner. Je crois que le Oauth a changé et j'ai mis à jour mon code pour ce changement.Les données gspread n'apparaissent pas dans Google Sheet

Dans le code ci-dessous, je reçois aucune erreur, cependant aucune donnée dans le GoogleSheet entré. De plus, si je consulte GoogleSheets, la date de "dernière ouverture" ne reflète pas l'heure à laquelle mon programme devrait/devrait écrire sur cette feuille Google. J'ai essayé de nombreuses variations et je suis juste coincé. Toute suggestion serait appréciée.

#!/usr/bin/python3 
#-- developed with Python 3.4.2 
# External Resources 
import time 
import sys 
import json 
import gspread 
from oauth2client.service_account import ServiceAccountCredentials 
import traceback 
# Initialize gspread 
scope = ['https://spreadsheets.google.com/feeds'] 
credentials = ServiceAccountCredentials.from_json_keyfile_name('MyGoogleCode.json',scope) 
client = gspread.authorize(credentials) 

# Start loop ________________________________________________________________ 
samplecount = 1 
while True: 
    data_time = (time.strftime("%Y-%m-%d %H:%M:%S")) 
    row = ([samplecount,data_time]) 

    # Append to Google sheet_ 
    try: 
     if credentials is None or credentials.invalid: 
      credentials.refresh(httplib2.Http()) 
     GoogleDataFile = client.open('DataLogger') 
     #wks = GoogleDataFile.get_worksheet(1) 
     wks = GoogleDataFile.get_worksheet(1) 
     wks.append_row([samplecount,data_time]) 
     print("worksheets", GoogleDataFile.worksheets()) #prints ID for both sheets 
    except Exception as e: 
     traceback.print_exc() 
    print ("samplecount ", samplecount, row) 
    samplecount += 1 
    time.sleep(5) 

Répondre

0

J'ai trouvé mon problème. J'ai changé 3 choses pour obtenir travail gspread:

  1. téléchargé un fichier JSON nouvellement créé (n'a probablement pas besoin de cette étape)
  2. Avec la feuille de calcul cible ouverte en chrome, je « partagé » avec l'e-mail adresse trouvée dans le fichier JSON.
  3. Dans la console des développeurs Google, j'enabled "Drive API"

Cependant, le code dans le message original ne sera pas rafraîchir le jeton. Il cessera de fonctionner après 60 minutes.

Le code qui fonctionne (en Juillet 2017) est ci-dessous. Le code écrit sur une feuille google nommée "Datalogger" Il écrit sur la feuille affichée en tant que feuille Sheet2 dans la vue google. La seule information unique est le nom du fichier JSON

Hope cela aide les autres.

Jon

#!/usr/bin/python3 
# -- developed with Python 3.4.2 
# 
# External Resources __________________________________________________________ 
import time 
import json 
import gspread 
from oauth2client.service_account import ServiceAccountCredentials 
import traceback 

# Initialize gspread credentials 
scope = ['https://spreadsheets.google.com/feeds'] 
credentials = ServiceAccountCredentials.from_json_keyfile_name('MyjsonFile.json',scope) 
headers = gspread.httpsession.HTTPSession(headers={'Connection': 'Keep-Alive'}) 
client = gspread.Client(auth=credentials, http_session=headers) 
client.login() 
workbook = client.open("DataLogger") 
wksheet = workbook.get_worksheet(1) 

# Start loop ________________________________________________________________ 
samplecount = 1 
while True: 
    data_time = (time.strftime("%Y-%m-%d %H:%M:%S")) 
    row_data = [samplecount,data_time] 
    if credentials.access_token_expired: 
     client.login()   
    wksheet.append_row(row_data) 
    print("Number of rows in out worksheet ",wksheet.row_count) 
    print ("samplecount ", samplecount, row_data) 
    print() 
    samplecount += 1 
    time.sleep(16*60)