質問編集履歴

2

脱字等の修正

2021/01/16 13:11

投稿

GuhChi
GuhChi

スコア0

test CHANGED
File without changes
test CHANGED
@@ -574,6 +574,6 @@
574
574
 
575
575
  ```
576
576
 
577
- 全ては書けかったで追記します。
577
+ 文字数の関係で関係い箇所処理を省いています。
578
-
578
+
579
- とりあえず、メインウィンドウ側のファイルを記載しました
579
+ ご了承ください

1

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

2021/01/16 13:11

投稿

GuhChi
GuhChi

スコア0

test CHANGED
File without changes
test CHANGED
@@ -38,10 +38,6 @@
38
38
 
39
39
 
40
40
 
41
- ### 該当のソースコード
42
-
43
-
44
-
45
41
  メインウィンドウpython↓
46
42
 
47
43
  ```python
@@ -64,222 +60,520 @@
64
60
 
65
61
  from twitter import twitterApp
66
62
 
63
+
64
+
65
+ class MainWindow(QDialog,MainWindow.Ui_MainWindow):
66
+
67
+
68
+
67
- import concurrent.futures
69
+ def __init__(self,parent=None):
70
+
68
-
71
+ super(MainWindow,self).__init__(parent)
72
+
73
+ self.setupUi(self)
74
+
75
+ self.tw_app = twitterApp(self)
76
+
77
+ self.executor = concurrent.futures.ThreadPoolExecutor(max_workers=3)
78
+
69
- from setting import mngSetting
79
+ self.setting = mngSetting()
80
+
81
+ self.init_stylesheet = "background-color: rgb(167, 167, 167);"
82
+
83
+ self.thread = QThread()
84
+
85
+ self.act_list = []
86
+
87
+
88
+
89
+
90
+
91
+ def autorun(self):
92
+
93
+ # 自動実行が開始されたら自動実行ボタンをクリックできないようにする
94
+
95
+ self.changeBtnStatus(self.pushButton_2,self.pushButton)
96
+
97
+ self.tw_app.moveToThread(self.thread)
98
+
99
+
100
+
101
+ # スレッドからの紐づけ
102
+
103
+ self.tw_app.sendFlag.connect(self.outAction)
104
+
105
+ self.tw_app.sendMessage.connect(self.outLog)
106
+
107
+ self.tw_app.sendCount.connect(self.setCount)
108
+
109
+ self.thread.start()
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+ def outAction(self,rt,like,follow):
118
+
119
+ if(rt):
120
+
121
+ rt_act = 'RT'
122
+
123
+ else:
124
+
125
+ rt_act = '-'
126
+
127
+ if(like):
128
+
129
+ like_act = 'Like'
130
+
131
+ else:
132
+
133
+ like_act = '-'
134
+
135
+ if(follow):
136
+
137
+ follow_act = 'Follow'
138
+
139
+ else:
140
+
141
+ follow_act = '-'
142
+
143
+
144
+
145
+ # action_listに今回作成したリストを追加していく
146
+
147
+ tmp_list = [rt_act,like_act,follow_act,datetime.datetime.now()]
148
+
149
+
150
+
151
+ self.act_list.append(tmp_list)
152
+
153
+
154
+
155
+ # 行数を追加していく必要があるため
156
+
157
+ # 行名は1から順に数字にしていく
158
+
159
+ self.tableWidget.setRowCount(len(self.act_list))
160
+
161
+ tmpHeaders = list(range(1,len(self.act_list)))
162
+
163
+ verHeaders = [str(n) for n in tmpHeaders]
164
+
165
+ self.tableWidget.setVerticalHeaderLabels(verHeaders)
166
+
167
+
168
+
169
+ for n in range(len(self.act_list)):
170
+
171
+ for m in range(len(tmp_list)):
172
+
173
+ item = QTableWidgetItem(str(self.act_list[n][m]))
174
+
175
+ self.tableWidget.setItem(n, m, item)
176
+
177
+
178
+
179
+ def outLog(self,message):
180
+
181
+ log_message = '[' + str(datetime.datetime.now()) + '] ' + message
182
+
183
+ self.listWidget.addItem(log_message)
184
+
185
+
186
+
187
+ def setCount(self,like_count,rt_count,follow_count):
188
+
189
+ self.label_14.setText(str(like_count))
190
+
191
+ self.label_17.setText(str(rt_count))
192
+
193
+ self.label_18.setText(str(follow_count))
194
+
195
+
196
+
197
+ if __name__ == "__main__":
198
+
199
+
200
+
201
+ app = QApplication(sys.argv)
202
+
203
+ form = MainWindow()
204
+
205
+ form.show()
206
+
207
+ app.exec_()
208
+
209
+ ```
210
+
211
+ twitter機能実装pythonファイル↓
212
+
213
+ ```python
214
+
215
+ # twitterApp
216
+
217
+ import tweepy
218
+
219
+ from config import CONFIG
220
+
221
+ from TwitterOauth import TwitterOauth
222
+
223
+ from selenium import webdriver
224
+
225
+ from selenium.webdriver.chrome.options import Options
226
+
227
+ import time
228
+
229
+ import oauth2 as oauth
230
+
231
+ import json
70
232
 
