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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

989閲覧

取得スピードを早くして、回数を増やしたい

Omiso

総合スコア1

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/09/24 19:40

import

1import clipboard 2import keyboard 3import datetime 4import calendar 5import tweepy 6import base64 7import json 8import time 9import glob 10import os 11import sys 12import re 13import console 14 15CK = b'' 16CKS = b'' 17AT = "" 18ATS = "" 19def login(CK,CKS,AT,ATS): 20 CK = base64.b64decode(CK.decode()) 21 CKS = base64.b64decode(CKS.decode()) 22 auth = tweepy.OAuthHandler(str(CK).split("'")[1],str(CKS).split("'")[1]) 23 auth.set_access_token(AT,ATS) 24 API = tweepy.API(auth) 25 return API 26 27def get_username(): 28 user_name = clipboard.get() 29 if("http" in user_name): 30 user_name = user_name.split("/") 31 user_name = user_name[3].split("?") 32 user_name = user_name[0] 33 return user_name 34 else: 35 return False 36 37def tweet_filter(Tweettext): 38 itemlist = ["⓪①②③④⑤⑥⑦⑧⑨","⓿❶❷❸❹❺❻❼❽❾","0123456789","????????????????????????????????????????",] 39 basenumber = "0123456789" 40 for i in range(10): 41 if(itemlist[0][i] in Tweettext): 42 Tweettext = Tweettext.replace(itemlist[0][i],basenumber[i]) 43 for j in range(10): 44 if(itemlist[1][j] in Tweettext): 45 Tweettext = Tweettext.replace(itemlist[1][j],basenumber[j]) 46 for k in range(10): 47 if(itemlist[2][k] in Tweettext): 48 Tweettext = Tweettext.replace(itemlist[2][k],basenumber[k]) 49 for l in range(10): 50 if(itemlist[3][l] in Tweettext): 51 Tweettext = Tweettext.replace(itemlist[3][l],basenumber[l]) 52 return Tweettext 53 54def tweet_trim(tweet): 55 tweet = tweet_filter(tweet) 56 tweet = re.sub("@[a-zA-Z0-9_]+","",tweet) 57 tweet = re.sub("[0-9]{1,2}:[0-5][0-9]","",tweet) 58 tweet = re.sub("[0-9]{1,2}時[0-59]分","",tweet) 59 tweet = re.sub("([0-9]|[0-2][0-9])時","",tweet) 60 tweet = re.sub("[0-5][0-9]分","",tweet) 61 tweet = re.sub("[1-9]{1,2}/[0-9]{1,2}","",tweet) 62 tweet = tweet.replace(" ","") 63 tweet = tweet.replace(" ","") 64 tweet = re.findall(r"\d+",tweet) 65 return tweet 66 67def get_time_now(): 68 now_time = datetime.datetime.now() 69 now_time = str(now_time).split(" ")[1] 70 now_time = now_time.split(":") 71 now_time_minute = now_time[1] 72 now_time_seconds = now_time[2].split(".")[0] 73 return now_time_minute,now_time_seconds 74""" 75login() 76get_username() 77tweet_filter() 78tweet_trim() 79file_check() 80get_time_now() 81 82""" 83flag = 0 84password = "" 85 86message = { 87 "no_update":"ツイートの更新がありません", 88 "code_notification":"←この二桁の数字を教えてください", 89 "copy_error":"Twitterリンクのコピー又はフルアクセスの許可をしてください", 90 "pass_notfound":"パスワードが取得できませんでした", 91 "waiting_passtweet":"パスツイ待機中..." 92} 93 94""" 95if not file_check(): 96 file = glob.glob("*.pa") 97 print(file[0].split(".")[0]+message["code_notification"]) 98 sys.exit() 99""" 100 101""" 102 103設定部分 104 105""" 106 107room_id = "0000" 108pass_tweet_time = "05" 109 110 111""" 112Linkコピーの確認 113""" 114user_name = get_username() 115if not user_name: 116 print(message["copy_error"]) 117 sys.exit() 118print(message["waiting_passtweet"]) 119 120while True: 121 now_time_minute,now_time_seconds = get_time_now() 122 if(pass_tweet_time == "00"): 123 passTb = "59" 124 else: 125 passTb = str(int(pass_tweet_time)-1) 126 127 if(now_time_minute == passTb and now_time_seconds == "58"): 128 break 129 elif(now_time_minute == passTb and now_time_seconds == "59"): 130 break 131 elif(now_time_minute == pass_tweet_time): 132 break 133 134""" 135Twitter Login 136""" 137API = login(CK,CKS,AT,ATS) 138 139while True: 140 tweet = API.user_timeline(user_name,count = 1) 141 for i in tweet: 142 tweet = i.text 143 tweet_time = i.created_at 144 145 tweet = tweet_trim(tweet) 146 147 print(tweet) 148 tweet_time = re.findall(r"\d+",str(tweet_time)) 149 tweet_time_minute = tweet_time[4] 150 tweet_time_second = tweet_time[5] 151 152 if(pass_tweet_time == "00"): 153 pass_tweet_time_ = "59" 154 else: 155 pass_tweet_time_ = str(int(pass_tweet_time)-1) 156 if(len(pass_tweet_time_) == 1): 157 pass_tweet_time_ = "0" + pass_tweet_time_ 158 for i in range(57,60): 159 if(pass_tweet_time_ == tweet_time_minute and str(i) == tweet_time_second): 160 flag = 1 161 if(pass_tweet_time == tweet_time_minute): 162 flag = 1 163 if(flag == 1): 164 break 165else: 166 console.clear() 167 print(message["no_update"]+str(datetime.datetime.now()).split(" ")[1]) 168time.sleep(0.001) 169 170if(room_id in tweet and len(tweet) >= 2): 171 room_id_index = tweet.index(room_id) 172 if(room_id_index == 0): 173 password = str(tweet[room_id_index+1]) 174 elif(room_id_index == 1): 175 password = str(tweet[room_id_index-1]) 176if(len(tweet) == 1): 177 password = tweet[0] 178 179 180 181if(password == ""): 182 print(message["pass_notfound"]) 183 sys.exit() 184else: 185 notification.schedule(password) 186 keyboard.insert_text(password) 187 keyboard.insert_text("\n") 188 print("password:"+password) 189 190コード 191```### 前提・実現したいこと 192このソースコードのままですと1秒に一回程度のものなので、もっと早く取得したいです 193 194 195 196### 試したこと 197 198Webなので調べて見ましたけど、載ってなく苦戦状態です 199 200### 補足情報(FW/ツールのバージョンなど) 201 202IOS 203pythonista 204Tweepy 205base64 206 207もしお暇がありましたらお願いします

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

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

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

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

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

y_waiwai

2020/09/24 21:52

コードのどれが1秒に1回なんでしょうか
CHERRY

2020/09/24 22:40

プログラムのどの部分を実行するのに時間がかかっているのでしょうか?
guest

回答2

0

ベストアンサー

別の回答者の方も指摘していますが、tweet_filterの置換処理は互いに独立した内容なので、ネスト(入れ子)にする必要はなく、いたずらに処理時間を延ばすだけの結果になっています。

Python

1import time 2 3 4def tweet_filter0(Tweettext): 5 itemlist = ["⓪①②③④⑤⑥⑦⑧⑨", "⓿❶❷❸❹❺❻❼❽❾", "0123456789", "????????????????????????????????????????", ] 6 basenumber = "0123456789" 7 for i in range(10): 8 if(itemlist[0][i] in Tweettext): 9 Tweettext = Tweettext.replace(itemlist[0][i], basenumber[i]) 10 for j in range(10): 11 if(itemlist[1][j] in Tweettext): 12 Tweettext = Tweettext.replace(itemlist[1][j], basenumber[j]) 13 for k in range(10): 14 if(itemlist[2][k] in Tweettext): 15 Tweettext = Tweettext.replace(itemlist[2][k], basenumber[k]) 16 for l in range(10): 17 if(itemlist[3][l] in Tweettext): 18 Tweettext = Tweettext.replace(itemlist[3][l], basenumber[l]) 19 return Tweettext 20 21 22def tweet_filter1(Tweettext): 23 itemlist = ["⓪①②③④⑤⑥⑦⑧⑨", "⓿❶❷❸❹❺❻❼❽❾", "0123456789", "????????????????????????????????????????", ] 24 basenumber = "0123456789" 25 for i in range(10): 26 if itemlist[0][i] in Tweettext: 27 Tweettext = Tweettext.replace(itemlist[0][i], basenumber[i]) 28 if itemlist[1][i] in Tweettext: 29 Tweettext = Tweettext.replace(itemlist[1][i], basenumber[i]) 30 if itemlist[2][i] in Tweettext: 31 Tweettext = Tweettext.replace(itemlist[2][i], basenumber[i]) 32 if itemlist[3][i] in Tweettext: 33 Tweettext = Tweettext.replace(itemlist[3][i], basenumber[i]) 34 return Tweettext 35 36 37start = time.time() 38for i in range(10000): 39 text = "⓪❶2????④❺6????⑧❾0????" 40 text = tweet_filter0(text) 41elapsed_time = time.time() - start 42print(f"original: {elapsed_time}sec") 43 44start = time.time() 45for i in range(10000): 46 text = "⓪❶2????④❺6????⑧❾0????" 47 text = tweet_filter1(text) 48elapsed_time = time.time() - start 49print(f"new one: {elapsed_time}sec")

特に工夫もせず、forループを平らにしただけですが、2桁(100倍以上)速くなっています。

terminal

1original: 21.901384115219116sec 2new one: 0.11765360832214355sec

投稿2020/09/25 01:20

Daregada

総合スコア11990

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

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

0

tweet_filter で、for ループが、入れ子になってるのは何か意味があるのでしょうか?

投稿2020/09/24 22:43

編集2020/09/24 22:44
CHERRY

総合スコア25218

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問