Program to pick up on a web page events

Asked

Viewed 153 times

1

source code here too: https://pastebin.com/DesqWJfY

Objective: to catch events in http://www.bhaktiyogapura.com/2018/03/calendario-vaisnava-marco-2018/

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

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

Since I can’t pick up the page directly (I can’t do it), I copy and paste in Calendar.txt, then run my script.

The script sends by email and posts on facebook

What’s left: I’d like to take it straight from the URL without having to stick to Calendar.txt

I would also like, if possible, to post the events in a Whatsapp or Telegram group. It is possible?

# -- coding: utf-8 --

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]
  • 1

    I advise you to use the beautifulsoup and the way the site is structured should capture the div the_content_wrapper and then make a loop of each elephant <p> and separate them case <p> only have as content &nbsp; See this link

  • @lazyFox: could you post an example? I’m pretty bad at programming. The above code was built collaboratively!

  • Right now I’m leaving the company for my extended weekend :). But it is something relatively simple friend, follow the link I sent and do tests and put here the new questions. However some Python guru will also appear that can help you with the algorithm.

  • @lazyFox: thank you very much!

  • To get the url (it’s illogical because you’re already requesting that url), you can do: https://repl.it/repls/ScrawnyInferiorOrganization

1 answer

3

Hello...

The implementation to handle the page may be roughly the following (following what was suggested by @lazyFox). No for you will have to do the treatments because on the page the calendar is simply a bunch 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 little, with the separation of 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 be 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
  • The event line that interests me always starts with a"-" . How to print only this line? Using the in operator?

  • vc can use: if line.text.startswith("-"):

  • what difference to make if "-" in line ?

  • Only that you printed the events without the dates -> https://pastebin.com/3fX92ibr

  • I’ll edit here...

Browser other questions tagged

You are not signed in. Login or sign up in order to post.