71
233
  import datetime
72
234
 
73
-
74
-
75
- class MainWindow(QDialog,MainWindow.Ui_MainWindow):
76
-
77
-
78
-
79
- def __init__(self,parent=None):
80
-
81
- super(MainWindow,self).__init__(parent)
82
-
83
- self.setupUi(self)
84
-
85
- self.tw_app = twitterApp(self)
86
-
87
- self.executor = concurrent.futures.ThreadPoolExecutor(max_workers=3)
88
-
89
- self.setting = mngSetting()
90
-
91
- self.init_stylesheet = "background-color: rgb(167, 167, 167);"
92
-
93
- self.thread = QThread()
94
-
95
- self.act_list = []
96
-
97
-
98
-
99
-
100
-
101
- def autorun(self):
102
-
103
- # 自動実行が開始されたら自動実行ボタンをクリックできないようにする
104
-
105
- self.changeBtnStatus(self.pushButton_2,self.pushButton)
106
-
107
-
108
-
109
-
110
-
111
- self.tw_app.moveToThread(self.thread)
112
-
113
-
114
-
115
- # スレッドからの紐づけ
116
-
117
- self.tw_app.sendFlag.connect(self.outAction)
118
-
119
- self.tw_app.sendMessage.connect(self.outLog)
120
-
121
- self.tw_app.sendCount.connect(self.setCount)
122
-
123
- self.thread.start()
124
-
125
-
126
-
127
- def stoprun(self):
128
-
129
- self.thread.terminate()
130
-
131
- # 処理を停止したら自動実行ボタンを有効にして停止ボタンを無効にする
132
-
133
- self.changeBtnStatus(self.pushButton,self.pushButton_2)
134
-
135
-
136
-
137
-
138
-
139
- def changeBtnStyleSheet(self,btn,can):
140
-
141
- # ボタンのスタイルを変更する
142
-
143
- # 有効にする(can=true)場合は背景色を初期スタイルに戻す
144
-
145
- if can:
146
-
147
- btn.setStyleSheet(self.init_stylesheet)
148
-
149
- else:
150
-
151
- btn.setStyleSheet("background-color: rgb(0, 0, 0);")
152
-
153
-
154
-
155
- def changeBtnStatus(self,onBtn,offBtn):
235
+ from PyQt5.QtWidgets import *
236
+
237
+ from PyQt5.QtCore import *
238
+
239
+ import schedule
240
+
241
+
242
+
243
+ class twitterApp(QThread):
244
+
245
+
246
+
247
+ # twitterAPIを使用する設定
248
+
249
+ # APPを起動した際に初期化
250
+
251
+ MAX_COUNT = 10
252
+
253
+ sendCount = pyqtSignal(int,int,int)
254
+
255
+ sendFlag = pyqtSignal(bool,bool,bool)
256
+
257
+ sendMessage = pyqtSignal(str)
258
+
259
+ finished = pyqtSignal()
260
+
261
+
262
+
263
+ def __init__(self,host_window):
264
+
265
+
266
+
267
+ super(twitterApp,self).__init__()
268
+
269
+ self.CONSUMER_KEY = CONFIG["API_KEY"]
270
+
271
+ self.CONSUMER_SECRET = CONFIG["API_SECRET_KEY"]
272
+
273
+ self.twitterOauth = TwitterOauth(self.CONSUMER_KEY,self.CONSUMER_SECRET)
274
+
275
+ self.api =''
276
+
277
+ self.window = host_window
278
+
279
+ self.follow_count = self.MAX_COUNT
280
+
281
+ self.retweet_count = self.MAX_COUNT
282
+
283
+ self.favorite_count = self.MAX_COUNT
284
+
285
+
286
+
287
+ def run(self):
156
288
 
