· 8 years ago · Dec 20, 2017, 11:42 AM
1import os.path #Kontrollib, kas fail on olemas
2import json #Teeb dictionary oma stringiks, et seda faili panna
3import requests #Lingi saamiseks
4from bs4 import BeautifulSoup #Aitab html koodi lugeda
5import smtplib #Emaili saatmine ja mingi hookuspookus
6from email.mime.text import MIMEText #Emaili saatmine -> kirja pealkiri
7from email.mime.multipart import MIMEMultipart #Paneb kirja pealkirja ja sisu kokku
8
9def kontrolliFilmiDicti(failinimi):
10 if os.path.exists(failinimi):
11 fail = open(failinimi, 'r',encoding='utf-8')
12 filmiDict = json.loads(fail.read())
13 fail.close()
14 #Kui faili pole, siis teeme tühja faili
15 else:
16 filmiDict = {}
17 return filmiDict
18
19def saadaMeil(saatjaMeil, saatjaParool, saajaMeil):
20 msgSisu = ''
21 for film in filmid:
22 nimi = film.select_one('.list-item-desc-title a').text
23 kpv = film.select_one('.event-releaseDate b').text
24 zanrid = film.select_one('.genre-names b').text
25 youtubeLink = film.select_one('.btn-group a')
26
27 if youtubeLink:
28 youtube = youtubeLink.get('href') #Päris youtube link
29 else:
30 youtube = None
31
32 uuid = film.select_one('.list-item-desc-title a').get('href') #URL ID, et eristada filme lihtsasti
33
34 if uuid not in filmiDict:
35 if youtube:
36 msgSisu += ('\n Apollos on uus film: ' + nimi + ', mis esilinastub ' + str(kpv) + ' ja mille traileri link on: ' + str(youtube) + '. Filmi zanr on: ' + zanrid + '.\n')
37 else:
38 msgSisu += ('\n Apollos on uus film: ' + nimi + ', mis esilinastub ' + str(kpv) + '. Filmi zanr on: ' + zanrid + '.\n')
39 filmiDict[uuid] = {"nimi":nimi, "kuupäev":kpv, "zanr":zanrid, "treiler":youtube}
40 msg = MIMEMultipart()
41 msgTervitus = 'Tere!\n'
42 msgLopp = '\nHead filmielamust!'
43 msg4 = msgTervitus + msgSisu + msgLopp #Paneme emaili sisu kokku
44 msg['Subject'] = "Uued filmid Apollos"
45 msg.attach(MIMEText(msg4, 'plain')) #Paneme kokku emaili pealkirja ja sisu
46 text = msg.as_string() #Tanu sellele on meil tapitahed!!
47 if msgSisu != '':
48 server = smtplib.SMTP('smtp.gmail.com', 587)
49 server.starttls()
50 server.login(saatjaMeil, saatjaParool)
51 server.sendmail(saatjaMeil, saajaMeil, text.encode('utf-8'))
52 server.quit()
53
54#Loeme andmed sisse html koodina
55linkApollo = requests.get('https://www.apollokino.ee/soon')
56supp = BeautifulSoup(linkApollo.text, 'html.parser')
57#Otsime koha üles, kus asuvad meie filmid ja nende info
58filmid = supp.select(".ContentBlockComingSoon .EventList-container > div")
59#Kontrollime, kas fail on juba olemas ja loeme faili sisse juhul, kui see on olemas
60filmiDict = kontrolliFilmiDicti('filmid.txt')
61#NB! Saatja meil peab olema @gmail.com lõpuga!
62saadaMeil('lehtmetslane@gmail.com', 'mees123GG', 'meeliste@mail.com')
63
64json_string = json.dumps(filmiDict) #Teeb dictionary oma jamaks, et see ilusti stringina faili panna
65#Kirjtame uue faili, kus sees on ka kõik uued filmid
66fail = open('filmid.txt', 'w', encoding='utf-8')
67fail.write(json_string)
68fail.close()