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