質問編集履歴
2
脱字等の修正
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操作のクラスファイルを追記
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
|
とりあえず、メインウィンドウ側のファイルを記載しました。
|