PythonがURLからデータを取得してGoogleシートに書き込むのがherokuでは機能しませんか?

okwaves2024-01-25  7

これは、URL からデータを取得して Google シートに書き込むための私のメイン プログラムです。

import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]

import requests
import datetime
import pandas as pd

def writedata():
    # Connect to Google Sheet
    credentials = ServiceAccountCredentials.from_json_keyfile_name('creds.json',scope)
    client = gspread.authorize(credentials)
    sheet = client.open("Min15Scan").sheet1
    symlist = sheet.col_values(1)

    i = 2
    while i <= len(symlist):
        symbolfromexcel = symlist[i-1] + "EQN"
        # URL of NSEIndia chart data
        headers = {'User-Agent': 'Mozilla/5.0'}
        try:
            url = 'https://www.nseindia.com/api/chart-databyindex?index=' + symbolfromexcel
            r = requests.get(url, headers=headers)
            data = r.json()
            prices = data['grapthData']

            # Create Empty Dataframe/List to add data
            rawdata = []

            # Loop to get data & write into list (rawdata) as list of list
            for item in prices:
                dt = datetime.datetime.utcfromtimestamp(item[0] / 1000)
                value = item[1]
                rawdata.append([dt.strftime('%H-%M'), value])

            # Create dataframe
            data_df = pd.DataFrame(rawdata, columns=["Time", "ltp"])

            min15 = data_df.loc[data_df["Time"] <= "09-30"]
            min15 = min15["ltp"]
            min15max = min15.max()
            min15min = min15.min()

            total = data_df["ltp"]
            totalmax = total.max()
            totalmin = total.min()

            # Write data on raw sheet.update('B1', 'text')
            sheet.update('B' + str(i) + ':E' + str(i), [[min15max, min15min, totalmax, totalmin]])
        except:
            sheet.update('B' + str(i) + ':E' + str(i), [[0, 0, 0, 0]])
            pass

        i = i + 1

クロックファイル-

from apscheduler.schedulers.blocking import BlockingScheduler
from GoogleSheetAPI import writedata
sched = BlockingScheduler()

sched.add_job(writedata, 'interval', minutes=5)
sched.start()

これを PC で実行すると正常に動作しますが、その書き込み部分 (sheet.update('B' + str(i) + ':E' + str(i), [[0, 0, 0, 0]])) 毎回、何がエラーなのか理解できません。



------------------------

コードで例外が発生し、「例外:」を実行しています。声明。したがって、sheet.update('B' + str(i) + ':E' + str(i), [[0, 0, 0, 0]]) を実行してから渡します。これは、そうしない場合にはあまり役に立ちません。どのような例外が発生するかわかりません。

試験用に例外を印刷してみてください次のようにしてください:

except Exception as e:
    print(e)

エラーの詳細を確認するには。

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。