157
289
  """
158
290
 
291
+ QThreadのrunメソッドのオーバーライド
292
+
293
+ """
294
+
295
+ 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())
296
+
297
+
298
+
299
+
300
+
301
+ #キーワード検索からtwitterの自動実行
302
+
303
+ def autoRunFromKeyWordSearch(self,word,favorite,retweet,follow,seconds):
304
+
305
+ """twitterキーワード検索から操作実行
306
+
307
+
308
+
309
+ チェックをつけてある動作をキーワード検索に基づいて自動実行する
310
+
311
+
312
+
313
+ Args:
314
+
315
+ word: 検索キーワード
316
+
317
+ favorite : いいねを実行するフラグ
318
+
319
+ retweet: リツイートを実行するフラグ
320
+
321
+ follow: フォローを実行するフラグ
322
+
323
+ seconds: 実行間隔(s)
324
+
325
+ """
326
+
327
+ self.sendMessage.emit('キーワード検索に対する自動実行を開始!')
328
+
329
+ # self.outLog('キーワード検索に対する自動実行を開始!')
330
+
331
+
332
+
333
+ search_results = self.api.search(q=word,count=self.MAX_COUNT)
334
+
335
+
336
+
337
+ for result in search_results:
338
+
339
+ tweet_id = result.id
340
+
341
+ user_id = result.user._json['id']
342
+
343
+
344
+
345
+ if(favorite and self.favorite_count > 0):
346
+
347
+ try:
348
+
349
+ self.api.create_favorite(tweet_id)
350
+
351
+
352
+
353
+ self.favorite_count -= 1
354
+
355
+ # self.window.label_14.setText(str(self.favorite_count))
356
+
357
+ if(self.favorite_count <= 0):
358
+
359
+ break
360
+
361
+ except Exception as e:
362
+
363
+ favorite = False
364
+
365
+ print(e)
366
+
367
+ if(retweet and self.retweet_count > 0):
368
+
369
+ try:
370
+
371
+ self.api.retweet(tweet_id)
372
+
373
+
374
+
375
+ self.retweet_count -= 1
376
+
377
+ # self.window.label_17.setText(str(self.retweet_count))
378
+
379
+ if(self.retweet_count <= 0):
380
+
381
+ break
382
+
383
+ except Exception as e:
384
+
385
+ retweet = False
386
+
387
+ print(e)
388
+
389
+ if(follow and self.follow_count >= 0):
390
+
391
+ try:
392
+
393
+ self.api.create_friendship(user_id)
394
+
395
+ # self.window.label_17.setText(str(self.retweet_count))
396
+
397
+ self.follow_count -= 1
398
+
399
+
400
+
401
+ if(self.follow_count <= 0):
402
+
403
+ break
404
+
405
+ except Exception as e:
406
+
407
+ follow = False
408
+
409
+ print(e)
410
+
411
+ self.sendFlag.emit(retweet,favorite,follow)
412
+
413
+ self.sendCount(self.favorite_count,self.retweet_count,self.follow_count)
414
+
415
+ # self.outAction(retweet,favorite,follow)
416
+
417
+
418
+
419
+ QThread.sleep(seconds)
420
+
421
+ if(self.favorite_count <=0 and self.retweet_count <= 0):
422
+
423
+ self.stop()
424
+
425
+
426
+
427
+ self.sendMessage.emit('キーワード検索に対する自動実行を終了!')
428
+
429
+ # self.outLog('キーワード検索に対する自動実行を終了!')
430
+
431
+ self.window.changeBtnStatus(self.window.pushButton,self.window.pushButton_2)
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+ #タイムラインによるtwitterの自動実行
440
+
441
+ def autoRunAgainstTimeLine(self,favorite,retweet,seconds):
442
+
443
+ """twitterタイムラインに対して操作実行
444
+
445
+
446
+
447
+ チェックをつけてある動作をタイムラインに基づいて自動実行する
448
+
449
+
450
+
451
+ Args:
452
+
453
+ favorite : いいねを実行するフラグ
454
+
455
+ retweet: リツイートを実行するフラグ
456
+
457
+ follow: フォローを実行するフラグ
458
+
459
+ seconds: 実行間隔(s)
460
+
461
+
462
+
463
+ """
464
+
465
+ self.sendMessage.emit('フォロワーに対する自動実行を開始!')
466
+
467
+ # self.outLog('フォロワーに対する自動実行を開始!')
468
+
469
+ # タイムラインのツイートを取得
470
+
471
+ tl = self.api.home_timeline(count=self.MAX_COUNT)
472
+
473
+ for tweet in tl:
474
+
475
+ tweet_id = tweet.id
476
+
477
+ if(favorite and self.favorite_count >= 0):
478
+
479
+ try:
480
+
481
+ self.api.create_favorite(tweet_id)
482
+
483
+ self.favorite_count -= 1
484
+
485
+ # self.window.label_14.setText(str(self.favorite_count))
486
+
487
+
488
+
489
+ except Exception as e:
490
+
491
+ favorite = False
492
+
493
+ print(e)
494
+
495
+ if(retweet and self.retweet_count >= 0):
496
+
497
+ try:
498
+
499
+ self.api.retweet(tweet_id)
500
+
501
+ self.retweet_count -= 1
502
+
503
+ # self.window.label_17.setText(str(self.retweet_count))
504
+
505
+ except Exception as e:
506
+
507
+ retweet = False
508
+
509
+ print(e)
510
+
511
+ # self.outAction(retweet,favorite,False)
512
+
513
+ self.sendFlag.emit(retweet,favorite,False)
514
+
515
+ self.sendCount.emit(self.favorite_count,self.retweet_count,self.follow_count)
516
+
517
+ QThread.sleep(seconds)
518
+
519
+ if(self.favorite_count <=0 and self.retweet_count <= 0):
520
+
521
+ self.stop()
522
+
523
+
524
+
525
+ self.sendMessage.emit('フォロワーに対する自動実行を終了!')
526
+
527
+
528
+
529
+ self.window.changeBtnStatus(self.window.pushButton,self.window.pushButton_2)
530
+
531
+ def autoWrapper(self,is_tl,word,favorite,retweet,follow,seconds):
532
+
533
+ """
534
+
159
535
  @概要
160
536
 
161
- ボタンの状態を変更する
537
+ 自動実行する2つのメソッドのwrapper
162
-
163
-
164
-
538
+
165
- @param onBtn
539
+ @param
166
-
540
+
167
- 有効にしたいボタンオブジェクト
541
+ is_tl:タイムラインて自動実行するかのフラグ
168
-
542
+
169
- @param offBtn
543
+ @param
544
+
170
-
545
+ word:検索キーワード
546
+
547
+ @param
548
+
171
- 無効にしたボタンオブジェクト
549
+ favorite:いねフラグ
550
+
551
+ @param
552
+
553
+ retweet:リツイートフラグ
554
+
555
+ @param
556
+
557
+ follow:フォローフラグ
558
+
559
+ @seconds:
560
+
561
+ 実行間隔フラグ
172
562
 
173
563
  """
