teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

脱字等の修正

2021/01/16 13:11

投稿

GuhChi
GuhChi

スコア0

title CHANGED
File without changes
body CHANGED
@@ -286,5 +286,5 @@
286
286
  self.autoRunFromKeyWordSearch(word,favorite,retweet,follow,seconds)
287
287
 
288
288
  ```
289
- 全ては書けなかったので追記します。
289
+ 文字数関係関係ない箇所の処理を省いています。
290
- とりあえず、メインウィンドウ側のファイルを記載しました
290
+ ご了承ください

1

twitter操作のクラスファイルを追記

2021/01/16 13:11

投稿

GuhChi
GuhChi

スコア0

title CHANGED
File without changes
body CHANGED
@@ -18,8 +18,6 @@
18
18
  自動実行部分をスレッド(QThread)に渡すと自動実行処理が実行されない
19
19
  ```
20
20
 
21
- ### 該当のソースコード
22
-
23
21
  メインウィンドウpython↓
24
22
  ```python
25
23
  from PyQt5.QtCore import *
@@ -31,9 +29,6 @@
31
29
  import sys
32
30
 
33
31
  from twitter import twitterApp
34
- import concurrent.futures
35
- from setting import mngSetting
36
- import datetime
37
32
 
38
33
  class MainWindow(QDialog,MainWindow.Ui_MainWindow):
39
34
 
@@ -51,8 +46,6 @@
51
46
  def autorun(self):
52
47
  # 自動実行が開始されたら自動実行ボタンをクリックできないようにする
53
48
  self.changeBtnStatus(self.pushButton_2,self.pushButton)
54
-
55
-
56
49
  self.tw_app.moveToThread(self.thread)
57
50
 
58
51
  # スレッドからの紐づけ
@@ -61,35 +54,7 @@
61
54
  self.tw_app.sendCount.connect(self.setCount)
62
55
  self.thread.start()
63
56
 
64
- def stoprun(self):
65
- self.thread.terminate()
66
- # 処理を停止したら自動実行ボタンを有効にして停止ボタンを無効にする
67
- self.changeBtnStatus(self.pushButton,self.pushButton_2)
68
-
69
57
 
70
- def changeBtnStyleSheet(self,btn,can):
71
- # ボタンのスタイルを変更する
72
- # 有効にする(can=true)場合は背景色を初期スタイルに戻す
73
- if can:
74
- btn.setStyleSheet(self.init_stylesheet)
75
- else:
76
- btn.setStyleSheet("background-color: rgb(0, 0, 0);")
77
-
78
- def changeBtnStatus(self,onBtn,offBtn):
79
- """
80
- @概要
81
- ボタンの状態を変更する
82
-
83
- @param onBtn
84
- 有効にしたいボタンオブジェクト
85
- @param offBtn
86
- 無効にしたいボタンオブジェクト
87
- """
88
- onBtn.setEnabled(True)
89
- self.changeBtnStyleSheet(onBtn,True)
90
- offBtn.setEnabled(False)
91
- self.changeBtnStyleSheet(offBtn,False)
92
-
93
58
 
94
59
  def outAction(self,rt,like,follow):
95
60
  if(rt):
@@ -138,6 +103,188 @@
138
103
  form.show()
139
104
  app.exec_()
140
105
  ```
