117 lines
No EOL
3.7 KiB
Python
117 lines
No EOL
3.7 KiB
Python
# status bot
|
|
|
|
import json
|
|
import os
|
|
import time
|
|
import urllib.request, json
|
|
import datetime
|
|
import tweepy
|
|
import random
|
|
|
|
def internet_on(url):
|
|
try:
|
|
urllib.request.urlopen(url)
|
|
return True
|
|
except urllib.error.URLError as e:
|
|
print(e.reason)
|
|
return False
|
|
|
|
|
|
def textselect(min, max):
|
|
number = random.randint(0, 1)
|
|
|
|
if number == 0:
|
|
return 0
|
|
else:
|
|
return random.randint(min, max)
|
|
|
|
|
|
|
|
while True:
|
|
|
|
# starting by configuring the bot
|
|
file_configure_path = "config.json"
|
|
with open(file_configure_path, 'r') as f:
|
|
data_config = json.load(f)
|
|
|
|
path = data_config["path"]
|
|
|
|
CONSUMER_KEY = data_config["twitter_api"]["consumer_key"]
|
|
CONSUMER_SECRET = data_config["twitter_api"]["consumer_secret"]
|
|
ACCESS_KEY = data_config["twitter_api"]["token"]
|
|
ACCESS_SECRET = data_config["twitter_api"]["token_secret"]
|
|
print(CONSUMER_KEY)
|
|
|
|
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
|
|
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
|
|
api = tweepy.API(auth)
|
|
|
|
|
|
if internet_on("http://twitter.com") == True:
|
|
|
|
# finding out the status of the space...
|
|
api_url = data_config["status_api"]["url"]
|
|
with urllib.request.urlopen(api_url) as url:
|
|
data_space = json.loads(url.read().decode())
|
|
#print(data_space["state"]["open"])
|
|
|
|
|
|
file_path = path + "space.json"
|
|
if os.path.exists(file_path) == True:
|
|
# Reading data back
|
|
with open(file_path, 'r') as f:
|
|
data_space_b4 = json.load(f)
|
|
#print(data_space_b4["state"]["open"])
|
|
|
|
|
|
if data_space["state"]["open"] != data_space_b4["state"]["open"]:
|
|
print("status changed.")
|
|
|
|
# starting by configuring the bot
|
|
file_status_path = path + "status.json"
|
|
with open(file_status_path, 'r') as f:
|
|
data_status = json.load(f)
|
|
|
|
|
|
# finding out wich state it change and sending out the text
|
|
if data_space["state"]["open"] == False:
|
|
print("closing at", time.time(), ",last change happend at", datetime.datetime.fromtimestamp(
|
|
int(data_space["state"]["lastchange"]) ).strftime('%Y-%m-%d %H:%M:%S'))
|
|
|
|
number = len(data_status["closing_text"])
|
|
number = textselect(0, number - 1)
|
|
|
|
text = data_status["closing_text"][number]["text"]
|
|
print("Text:", text)
|
|
api.update_status(text)
|
|
# same text as before cannot be posted!
|
|
|
|
else:
|
|
print("opening at", time.time(), ",last change happend at", datetime.datetime.fromtimestamp(
|
|
int(data_space["state"]["lastchange"]) ).strftime('%Y-%m-%d %H:%M:%S'))
|
|
|
|
number = len(data_status["opening_text"])
|
|
number = textselect(0, number - 1)
|
|
|
|
text = data_status["opening_text"][number]["text"]
|
|
print("Text:", text)
|
|
api.update_status(text)
|
|
|
|
|
|
else:
|
|
print("status is still the same at", time.time(), datetime.datetime.fromtimestamp(
|
|
int(data_space["state"]["lastchange"]) ).strftime('%Y-%m-%d %H:%M:%S'))
|
|
|
|
else:
|
|
print("welcome to your initial round")
|
|
|
|
|
|
# saving the current space status just too compare them in the next round
|
|
with open(file_path, 'w') as outfile:
|
|
json.dump(data_space, outfile, indent=4)
|
|
|
|
else:
|
|
print(time.time(), "internet is off")
|
|
|
|
# how often shall we check for status?
|
|
time.sleep(data_config["status_api"]["checking_period"]) |