我写了一个从Reddit获取帖子并将其发布到Twitter帐户的机器人。但是有时-我不知道为什么-它连续发布两次,而不是每3小时发布一次。我怀疑是因为我做了这样的事情:
do stuff:
if stuff doesnt already exist:
do other stuff
else:
do stuff
而且我真的认为这是一种不好的做法,但是我无法弄清楚如何让它无限循环地运行,但是仍然尝试获取以前尚未发布的帖子。
我在代码中有两点,在检查时我会“重新运行”整个代码。一种是从reddit提取的帖子不是图像时,另一种是之前已提取的帖子已经发布(并存储在json文件中以进行确切检查)。
我希望有人明白我的意思,谢谢。
import time
import tweepy
import datetime
import praw
import urllib.request
import os
import json
def Mainbot():
reddit = praw.Reddit(client_id='X',
client_secret='X',
user_agent='RedditFetchBot by FlyingThunder')
def Tweet(postinfo):
auth = tweepy.OAuthHandler("X", "X")
auth.set_access_token("X", "X")
api = tweepy.API(auth)
try:
api.update_with_media("local-filename.jpg", postinfo)
except:
print("not a file post")
Mainbot() #check 1
post = reddit.subreddit('okbrudimongo').random()
x = post.id
with open('data.json', 'r') as e:
eread = e.read()
if x not in eread:
with open('data.json', 'a') as f:
json.dump(x, f)
f.close()
e.close()
else:
e.close()
print("already posted")
Mainbot() #check 2
print(post.url + " " + post.title)
urllib.request.urlretrieve(post.url, "local-filename.jpg")
Tweet(postinfo=post.title+" (https://www.reddit.com" + post.permalink+")")
try:
time.sleep(5)
os.remove("local-filename.jpg")
except:
print("Datei nicht vorhanden")
def loop():
time.sleep(1800)
print("still running")
print(datetime.datetime.now())
while True:
Mainbot()
loop()
loop()
loop()
loop()
loop()
loop()
顺便说一句,这是它给的回信-我进行了打印检查以查看出了什么问题,在这里您可以看到它两次发布时的内容
still running
2019-09-24 13:27:23.437152
still running
2019-09-24 13:57:23.437595
already posted
https://i.redd.it/xw38s1qrmlh31.jpg Führ Samstag bai ihm
https://i.redd.it/nnaxll9gjwf31.jpg Sorri Mamer
still running
2019-09-24 14:27:39.913651
still running
2019-09-24 14:57:39.913949
still running
2019-09-24 15:27:39.914013
我发现的解决方案(我仍然不完全了解是什么机制导致了该错误):
import time
import tweepy
import datetime
import praw
import urllib.request
import os
import json
def Mainbot():
reddit = praw.Reddit(client_id='m1E7pmr6Lha-ZQ',
client_secret='jphxVmNXhcGv_pl4fLjiL65GoUg',
user_agent='RedditFetchBot by FlyingThunder')
def Tweet(postinfo):
auth = tweepy.OAuthHandler("AggY2XJMVKasb1t0N1SszCnvC", "UieIGakl70k6kTLkjJiIezvrmPlnFnGzsNRInGzfkR5HvXZA1d")
auth.set_access_token("1169529991912206336-9BpmvxEJC3fJLMH09vVJ6Wp4lgvSaU",
"SetVgrMpw71GEU7KnZvSB04EgyPa70b5Xy8Dlozyrflj3")
api = tweepy.API(auth)
try:
api.update_with_media("local-filename.jpg", postinfo)
except:
print("not a file post"+post.permalink)
Mainbot()
post = reddit.subreddit('okbrudimongo').random()
x = post.id
with open('data.json', 'r') as e:
eread = e.read()
if x not in eread:
with open('data.json', 'a') as f:
json.dump(x, f)
f.close()
e.close()
print(post.url + " " + post.title)
urllib.request.urlretrieve(post.url, "local-filename.jpg")
Tweet(postinfo=post.title + " (https://www.reddit.com" + post.permalink + ")")
try:
time.sleep(5)
os.remove("local-filename.jpg")
except:
print("Datei nicht vorhanden")
else:
e.close()
print("already posted")
Mainbot()
def loop():
time.sleep(1800)
print("still running")
print(datetime.datetime.now())
while True:
Mainbot()
loop()
loop()
loop()
loop()
loop()
loop()