質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2329閲覧

python scheduleライブラリを用いた定期実行がうまくいかない

mmtt

総合スコア23

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/19 09:28

python歴2か月の初心者です。よろしければ回答お願いいたします。

やりたいこと

1時間毎にプログラムを自動で実行し、収集したデータをファイルに保存するプログラムの作成

プログラムの概要

スマホゲームのAPIを用いてデータを収集→DateFrameを作成しcsvファイルに保存→1時間毎に定期実行。

うまくいかない箇所

定期実行するプログラムがうまくいきません。様々なサイトを参考に(ほぼ真似て)コードを書いたので間違いらしい間違いもないはずなのですが、定期的に実行されません。(特にエラーがでるなどではありません)
また、scheduleのインストールも行っています。

現在、プログラムを実行後、コマンドプロンプトというタブを閉じて放置している状態なのですが、これが関係していますでしょうか?

該当場所のコード

python

1# これ以前にselfdeck_listという関数や、listは作成済みです。(コード全体の欄に載せておきます。) 2 3 4allplayer_battlelog= [selfdeck_list(pla) for pla in list] 5 6def auto(): 7 allplayer_battlelog 8 9schedule.every().hour.do(auto) 10 11while True: 12 schedule.run_pending() 13 time.sleep(1)

コード全体

python

1 2import os 3import json 4import requests 5import pandas as pd 6import numpy as np 7from datetime import datetime 8import schedule 9import time 10 11access_key = "省略" 12 13URL = 'https://api.clashroyale.com/v1' 14 15#選手名とパスを結合する辞書を作成 16dic={"みかん坊や":"%232VYJYJ09","天GOD":"%232G0QUGLU","kota":"%23889VQ8JP","RAD":"%238QRCJQ9Y","ライキジョーンズ":"%2398Q8LPQ9", 17 "Jack":"%23YRVL9U98","きたっしゃん":"%23P8RLY0V9","だに":"%238LJVVGJP","けんつめし":"%23PQRR0CG9", 18 "Rorapolon":"%239JPRJ9R","焼き鳥":"%232Y8GL0V2","ユイヒイロ":"%23R2GRQPCJ","Blossom":"%238Q20LRC8Y","kk19212":"%23RU2CC2LG", 19 "れいや":"%232LRVG0C8","HANE×HANE":"%238Y088VU8U","Lewis":"%238Q020U0U","ピラメキ":"%232YGQGY92V","天ぷら":"%238Q2V2CGR","Scott":"%232Q98GVP9V"} 20 21# 選手名を含むリストを作成 22list= ["みかん坊や","天GOD","kota","RAD","ライキジョーンズ", 23 "Jack","きたっしゃん","だに","けんつめし", 24 "Rorapolon","焼き鳥","ユイヒイロ","Blossom","kk19212", 25 "れいや","HANE×HANE","Lewis","ピラメキ","天ぷら","Scott"] 26 27filedic={"みかん坊や":"battledata_mikan.csv","天GOD":"battledata_tengod.csv","kota":"battledata_kota.csv","RAD":"battledata_rad.csv","ライキジョーンズ":"battledata_raiki.csv", 28 "Jack":"battledata_jack.csv","きたっしゃん":"battledata_kitassyan.csv","だに":"battledata_dani.csv","けんつめし":"battledata_kentsumeshi.csv", 29 "Rorapolon":"battledata_rorapolon.csv","焼き鳥":"battledata_yakitori.csv","ユイヒイロ":"battledata_yuihiro.csv","Blossom":"battledata_blossom.csv","kk19212":"battledata_kk.csv", 30 "れいや":"battledata_reiya.csv","HANE×HANE":"battledata_hanehane.csv","Lewis":"battledata_lewis.csv","ピラメキ":"battledata_pirameki.csv","天ぷら":"battledata_tempura.csv","Scott":"battledata_scott.csv"} 31 32 33def battle_info(name): 34 target_api = URL + "/players/" 35 playerTag = dic[name] 36 url = target_api+playerTag+"/battlelog" 37 headers = { 38 "content-type": "application/json; charset=utf-8", 39 "cache-control": "max-age=60", 40 "authorization": "Bearer %s" % access_key} 41 r = requests.get(url,headers=headers) 42 data = r.json() 43 return data 44 45__name__ == '__battle_info__' 46 47 48 49 50 51 52def selfdeck_list(name): 53 54 columns1=["type","my","opponent","result","time"] 55 ba = battle_info(name) 56 datalist = [] 57 58 59 path = filedic[name] 60 61 if os.path.isfile(path): 62 df = pd.read_csv(path) # 既存ファイルがあれば読み込む 63 else: 64 df = pd.DataFrame(columns=columns1) # なければ雛型を作成 65 66 for newnum in range(0,25): 67 68 mydecklist = [ ba[decknum]["team"][0]["cards"][numindeck]["name"] for decknum in range(0,25) for numindeck in range(0,8) ] 69 opodecklist= [ ba[decknum]["opponent"][0]["cards"][numindeck]["name"] for decknum in range(0,25) for numindeck in range(0,8) ] 70 decktype = [ ba[decknum]["type"] for decknum in range(0,25)] 71 mycrowns = [ ba[decknum]["team"][0]["crowns"] for decknum in range(0,25)] 72 opocrowns= [ ba[decknum]["opponent"][0]["crowns"] for decknum in range(0,25)] 73 time = [ ba[decknum]["battleTime"] for decknum in range(0,25)] 74 75 a = decktype[int(newnum)] 76 b = tuple(mydecklist[int(newnum*8):int(newnum*8+8)]) 77 c = tuple(opodecklist[int(newnum*8):int(newnum*8+8)]) 78 if mycrowns[int(newnum)] > opocrowns[int(newnum)]: 79 winorlose = "win" 80 elif mycrowns[int(newnum)] < opocrowns[int(newnum)]: 81 winorlose = "lose" 82 else: 83 winorlose = "draw" 84 d = winorlose 85 e = time[int(newnum)][:15] 86 data = [a,b,c,d,e] 87 datalist.append(data) 88 89 90 df_new = pd.DataFrame(data=datalist,columns=columns1 ) 91 df = df.append(df_new) 92 df = df.drop_duplicates(["time"]).reset_index(drop=True) 93 df = df.sort_values('time') 94 df.to_csv(path,index=False) 95 96 97__name__ == '__selfdeck_list__' 98 99 100allplayer_battlelog= [selfdeck_list(pla) for pla in list] 101 102 103def auto(): 104 allplayer_battlelog 105 106schedule.every().hour.do(auto) 107 108while True: 109 schedule.run_pending() 110 time.sleep(1) 111

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

以下だとauto関数は実質何もしていないです。

Python

1def auto(): 2 allplayer_battlelog

詳細は把握していませんが、やりたいことは以下ではないでしょうか?

Python

1def auto(): 2 allplayer_battlelog= [selfdeck_list(pla) for pla in list]

投稿2019/05/20 00:45

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mmtt

2019/05/20 01:27

いつもありがとうございます。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問