Program to pick up a webpage events

1

source code here too: link

Goal: catch events in% with%

Each month, the URL changes only the thin, for example, in April will be:

http://www.bhaktiyogapura.com/2018/03/calendario-vaisnava-abril-2018/

As I can not get right on the page (I do not know how to do it), I copy and paste it in calendar.txt, then I execute my script.

The script sends via email and posted to facebook

What's missing: I would like to get straight from the URL without having to paste it on the calendar.txt

I would also, if possible, post the events in a Whatsapp or Telegram group. Is it possible?

-

from datetime import datetime #usado para o contador do numero de emails enviados!
from datetime import date

import facebook
import requests
###############################facebook


######add body email
import os
import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


import requests, time
from bs4 import BeautifulSoup as bs
from datetime import datetime

import re

f = open('/Gopala1/scripts/ptbr/calendar.txt', 'r')
content = f.read()


data_desejada = time.strftime("%d %b %Y", time.localtime(time.time() + (3600 * 24 * 2))) # daqui a 2 dias
amanha = time.strftime("%d %b %Y", time.localtime(time.time() + (3600 * 24 * 1))) #amanha

# Localizando todas as datas no arquivo:
dates = re.findall(r"[0-9]{1,2}\s.+\s[0-9]{4}", content)


# Verifica se a data existe no arquivo:
if not amanha in dates:
  raise Exception("Data não definida")



# Localiza a data desejada no arquivo:
start = content.find(amanha)


# Verifica o índice da data na lista de datas:
index = dates.index(amanha)


# Verifica se não é a última data da lista:
if index < len(dates)-1:

  # Verifica qual é a data posterior à desejada:
  next_date = dates[index+1]

  # Localiza a próxima data no arquivo:
  end = content.find(next_date)

else:

  # É a última data da lista, então exibe até o final do arquivo:
  end = len(content)

# Exibe o conteúdo:
#print(content[start:end])





url = "http://www.bhaktiyogapura.com/calendario-vaisnava/"


print ("Prezados devotos, ")
print()
print()

print()
print("Amanhã, %s, teremos o(s) seguinte(s) evento(s) no Calendario Vaisnava: " %(amanha ))
print()
print(content[start:end])
##
##print()

#print("Amanhã %s, teremos o(s) seguinte(s) evento(s) no Calendario Vaisnava: " %(amanha))
print()

#print(calendar[data_nova2],end ="" )

print()
print("Para mais detalhes acessem: %s " %(url))
print()
print("Jay Radhe!")



arq = open('CalendarioVaisnava.txt', 'w')
texto = []
texto.append("Prezados devotos,")


texto.append('\n')
texto.append('\n')
texto.append('\n')
texto.append('\n')


texto.append("Amanhã, %s, teremos o(s) seguinte(s) evento(s) no Calendario \
Vaisnava : " %(amanha))

texto.append('\n')
texto.append('\n')
##texto.append('\n')
texto.append(content[start:end])

texto.append('Para mais detalhes acessem: Para mais detalhes: http://www.bhaktiyogapura.com/calendario-vaisnava/')
texto.append('\n')
#texto.append('José Lima\n')
arq.writelines(texto)
arq.close()



####parte envio email
COMMASPACE = ', '

def main():
    sender = '[email protected]'
    gmail_password = 'xxxxxxxxxxxx'


    recipients = ['[email protected]']


    #criando um contador do numero de emails enviados desde 25fev2017
##    inicio = datetime.strptime ('2017-02-25' ,"%Y-%m-%d")
##    hoje = date.today()
##    contador = hoje.toordinal() - inicio.toordinal()
##
##    
    # Create the enclosing (outer) message
    outer = MIMEMultipart()

    #titulo = 'Lembrete número ' + str(contador)+  " sobre o calendario Vaisnava"
    titulo = "Lembrete sobre o calendario Vaisnava"
    outer['Subject'] = titulo
    outer['To'] = COMMASPACE.join(recipients)
    outer['From'] = sender
    outer.preamble = 'You will not see this in a MIME-aware mail reader.\n'

  ###OBS sempre colocar o caminho completo da imagem

    # List of attachments
    #attachments = ['/Gopala1/scripts/p.jpg','CalendarioVaisnava.txt']
    #attachments =['CalendarioVaisnava.txt']
    attachments = ['/Gopala1/scripts/ptbr/p.jpg','CalendarioVaisnava.txt']




    # Create the body of the message (a plain-text and an HTML version).
    #text = open("CalendarioVaisnava.txt","r")
    arq = open("CalendarioVaisnava.txt",'r')
    text = arq.read()



    html ="""
    <html>

      <head></head>

      <body>

     <embed src="CalendarioVaisnava.txt">

     <p><h1>Jay Radhe!</h1><br>
          Anadi-Krsna Das<br><br /><br />
          Para mais detalhes, acessem <a href="Para mais detalhes: http://www.bhaktiyogapura.com/calendario-vaisnava/">link</a>.
        </p>

         <figure>
  <img src="http://oi68.tinypic.com/2n9ajj6.jpg"alt="Jay Guru Parampara!" >
</figure> 
      </body>
    </html>
    """


    # Now add the related image to the html part.
    #data_uri = open('parampara.jpg', 'rb').read().encode('base64').replace('\n', '')