106
+ twitter機能実装pythonファイル↓
107
+ ```python
108
+ # twitterApp
109
+ import tweepy
110
+ from config import CONFIG
111
+ from TwitterOauth import TwitterOauth
112
+ from selenium import webdriver
113
+ from selenium.webdriver.chrome.options import Options
114
+ import time
115
+ import oauth2 as oauth
116
+ import json
117
+ import datetime
118
+ from PyQt5.QtWidgets import *
119
+ from PyQt5.QtCore import *
120
+ import schedule
141
121
 
122
+ class twitterApp(QThread):
123
+
124
+ # twitterAPIを使用する設定
125
+ # APPを起動した際に初期化
126
+ MAX_COUNT = 10
127
+ sendCount = pyqtSignal(int,int,int)
128
+ sendFlag = pyqtSignal(bool,bool,bool)
129
+ sendMessage = pyqtSignal(str)
130
+ finished = pyqtSignal()
131
+
132
+ def __init__(self,host_window):
133
+
134
+ super(twitterApp,self).__init__()
135
+ self.CONSUMER_KEY = CONFIG["API_KEY"]
136
+ self.CONSUMER_SECRET = CONFIG["API_SECRET_KEY"]
137
+ self.twitterOauth = TwitterOauth(self.CONSUMER_KEY,self.CONSUMER_SECRET)
138
+ self.api =''
139
+ self.window = host_window
140
+ self.follow_count = self.MAX_COUNT
141
+ self.retweet_count = self.MAX_COUNT
142
+ self.favorite_count = self.MAX_COUNT
143
+
144
+ def run(self):
145
+ """
146
+ QThreadのrunメソッドのオーバーライド
147
+ """
148
+ self.autoWrapper(self.window.checkBox_4.isChecked(),self.window.lineEdit_4.text(),self.window.checkBox.isChecked(),self.window.checkBox_2.isChecked(),self.window.checkBox_3.isChecked(),self.window.spinBox.value())
149
+
150
+
151
+ #キーワード検索からtwitterの自動実行
152
+ def autoRunFromKeyWordSearch(self,word,favorite,retweet,follow,seconds):
153
+ """twitterキーワード検索から操作実行
154
+
155
+ チェックをつけてある動作をキーワード検索に基づいて自動実行する
156
+
157
+ Args:
158
+ word: 検索キーワード
159
+ favorite : いいねを実行するフラグ
160
+ retweet: リツイートを実行するフラグ
161
+ follow: フォローを実行するフラグ
162
+ seconds: 実行間隔(s)
163
+ """
164
+ self.sendMessage.emit('キーワード検索に対する自動実行を開始!')
165
+ # self.outLog('キーワード検索に対する自動実行を開始!')
166
+
167
+ search_results = self.api.search(q=word,count=self.MAX_COUNT)
168
+
169
+ for result in search_results:
170
+ tweet_id = result.id
171
+ user_id = result.user._json['id']
172
+
173
+ if(favorite and self.favorite_count > 0):
174
+ try:
175
+ self.api.create_favorite(tweet_id)
176
+
177
+ self.favorite_count -= 1
178
+ # self.window.label_14.setText(str(self.favorite_count))
179
+ if(self.favorite_count <= 0):
180
+ break
181
+ except Exception as e:
182
+ favorite = False
183
+ print(e)
184
+ if(retweet and self.retweet_count > 0):
185
+ try:
186
+ self.api.retweet(tweet_id)
187
+
188
+ self.retweet_count -= 1
189
+ # self.window.label_17.setText(str(self.retweet_count))
190
+ if(self.retweet_count <= 0):
191
+ break
192
+ except Exception as e:
193
+ retweet = False
194
+ print(e)
195
+ if(follow and self.follow_count >= 0):
196
+ try:
197
+ self.api.create_friendship(user_id)
198
+ # self.window.label_17.setText(str(self.retweet_count))
199
+ self.follow_count -= 1
200
+
201
+ if(self.follow_count <= 0):
202
+ break
203
+ except Exception as e:
204
+ follow = False
205
+ print(e)
206
+ self.sendFlag.emit(retweet,favorite,follow)
207
+ self.sendCount(self.favorite_count,self.retweet_count,self.follow_count)
208
+ # self.outAction(retweet,favorite,follow)
209
+
210
+ QThread.sleep(seconds)
211
+ if(self.favorite_count <=0 and self.retweet_count <= 0):
212
+ self.stop()
213
+
214
+ self.sendMessage.emit('キーワード検索に対する自動実行を終了!')
215
+ # self.outLog('キーワード検索に対する自動実行を終了!')
216
+ self.window.changeBtnStatus(self.window.pushButton,self.window.pushButton_2)
217
+
218
+
219
+
220
+ #タイムラインによるtwitterの自動実行
221
+ def autoRunAgainstTimeLine(self,favorite,retweet,seconds):
222
+ """twitterタイムラインに対して操作実行
223
+
224
+ チェックをつけてある動作をタイムラインに基づいて自動実行する
225
+
226
+ Args:
227
+ favorite : いいねを実行するフラグ
228
+ retweet: リツイートを実行するフラグ
229
+ follow: フォローを実行するフラグ
230
+ seconds: 実行間隔(s)
231
+
232
+ """
233
+ self.sendMessage.emit('フォロワーに対する自動実行を開始!')
234
+ # self.outLog('フォロワーに対する自動実行を開始!')
235
+ # タイムラインのツイートを取得
236
+ tl = self.api.home_timeline(count=self.MAX_COUNT)
237
+ for tweet in tl:
238
+ tweet_id = tweet.id
239
+ if(favorite and self.favorite_count >= 0):
240
+ try:
241
+ self.api.create_favorite(tweet_id)
242
+ self.favorite_count -= 1
243
+ # self.window.label_14.setText(str(self.favorite_count))
244
+
245
+ except Exception as e:
246
+ favorite = False
247
+ print(e)
248
+ if(retweet and self.retweet_count >= 0):
249
+ try:
250
+ self.api.retweet(tweet_id)
251
+ self.retweet_count -= 1
252
+ # self.window.label_17.setText(str(self.retweet_count))
253
+ except Exception as e:
254
+ retweet = False
255
+ print(e)
256
+ # self.outAction(retweet,favorite,False)
257
+ self.sendFlag.emit(retweet,favorite,False)
258
+ self.sendCount.emit(self.favorite_count,self.retweet_count,self.follow_count)
259
+ QThread.sleep(seconds)
260
+ if(self.favorite_count <=0 and self.retweet_count <= 0):
261
+ self.stop()
262
+
263
+ self.sendMessage.emit('フォロワーに対する自動実行を終了!')
264
+
265
+ self.window.changeBtnStatus(self.window.pushButton,self.window.pushButton_2)
266
+ def autoWrapper(self,is_tl,word,favorite,retweet,follow,seconds):
267
+ """
268
+ @概要
269
+ 自動実行する2つのメソッドのwrapper
270
+ @param
271
+ is_tl:タイムラインに対して自動実行するかのフラグ
272
+ @param
273
+ word:検索キーワード
274
+ @param
275
+ favorite:いいねフラグ
276
+ @param
277
+ retweet:リツイートフラグ
278
+ @param
279
+ follow:フォローフラグ
280
+ @seconds:
281
+ 実行間隔フラグ
282
+ """
283
+ if(is_tl):
284
+ self.autoRunAgainstTimeLine(favorite,retweets)
285
+ if(word):
286
+ self.autoRunFromKeyWordSearch(word,favorite,retweet,follow,seconds)
287
+
288
+ ```
142
289
  全ては書けなかったので追記します。
143
290
  とりあえず、メインウィンドウ側のファイルを記載しました。