7da2236af4
added arduino code is the read out of the sensor via an arduino. the raspicode is moved to its own section.
140 lines
4.9 KiB
Python
140 lines
4.9 KiB
Python
# status bot
|
|
|
|
import json
|
|
import os
|
|
import time
|
|
import urllib.request, json
|
|
import datetime
|
|
import tweepy
|
|
import random
|
|
path = os.path.abspath(__file__)
|
|
dir_path = os.path.dirname(path)
|
|
print("dir path is", dir_path)
|
|
|
|
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)
|
|
|
|
def log(out):
|
|
f = open(dir_path + os.sep + "log.csv", "a")
|
|
f.write(out)
|
|
f.close()
|
|
|
|
while True:
|
|
|
|
# starting by configuring the bot
|
|
file_configure_path = dir_path + os.sep + "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)
|
|
|
|
time_now = time.time()
|
|
|
|
# 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"] + " [closed:" + datetime.datetime.fromtimestamp(
|
|
int( time_now + 3600 )).strftime('%Y-%m-%d %H:%M:%S') + "]"
|
|
|
|
print("Text:", text)
|
|
try:
|
|
api.update_status(text)
|
|
# same text as before cannot be posted!
|
|
except:
|
|
print(time_now, "did not tweet closing status")
|
|
|
|
log(str(time_now) + ";" + str(data_space["state"]["lastchange"]) + ";" + str(data_space["state"]["open"])
|
|
+ ";" + str(number) + "\n")
|
|
|
|
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"] + " [open:" + datetime.datetime.fromtimestamp(
|
|
int( time_now + 3600 )).strftime('%Y-%m-%d %H:%M:%S') + "]"
|
|
|
|
print("Text:", text)
|
|
try:
|
|
api.update_status(text)
|
|
except:
|
|
print(time_now, "did not tweet opening status")
|
|
|
|
log(str(time_now) + ";" + str(data_space["state"]["lastchange"]) + ";" + str(data_space["state"]["open"])
|
|
+ ";" + str(number) + "\n")
|
|
|
|
|
|
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("We're back, baby! #Krautspace space status is active again. @HackspaceJena")
|
|
|
|
|
|
# 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"])
|