174
564
 
175
- onBtn.setEnabled(True)
565
+ if(is_tl):
176
-
566
+
177
- self.changeBtnStyleSheet(onBtn,True)
567
+ self.autoRunAgainstTimeLine(favorite,retweets)
178
-
568
+
179
- offBtn.setEnabled(False)
569
+ if(word):
180
-
570
+
181
- self.changeBtnStyleSheet(offBtn,False)
571
+ self.autoRunFromKeyWordSearch(word,favorite,retweet,follow,seconds)
182
-
183
-
184
572
 
185
573
 
186
574
 
187
- def outAction(self,rt,like,follow):
188
-
189
- if(rt):
190
-
191
- rt_act = 'RT'
192
-
193
- else:
194
-
195
- rt_act = '-'
196
-
197
- if(like):
198
-
199
- like_act = 'Like'
200
-
201
- else:
202
-
203
- like_act = '-'
204
-
205
- if(follow):
206
-
207
- follow_act = 'Follow'
208
-
209
- else:
210
-
211
- follow_act = '-'
212
-
213
-
214
-
215
- # action_listに今回作成したリストを追加していく
216
-
217
- tmp_list = [rt_act,like_act,follow_act,datetime.datetime.now()]
218
-
219
-
220
-
221
- self.act_list.append(tmp_list)
222
-
223
-
224
-
225
- # 行数を追加していく必要があるため
226
-
227
- # 行名は1から順に数字にしていく
228
-
229
- self.tableWidget.setRowCount(len(self.act_list))
230
-
231
- tmpHeaders = list(range(1,len(self.act_list)))
232
-
233
- verHeaders = [str(n) for n in tmpHeaders]
234
-
235
- self.tableWidget.setVerticalHeaderLabels(verHeaders)
236
-
237
-
238
-
239
- for n in range(len(self.act_list)):
240
-
241
- for m in range(len(tmp_list)):
242
-
243
- item = QTableWidgetItem(str(self.act_list[n][m]))
244
-
245
- self.tableWidget.setItem(n, m, item)
246
-
247
-
248
-
249
- def outLog(self,message):
250
-
251
- log_message = '[' + str(datetime.datetime.now()) + '] ' + message
252
-
253
- self.listWidget.addItem(log_message)
254
-
255
-
256
-
257
- def setCount(self,like_count,rt_count,follow_count):
258
-
259
- self.label_14.setText(str(like_count))
260
-
261
- self.label_17.setText(str(rt_count))
262
-
263
- self.label_18.setText(str(follow_count))
264
-
265
-
266
-
267
- if __name__ == "__main__":
268
-
269
-
270
-
271
- app = QApplication(sys.argv)
272
-
273
- form = MainWindow()
274
-
275
- form.show()
276
-
277
- app.exec_()
278
-
279
575
  ```
280
576
 
281
-
282
-
283
577
  全ては書けなかったので追記します。
284
578
 
285
579
  とりあえず、メインウィンドウ側のファイルを記載しました。