pythonでのtweepyを使用した動作時に443が発生する
初めまして。
現在、tweepyを使用したCUIでのTwitterの自動動作を作成しています。
動作内容ですが、検索、フォロー、リツイート、ブロックを行います。
自身のアカウントのKEY4種では問題なく動作するのですが、
@ekzemplaro 様の記事
Twitter の OAuth認証 (Python3)
https://qiita.com/ekzemplaro/items/a622ddf20cb841d03450
を参考に別アカウントでアクセストークンを取得し、動作させようとしたところ
DEBUG:requests_oauthlib.oauth1_auth:Updated body: None
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.twitter.com:443
DEBUG:urllib3.connectionpool:https://api.twitter.com:443 "GET /1.1/search/tweets.json?q=%......
というエラーが出力され、動作しません。
Qiitaでの投稿が初めてのため、どの部分を提示することで回答者様の問題特定の手がかりになるのかが分からず、追加で質問をさせてしまうことご容赦ください。
以上、よろしくお願いします。
import tweepy
import schedule,time,datetime
import logging
import csv
import gspread
import json
import random
import configparser
import sys
ng_user = []
ng_word = []
chk_flg = 0
waitTime = 1
def main():
global chk_flg
global block_list
tweet_list = []
block_list = []
#トークン
CONSUMER_KEY =
CONSUMER_SECRET =
#ini読込
ini = configparser.ConfigParser()
ini.read('./config.ini', 'UTF-8')
ACCESS_TOKEN = ini['user_data']['ACCESS_TOKEN']
ACCESS_SECRET = ini['user_data']['ACCESS_SECRET']
#スプレッドシート接続
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('', scope)
gc = gspread.authorize(credentials)
SPREADSHEET_KEY =
#ユーザーリスト取得
worksheet = gc.open_by_key(SPREADSHEET_KEY).worksheet('')
try:
cell = worksheet.find(ACCESS_TOKEN)
except:
print('')
sys.exit()
user_data = worksheet.row_values(cell.row)
#NG_word,NG_List取得
worksheet = gc.open_by_key(SPREADSHEET_KEY).worksheet('')
ng_word = worksheet.col_values(1)
ng_user = worksheet.col_values(2)
#リスト重複削除
tweet_list = set(tweet_list)
block_list = set(block_list)
#csv読込-Tweet
with open(".csv")as rf:
csv.reader(rf)
for row in rf:
tweet_list.add(str(row))
rf.close
#csv読込-block
with open(".csv")as rf:
csv.reader(rf)
for row in rf:
block_list.add(str(row).replace("\n",""))
#情報取得
StartTime_h = user_data[2]
StartTime_m = user_data[3]
StartTime_S = user_data[4]
EndTime_h = user_data[5]
EndTime_m = user_data[6]
EndTime_s = user_data[7]
Fav = user_data[8]
RT = user_data[9]
Follow = user_data[10]
Rep = user_data[11]
SearchWord = user_data[12]
LimitDate = user_data[13]
#稼働時間設定
chkTime = datetime.datetime.now()
today8am = chkTime.replace(hour=int(StartTime_h), minute=int(StartTime_m), second=int(StartTime_S), microsecond=0)
today23pm = chkTime.replace(hour=int(EndTime_h), minute=int(EndTime_m), second=int(EndTime_s), microsecond=0)
if ((chkTime > today8am) and (chkTime < today23pm)):
rtCount = 0
foCount = 0
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth,wait_on_rate_limit=True,wait_on_rate_limit_notify=True)
#自身のフォロー取得
follow_id = api.friends_ids()
#検索ワード
if waitTime == 1:
search_results = api.search(q=""), count=random.randint(5,12))
else:
search_results = api.search(q=""), count=random.randint(5,12))
logging.info(""))
for result in search_results:
#NGWordチェック
for chkStr in ng_word:
if chkStr in result.text:
chk_flg = 1
print('NGワード発見しました:' + chkStr)
if str(result.user._json['screen_name']) not in block_list:
api.create_block(result.user._json['screen_name'])
print(str(result.user._json['name'])+'(@'+str(result.user._json['screen_name'])+')'+'をブロックしました。')
block_list.add(str(result.user._json['screen_name']))
#NGUserチェック
if (result.user._json['screen_name'] in ng_user) and chk_flg == 0:
chk_flg = 1
print('NGユーザーです。' + result.user._json['screen_name'])
if str(result.user._json['screen_name']) not in block_list:
api.create_block(result.user._json['screen_name'])
print(str(result.user._json['name'])+'(@'+str(result.user._json['screen_name'])+')'+'をブロックしました。')
block_list.add(str(result.user._json['screen_name']))
if chk_flg == 0:
tweet_id = result.id
user_id = result.user._json['id']
try:
if not((str(tweet_id) + "\n") in tweet_list):
#メイン処理
if RT == 0:
api.retweet(tweet_id) #RT
if Fav == 0:
api.create_favorite(tweet_id) #いいね
tweet_list.add(str(tweet_id))
if (user_id not in follow_id) and (Follow == 0):
api.create_friendship(user_id) #フォロー
except Exception as e:
print(e.reason)
if 'To protect our users from spam and other malicious activity, this account is temporarily locked' in e.reason:
print('アカウントがロックされました。処理を中断します。')
logging.info('アカウントがロックされました。処理を中断します。')
exit()
else:
print(e.reason)
logging.info(e.reason)
print(user_id)
chk_flg = 0
#csvファイル上書き-Tweet
with open("", 'w') as f:
for ele in tweet_list:
f.write(str(ele).replace("\n","") + "\n")
f.close
tweet_list.clear()
#csvファイル上書き-block
with open("", 'w') as f:
for ele in block_list:
f.write(str(ele).replace("\n","") + "\n")
f.close
block_list.clear()
#ツイート投稿部分
tweetText = chkTime.strftime("%Y/%m/%d %H:%M:%S")+"\n"
tweetText = tweetText +
tweetText = tweetText +
tweetText = tweetText +
else:
print('現在の時刻は動作停止中です。')
print("現在の日時:",chkTime)
logging.info('現在の時刻は動作停止中です。')
def job():
global waitTime
log_folder = '{0}.log'.format(datetime.date.today())
now=datetime.datetime.now()
main()
print("処理が完了しました。日時:" + now.strftime("%Y/%m/%d %H:%M:%S"))
logging.info("処理が完了しました。日時:" + now.strftime("%Y/%m/%d %H:%M:%S"))
waitTime = random.randint(25,45)
print(str(waitTime) + '分待機します。')
schedule.every(1).minutes.do(job)
while True:
logging.basicConfig(filename='main.log', level=logging.DEBUG)
schedule.run_pending()
time.sleep(waitTime*60)
ソースここまで