##    data_uri = base64.b64encode(open('parampara.jpg', 'rb').read()).decode('utf-8').replace('\n', '')
##    img_tag = '<img src="data:image/png;base64,{0}">'.format(data_uri)

    # Record the MIME types of both parts - text/plain and text/html.
    part1 = MIMEText(text, 'plain')
    part2 = MIMEText(html, 'html')


    # Attach parts into message container.
    # According to RFC 2046, the last part of a multipart message, in this case
    # the HTML message, is best and preferred.
    outer.attach(part1)
    outer.attach(part2)




    # Add the attachments to the message
    for file in attachments:
        try:
            with open(file, 'rb') as fp:
                msg = MIMEBase('application', "octet-stream")
                msg.set_payload(fp.read())
            encoders.encode_base64(msg)
            msg.add_header('Content-Disposition', 'attachment', filename=os.path.basename(file))
            outer.attach(msg)
        except:
            print("Unable to open one of the attachments. Error: ", sys.exc_info()[0])
            raise

    composed = outer.as_string()



    # Send the email


    try:
        with smtplib.SMTP('smtp.gmail.com', 587) as s:
            s.ehlo()
            s.starttls()
            s.ehlo()
            s.login(sender, gmail_password)
            s.sendmail(sender, recipients, composed)
            s.close()
        print("Email sent!")
    except:
        print("Unable to send the email. Error: ", sys.exc_info()[0])
        raise
    arq.close()
if __name__ == '__main__':
    main()



###########facebook



def some_action(post):
    """ Here you might want to do something with each post. E.g. grab the
    post's message (post['message']) or the post's picture (post['picture']).
    In this implementation we just print the post's created time.
    """
    post['lllllllllllllllllllllllllllllll']


#token de [email protected]
access_token ='lalalalala'
#This new long-lived access token will expire on June 24th, 2017:

user = '33333333' #pagina Vaishnava

graph = facebook.GraphAPI(access_token)
profile = graph.get_object(user)
posts = graph.get_connections(profile['id'], 'posts')



#graph.put_object("me", "feed", message="O salomao taaaaa durmindo")
#graph.put_photo(image=open('DSC02274.JPG', 'rb'), message='Look at this cool photo!')
#graph.put_photo(image=open('salompas.jpg', 'rb'), message='lindinhu')
##arq = open("CalendarioVaisnava.txt",'r')
##attachment= arq.readlines()
#graph.put_photo(image=open('CalendarioVaisnava.txt', 'r'), message='Look at this cool photo!')


f = open('CalendarioVaisnava.txt', 'r')
listao=[]
listao = f.readlines() # converte o arquivo em lista


mensagem = ''.join(listao) #transforma a lista em string
#print("a mensagem eh", mensagem)

###OBS sempre colocar o caminho completo da imagem
#posting on a principal page

##nao consigo postar IMAGEM
graph.put_photo(image=open('/Gopala1/scripts/ptbr/p.jpg', 'rb'), message='Jay Guru Parampara!')
#graph.put_photo(image=open('p.jpg', 'rb'), message='Jay Guru Parampara!')
#graph.put_photo(image='http://oi68.tinypic.com/2n9ajj6.jpg', message='Jay Guru Parampara!
graph.put_object("me", "feed", message=mensagem)

#posting on a wall
#graph.put_photo(image=open('parampara.jpg', 'rb'), message='Jay Guru Parampara!',album_path="232568853880500")
#graph.put_object("1290498430996462", "feed", message=mensagem) #[email protected]
graph.put_object("1290498430996462", "feed", message=mensagem) #[email protected]
    
