HubobelsPython/mpgScanner.py
2019-02-12 20:19:52 +01:00

451 lines
17 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
import json
import time
import datetime
import os
import smtplib
import random
import shutil
try:
import telebot
telegram = True
except ImportError:
print('Librarie "telebot" ist nicht installiert. Keine Verwendung von Telegram!!!')
print('Installation über: "pip3 install pyTelegramBotAPI"')
telegram = False
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
def Download(url):
#return None
filename = pfad+'/mpg/'+url+'.pdf'
url = 'http://www.mpglu.de/vps/'+url+'.pdf'
req = requests.get(url, auth=(jsonpass['mpg_user'], jsonpass['mpg_pass']))
file = open(filename, 'wb')
for chunk in req.iter_content(100000):
file.write(chunk)
file.close()
return None
def modification_date(filename):
t = os.path.getmtime(filename)
return datetime.datetime.fromtimestamp(t)
def Nachricht(fradress, toadress, bccs=[], sub='I am ROOT',body='this comes from Hubobel', attach=[]):
fromaddr = fradress
toaddr = toadress
if bccs==[]:
bccs = toadress
pwd = jsonpass['gmail_pass']
acc = jsonpass['gmail_user']
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = sub
msg.attach(MIMEText(body, 'plain'))
for each in attach:
filename = each
attachment = open(pfad + '/mpg/'+each, 'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename= %s' % filename)
msg.attach(part)
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(acc, pwd)
text = msg.as_string()
server.sendmail(fromaddr, bccs, text)
server.quit()
return
def json_pass_holen(pfad):
with open(pfad+'/pass.json') as file:
passw = json.load(file)
passw['Uhrzeit'] = time.strftime("%H:%M:%S")
passw['Tag_Name'] = time.strftime('%A')
#passw['Tag_Nummer'] = time.strftime('%w')
passw['pfad']=pfad
with open(pfad+'/pass.json', 'w') as fp:
json.dump(passw, fp, sort_keys=True, indent=4)
return passw
def update():
global jsonpass
with open(pfad+'/pass.json') as file:
jsonpass=json.load(file)
if 'Tag_Nummer' in jsonpass or jsonpass['debug']=='True':
print (jsonpass['Tag_Nummer'])
if jsonpass['Tag_Nummer']!= wtag or jsonpass['debug']=="True":
print ('update json mit '+str(wtag))
jsonpass['Tag_Nummer']=str(wtag)
url_zitat = 'https://taeglicheszit.at/zitat-api.php?format=json'
resp_zitat = requests.get(url_zitat)
data_zitat = resp_zitat.json()
jsonpass['zitat']=data_zitat['zitat']
jsonpass['autor']=data_zitat['autor']
with open(pfad+'/pass.json', 'w') as fp:
json.dump(jsonpass, fp, sort_keys=True, indent=4)
return True, jsonpass
else:
print('kein Update')
return False
else:
jsonpass['Tag_Nummer']=''
with open(pfad+'/pass.json', 'w') as fp:
json.dump(jsonpass, fp, sort_keys=True, indent=4)
def Wetter():
url = 'http://api.wunderground.com/api/'+jsonpass['wetter_API']+'/conditions/lang:DL/q/Germany/pws:'+jsonpass['wetter_Ort']+'.json'
response = requests.get(url)
data_response = response.json()
temperatur=(data_response['current_observation']['temp_c'])
wetter=(data_response['current_observation']['weather'])
feuchte=(data_response['current_observation']['relative_humidity'])
if wetter=='Leichter Regen':
wetter='bedeckt und es herrscht leichter Regen....brrrrr!'
if wetter=='Regen':
wetter='voller Wolken und es regnet.'
return temperatur,wetter,feuchte
def Chuckfact():
url_zitat = 'http://api.hubobel.de/zufall'
resp_zitat = requests.get(url_zitat)
data_zitat = resp_zitat.json()
for i in data_zitat:
fact=(data_zitat[i])
return fact
def Lotto():
global lottoa,lottob
a = (sorted(random.sample(range(1, 49), 6)))
b = random.randrange(0, 9)
while b in a:
b = random.randrange(1, 49)
lotto = str(a) + ',Superzahl: ' + str(b)
lottoa=a
lottoa.append(b)
return lotto
pfad = os.path.dirname(__file__)
mail = 0
jetzt = int(time.strftime('%j'))
tag = time.strftime('%d')
wtag = time.strftime('%w')
timestamp=time.strftime("%d.%m.%Y %H:%M:%S")
mailzusatz=""
ferien = False
ferien_morgen = False
feiertag = False
feiertag_morgen = False
fradress='carsten.richter77@gmail.com'
toadress='carsten@hubobel.de'
tage=['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag']
wtag1=wtag
heute_name=(tage[int(wtag)-1])
if int(wtag)>=5:
wtag1=0
morgen_name=(tage[int(wtag1)])
if os.path.isfile(pfad+'/pass.json') !=True:
print('"pass.json" scheint es nicht zu geben.')
print('Ich lege eine neue Datei "pass.json" an.')
passw={"gmail_pass": "","gmail_user": "",
"mpg_user": "",
"mpg_pass": "",
"Chat_ID": "","TOKEN": "",
"ccu_ip": "","Land": "rp",
"Wochentag": ""}
print(str(passw)+ ' bitte entsprechend befüllen.')
with open(pfad+'/pass.json', 'w') as fp:
json.dump(passw, fp, sort_keys=True, indent=4)
quit()
else:
jsonpass = json_pass_holen(pfad)
if jsonpass['TOKEN']=='' or jsonpass['Chat_ID']=='':
telegram=False
if telegram:
TOKEN = jsonpass['TOKEN']
chat_id = jsonpass['Chat_ID']
tb = telebot.TeleBot(TOKEN)
if os.path.isfile(pfad+'/mpg/adressen.txt'):
fobj = open(pfad + "/mpg/adressen.txt")
bcc = []
for line in fobj:
a = line.rstrip()
bcc.append(a)
fobj.close()
if jsonpass['ccu_ip']!='':
url_ferien_ccu = 'http://'+jsonpass['ccu_ip']+'/loksoft.exe?ret=dom.GetObject("Ferien").State('
ccu = True
else:
ccu = False
if os.path.isdir(pfad+'/mpg')!= True: #prüfen, ob das UNTERverzeichniss /mpg bereits existiert
os.makedirs(pfad+'/mpg')
print ('Downloadverzeichniss bei '+pfad +' /mpg/ created!!!')
if int(tag) == 1 and int(time.strftime('%H'))== 8: #Update einmal pro Monat (Ferien)
print("It´s Update Time!!!")
url_ferien = 'http://api.smartnoob.de/ferien/v1/ferien/?bundesland=' + jsonpass['Land']
url_feiertage = 'http://api.smartnoob.de/ferien/v1/feiertage/?bundesland=' + jsonpass['Land']
resp_ferien = requests.get(url_ferien)
resp_feiertage = requests.get(url_feiertage)
data_ferien = resp_ferien.json()
data_feiertage = resp_feiertage.json()
with open(pfad + '/mpg/json_ferien.data', 'w') as outfile:
json.dump(data_ferien, outfile)
with open(pfad + '/mpg/json_feiertage.data', 'w') as outfile:
json.dump(data_feiertage, outfile)
if os.path.isfile(pfad+'/mpg/json_ferien.data')!= True: #Download der jsons, falls diese lokal nicht existieren
print('The json_xxx.datas not found, will try to download them from the API')
url_ferien = 'http://api.smartnoob.de/ferien/v1/ferien/?bundesland=' + jsonpass['Land']
url_feiertage = 'http://api.smartnoob.de/ferien/v1/feiertage/?bundesland=' + jsonpass['Land']
resp_ferien = requests.get(url_ferien)
resp_feiertage = requests.get(url_feiertage)
data_ferien = resp_ferien.json()
data_feiertage = resp_feiertage.json()
with open(pfad+'/mpg/json_ferien.data','w') as outfile:
json.dump(data_ferien, outfile)
with open(pfad+'/mpg/json_feiertage.data','w') as outfile:
json.dump(data_feiertage, outfile)
with open(pfad+'/mpg/json_ferien.data') as file:
data_ferien=json.load(file)
with open(pfad+'/mpg/json_feiertage.data') as file:
data_feiertage=json.load(file)
a= len(data_ferien['daten'])
x = 0
while x <a:
beginn = data_ferien['daten'][x]['beginn']
beginn = datetime.datetime.fromtimestamp(beginn)
beginn = int(beginn.strftime('%j'))
ende = data_ferien['daten'][x]['ende']
ende = datetime.datetime.fromtimestamp(ende)
ende = int(ende.strftime('%j'))-1
if jetzt <= ende and jetzt >= beginn:
ferien = True
if jetzt-1 == beginn:
ferien_morgen = True
if jetzt >= beginn and jetzt <= ende-1:
ferien_morgen = True
x = x+1
if ferien and ccu: #setzen der CCU Variable
try:
requests.post(url_ferien_ccu+'1)')
except:
None
if ferien == False and ccu :
try:
requests.post(url_ferien_ccu+'0)')
except:
None
a= len(data_feiertage['daten'])
x = 0
while x <a:
beginn = data_feiertage['daten'][x]['beginn']
beginn = datetime.datetime.fromtimestamp(beginn)
beginn = int(beginn.strftime('%j'))
ende = data_feiertage['daten'][x]['ende']
ende = datetime.datetime.fromtimestamp(ende)
ende = int(ende.strftime('%j'))-1
if jetzt <= ende and jetzt >= beginn:
feiertag = True
if jetzt+1 == beginn:
feiertag_morgen = True
x = x+1
print('Es sind Ferien: '+ str(ferien))
print('Es sind morgen Ferien: '+ str(ferien_morgen))
print('Es ist ein Feiertag: '+str(feiertag))
print('Es ist morgen ein Feiertag: '+str(feiertag_morgen))
if feiertag_morgen:
mailzusatz = '\n \nMorgen ist ein Feiertag.\nNeue Nachrichten erst am nächsten Werktag wieder.\nGenießt die Zeit!'
############################################################
if ferien:
print('Es sind Ferien, also lass ich euch in Ruhe')
quit()
if feiertag_morgen:
print('Morgen ist Feiertag, also gibts auch nichts, was sich lohnt, anzuschauen.')
#quit()
try:
os.rename(pfad + '/mpg/heute.pdf', pfad +'/mpg/heute1.pdf')
url = 'heute'
Download(url)
x = os.stat(pfad+'/mpg/heute.pdf')
x = x.st_size
x1 = str(x)
y = os.stat(pfad+'/mpg/heute1.pdf')
y = y.st_size
y1 = str(y)
if x != y:
mail=mail+1
else:
print("Es gibt keine neuen Mals mit 'heute'")
d = modification_date(pfad+'/mpg/heute.pdf')
d = d.strftime('%H:%M:%S')
print("heute: " + d + ' '+ x1 + ' Bytes')
d = modification_date(pfad+'/mpg/heute1.pdf')
d = d.strftime('%H:%M:%S')
print("heute1: " + d + ' '+ y1 + ' Bytes')
except FileNotFoundError:
print("File Heute.PDF not found")
print("Will try to download it from the MPG-Server")
url = 'heute'
Download(url)
try:
os.rename(pfad+'/mpg/morgen.pdf', pfad+'/mpg/morgen1.pdf')
url = 'morgen'
Download(url)
x = os.stat(pfad+'/mpg/morgen.pdf')
x = x.st_size
x1 = str(x)
y = os.stat(pfad+'/mpg/morgen1.pdf')
y = y.st_size
y1 = str(y)
if x != y:
mail = mail + 2
else:
print("Es gibt keine neuen Mails mit 'morgen'")
d= modification_date(pfad+'/mpg/morgen.pdf')
d = d.strftime('%H:%M:%S')
print("morgen: " + d + ' ' + x1 + ' Bytes')
d = modification_date(pfad+'/mpg/morgen1.pdf')
d = d.strftime('%H:%M:%S')
print("morgen1: " + d + ' ' + x1 + ' Bytes')
except FileNotFoundError:
print("File Morgen.PDF not found")
print("Will try to download it from the MPG-Server")
url = 'morgen'
Download(url)
#sub='Hier kommt der Betreff rein'
#body = 'hier der Mailtext'
#anhang = ['adressen.txt','heute.pdf','morgen.pdf']
#Nachricht (fradress,toadress,bcc,sub,body,anhang)
if mail!=0 or jsonpass['debug']=='True':
if update():
print ('Neuer Tag, neues Gluck!')
if wtag == '1':
mailzusatz = '\n \nWillkommen in der ' + str(time.strftime('%W')) + '.Kalenderwoche.' + \
'\nNicht verzagen, nur Druck formt aus Kohle einen Diamanten!' \
'\nZitat des Tages:\n'+ jsonpass['zitat']+ \
'\nAutor: ' + jsonpass['autor'] + '\n'
if wtag == '2':
mailzusatz = '\n \nDer Montag liegt hinter uns.\nAb heuteb kann es nur noch aufwärts gehen!' \
'\nViel Spass, bei allem, was ihr so treibt\n'+ \
'\nZitat des Tages:\n'+ jsonpass['zitat']+ \
"\nAutor: " + jsonpass['autor'] + '\n'
if wtag == '3' or jsonpass['debug']=='True':
lotto=Lotto()
mailzusatz = '\n \nHallo Mittwoch!\nIch wünsche eine schöne Wochenmitte.\nKopf hoch! ' \
+ 'Wenn ich Lotto spielen würde, dann kämen heute folgende Zahlen zum Einsatz: ' +lotto +\
'\n\nZitat des Tages:\n'+ jsonpass['zitat']+ \
"\nAutor: " + jsonpass['autor'] + '\n'
jsonpass['lotto'] = lottoa
jsonpass['lotto_timestamp']=timestamp
with open(pfad + '/pass.json', 'w') as fp:
json.dump(jsonpass, fp, sort_keys=True, indent=4)
if wtag == '4':
mailzusatz = '\n \nDer Donnerstag ist bekanntlich der \'kleine Freitag\'' \
'\nNur noch einmal (!) Gas geben!\n' '\nZitat des Tages:\n'+ jsonpass['zitat']+\
'\nAutor: '+jsonpass['autor']+'\n'
if wtag == '5':
lotto=Lotto()
mailzusatz = '\n \nEs ist Freitag!\nIch wünsche ein schönes Wochenende.' \
'\nNeue Nachrichten kommen erst am Montag wieder.\n'+'Vieleicht habt ihr ja am Samstag'\
' Glück beim Lotto. Probiert doch mal diese Zahlen: '+lotto+\
'\n\nZitat des Tages:\n'+ jsonpass['zitat']+\
'\nAutor: '+jsonpass['autor']+'\n'
jsonpass['lotto'] = lottoa
jsonpass['lotto_timestamp'] = timestamp
with open(pfad + '/pass.json', 'w') as fp:
json.dump(jsonpass, fp, sort_keys=True, indent=4)
else:
print ('im Westen nix neues')
if jsonpass['debug']=="True":
update()
print('DEBUG_MODE')
bcc=jsonpass['debug_adress']
TOKEN = jsonpass['debug_TOKEN']
chat_id = jsonpass['debug_Chat_ID']
tb = telebot.TeleBot(TOKEN)
mailzusatz = mailzusatz + '\n \nDies ist eine Testnachricht!\nDer Versand erfolgt nur an Hubobel und schneeschieben.\n\n' \
'Zitat des Tages:\n'+ jsonpass['zitat']+'\nAutor: '+jsonpass['autor']+'\n'
if 'wetter_API' in jsonpass:
if jsonpass['wetter_API']!='':
temperatur,wetter,feuchte=Wetter()
bericht='\nAktuell haben wir geschmeidige '+str(temperatur)+' Grad Celsius bei '+str(feuchte)\
+' Luftfeuchtigkeit.\nDer Himmel ist '+str(wetter)+'.\n'
else:
bericht = 'Wie das Wetter derzeit ist? Man(n) richte seinen Blick gen Himmel oder' \
' generiere einen API-Key unter https://www.wunderground.com/signup?mode=api_signup'
else:
bericht='Wie das Wetter derzeit ist? Man(n) richte seinen Blick gen Himmel oder' \
' generiere einen API-Key unter https://www.wunderground.com/signup?mode=api_signup'
fact='\nChuck-Norris-Fact:\n'+Chuckfact()
shutil.copy(pfad+'/mpg/morgen.pdf',pfad+'/mpg/'+morgen_name+'.pdf')
if mail == 1 or jsonpass['debug']=='True':
body = 'Es gibt eine aktuelle Version des heutigen Vertretungsplanes.'+mailzusatz+bericht+fact
anhang = ['heute.pdf']
sub = 'MPG-heute aktualisiert'
if os.path.isfile(pfad + '/mpg/adressen.txt'):
Nachricht(fradress, toadress, bcc, sub, body, anhang)
print (body+' ich versende das mal an: '+str(bcc))
if telegram:
document = open(pfad+'/mpg/heute.pdf', 'rb')
tb.send_document(chat_id, document, caption='Es gibt eine aktuelle Version des heutigen Vertretungsplanes.')
tb.send_message(chat_id, mailzusatz+bericht+fact)
if mail == 2 or jsonpass['debug']=='True':
body = 'Es gibt eine aktualisierte Version des Vertretungsplanes für '+morgen_name+mailzusatz+bericht+fact
anhang = [morgen_name+'.pdf']
sub = 'MPG-morgen aktualisiert'
if os.path.isfile(pfad + '/mpg/adressen.txt'):
Nachricht(fradress, toadress, bcc, sub, body, anhang)
print (body+' ich versende das mal an: '+str(bcc))
if telegram:
document = open(pfad + '/mpg/'+morgen_name+'.pdf', 'rb')
tb.send_document(chat_id, document, caption='Es gibt eine aktualisierte Version '
'des Vertretungsplanes für '+morgen_name+'.')
tb.send_message(chat_id, mailzusatz + bericht+fact)
if mail == 3 or jsonpass['debug']=='True':
body = 'Es gibt aktualisierte Versionen der MPG-Vertretungspläne.'+mailzusatz+bericht+fact
anhang = ['heute.pdf',morgen_name+'.pdf']
sub = 'MPG-Vertretungspläne aktualisiert'
if os.path.isfile(pfad + '/mpg/adressen.txt'):
Nachricht(fradress, toadress, bcc, sub, body, anhang)
print (body+' ich versende das mal an: '+str(bcc))
if telegram:
document = open(pfad + '/mpg/heute.pdf', 'rb')
tb.send_document(chat_id, document, caption='Es gibt aktualisierte Versionen der MPG-Vertretungspläne.')
document = open(pfad + '/mpg/'+morgen_name+'.pdf', 'rb')
tb.send_document(chat_id, document)
tb.send_message(chat_id, mailzusatz + bericht+fact)