asked by anonymous 29.03.2018 / 19:26

1 answer

2

Hello ...

The implementation to handle the page, may be approximately the following (following what has been suggested by @lazyFox). In the case you will have to do the treatments because in the page the calendar is simply a lot of paragraphs ...

import requests
from bs4 import BeautifulSoup
import re

url = 'http://www.bhaktiyogapura.com/2018/03/calendario-vaisnava-marco-2018/'
response = requests.get(url, verify=False)
data = response.text
soup = BeautifulSoup(data, "html5lib")
# aqui você seleciona o que você quer recuperar
r = soup.find("div",{'class':'the_content_wrapper'})
p = r.find_all("p")
# Aqui você itera em todos os páragrafos da agenda.
for linha in p:
   print(linha.text)

Improving a bit, separating dates and activities ...

import requests
from bs4 import BeautifulSoup
import re

url = 'http://www.bhaktiyogapura.com/2018/03/calendario-vaisnava-marco-2018/'
response = requests.get(url, verify=False)
dados = response.text
soup = BeautifulSoup(dados, "html5lib")
# aqui você seleciona o que você quer recuperar
r = soup.find("div",{'class':'the_content_wrapper'})
p = r.find_all("p")
# Aqui você itera em todos os páragrafos da agenda.
redt = re.compile(r"^([0-9]+\sde\s\w+\s[0-9]{4})\s[–]\s(\w+)$")
atividade = ""
dia_semana = ""
data=""
for linha in p:
   if linha.text.strip()=="":
      continue
   s = redt.match(linha.text)
   if (s):
       if atividade != "":
          print("Data: %s - %s" % (data, dia_semana, ))
          print("Atividade %s"  % (atividade))
          print("".center(50,"-"))
          atividade = ""
       data=s.group(1)
       dia_semana=s.group(2)
       continue
   if linha.text.startswith("-"):
       atividade=atividade + linha.text.strip()
   else:
       atividade=linha.text

if atividade != "":
 print("Data: %s - %s" % (data, dia_semana, ))
 print("Atividade %s"  % (atividade))
 atividade = ""

The result would look like this:

Data:  - 
Atividade Srila Gurudeva
--------------------------------------------------
Data: 01 de Março 2018 - Quinta
Atividade Pūrṇimā, G, 05:49, Maghā-Śrī Gaura Pūrṇimā – Aparecimento de Śrī Kṛṣṇa Caitanya Mahāprabhu – Jejum até o nascer da lua, após ingerir somente preparações de Ekādaśī.
--------------------------------------------------
Data: 02 de Março 2018 - Sexta
Atividade Pratipat, K, 05:49, P.Phalgunī-Quebra do jejum para Rio de Janeiro 05:49 às 09:60am-Festival de Jagannātha Miśra
--------------------------------------------------
Data: 03 de Março 2018 - Sábado
Atividade Dvitīyā, K, 05:50, U.Phalgunī
--------------------------------------------------
Data: 04 de Março 2018 - Domingo
Atividade Tritīyā, K, 05:50, Hasta
--------------------------------------------------
Data: 05 de Março 2018 - Segunda
Atividade Caturthī, K, 05:51, Citrā
--------------------------------------------------
Data: 06 de Março 2018 - Terça
Atividade Pañcamī, K, 05:51, Svātī
--------------------------------------------------
Data: 07 de Março 2018 - Quarta
Atividade Ṣaṣṭhī, K, 05:52, Viśākhā
--------------------------------------------------
Data: 08 de Março 2018 - Quinta
Atividade Saptamī, K, 05:52, Anurādhā
--------------------------------------------------
Data: 09 de Março 2018 - Sexta
Atividade Astamī, K, 05:52, Jyeṣṭha-Aparecimento de Śrī Śrīvāsa Paṇḍita
--------------------------------------------------
Data: 10 de Março 2018 - Sábado
Atividade Navamī, K, 05:53, Mūlā
--------------------------------------------------
Data: 11 de Março 2018 - Domingo
Atividade Daśamī, K, 05:53, Purvāṣāḍhā
--------------------------------------------------
Data: 12 de Março 2018 - Segunda
Atividade Ekādaśī, K, 05:54, Uttarāṣāḍhā-(não é favorável para jejuar, consultar o dia seguinte)
--------------------------------------------------
Data: 13 de Março 2018 - Terça
Atividade –VYANJULI MAHĀDVĀDAŚĪ: Jejum para Pāpamocani Ekadasi
--------------------------------------------------
Data: 14 de Março 2018 - Quarta
Atividade Dvādaśī, K, 05:54, Śravaṇā-Quebra do jejum para Rio de Janeiro: 05:54 às 07:18am
-Quebra do jejum para São Paulo: 06:08 às 07:18am
-Quebra do jejum para Brasília:  06:15 às 07:18am
-Quebra do jejum para Belo Horizonte:  05:58 às 07:18am
-Quebra do jejum para Vitória:  05:43 às 07:18am
--------------------------------------------------
Data: 15 de Março 2018 - Quinta
Atividade Trayodaśī, K, 05:55, Dhaniṣṭhā-Sol entra em Peixes
--------------------------------------------------
Data: 16 de Março 2018 - Sexta
Atividade Caturdaśī, K, 05:55, Śatabhiṣā
--------------------------------------------------
Data: 17 de Março 2018 - Sábado
Atividade Amāvasyā, K, 05:56, Pūrvabhādra-Amāvasyā
--------------------------------------------------
Data: 18 de Março 2018 - Domingo
Atividade Pratipat, G, 05:56, Uttarabhādra
--------------------------------------------------
Data: 19 de Março 2018 - Segunda
Atividade Dvitīyā, G, 05:56, Revatī
--------------------------------------------------
Data: 20 de Março 2018 - Terça
Atividade Tritīyā, G, 05:57, Aśvinī
--------------------------------------------------
Data: 21 de Março 2018 - Quarta
Atividade Caturthī, G, 05:57, Bhāranī
--------------------------------------------------
Data: 22 de Março 2018 - Quinta
Atividade Ṣaṣṭhī, G, 05:57, Kṛttikā-Aparecimento de Śrī Rāmānujācārya
--------------------------------------------------
Data: 23 de Março 2018 - Sexta
Atividade Saptamī, G, 05:58, Rohiṇī
--------------------------------------------------
Data: 24 de Março 2018 - Sábado
Atividade Astamī, G, 05:58, Mṛgaśīrśa
--------------------------------------------------
Data: 25 de Março 2018 - Domingo
Atividade Navamī, G, 05:59, Punarvasu-Rāma-navamī ~ Aparecimento do Senhor Śrī Rāmacandra – jejum até o meio-dia, após ingerir somente preparações de Ekādaśī.
--------------------------------------------------
Data: 26 de Março 2018 - Segunda
Atividade Daśamī, G, 05:59, Puṣyā-Quebra do jejum para Rio de Janeiro 05:59 às 09:59am
-Quebra do jejum para São Paulo: 06:13 às 10:12am
-Quebra do jejum para Brasília:  06:16 às 10:17am
-Quebra do jejum para Belo Horizonte:  06:01 às 10:01am
-Quebra do jejum para Vitória:  05:47 às 09:47am
--------------------------------------------------
Data: 27 de Março 2018 - Terça
Atividade –ŚUDDHA EKĀDAŚĪ VRATA: Jejum para Kāmadā Ekadasi 
--------------------------------------------------
Data: 28 de Março 2018 - Quarta
Atividade Dvādaśī, G, 05:60, Maghā-Quebra do jejum para Rio de Janeiro 05:60 às 09:58am
-Quebra do jejum para São Paulo: 06:13 às 10:12am
-Quebra do jejum para Brasília:  06:17 às 10:17am
-Quebra do jejum para Belo Horizonte:  06:02 às 10:01am
-Quebra do jejum para Vitória:  05:47 às 09:47am
--------------------------------------------------
Data: 29 de Março 2018 - Quinta
Atividade Trayodaśī, G, 05:60, P.Phalgunī
--------------------------------------------------
Data: 30 de Março 2018 - Sexta
Atividade Caturdaśī, G, 06:00, U.Phalgunī
--------------------------------------------------
Data: 31 de Março 2018 - Sábado
Atividade Pūrṇimā, G, 06:01, Hasta-Śrī Balarāma Rāsa-yātrā-Śrī Kṛṣṇa   Vasanta-rāsa-Aparecimento de Śrī Vaṁśivadana Gosvāmī-Aparecimento de Śrī Śyāmānanda Prabhu
    
29.03.2018 / 23:43