quarta-feira, 26 de fevereiro de 2020

Acessando dados de GPS da prefeitura e descobrindo sua posição pelo Google Maps

Olá, pessoal!

Hoje vou mostrar a vocês como recuperar dados de localização dos carros em circulação de uma determinada linha de ônibus do Rio de Janeiro e em seguida relacionar a posição entregues ao Google Maps para que nos retorne em qual rua eles estão localizados.

Hoje a prefeitura disponibiliza uma API para você buscar as informações sobre qualquer uma das linhas de ônibus em circulação na cidade do Rio de Janeiro. Essa API pode ser acessada pela url http://dadosabertos.rio.rj.gov.br/apiTransporte/apresentacao/rest/index.cfm/obterPosicoesDaLinha/

Um exemplo:

http://dadosabertos.rio.rj.gov.br/apiTransporte/apresentacao/rest/index.cfm/obterPosicoesDaLinha/210

que retorna as seguintes informações:

{"COLUMNS":["DATAHORA","ORDEM","LINHA","LATITUDE","LONGITUDE","VELOCIDADE"],"DATA":[["02-26-2020 08:59:25","A29080",210.0,-22.86778,-43.29127,0.0],["02-26-2020 09:43:39","A29128",210.0,-22.87821,-43.21585,9.0]]}

Para esse exemplo, temos 2 carros circulando na linha 210. As informações sobre eles são apresentadas então em uma lista com DATA/HORA da última atualização, nº de ordem, nº da linha, latitude, longitude e velocidade.

O primeiro passo então é receber em nosso aplicativo a informação de qual linha queremos consultar, isso é feito através das linhas abaixo:

linha = request.args.get('linha')uri = "http://dadosabertos.rio.rj.gov.br/apiTransporte/apresentacao/rest/index.cfm/obterPosicoesDaLinha/" + linhauResponse = requests.get(uri)Jresponse = uResponse.textdata = json.loads(Jresponse)valor = data['DATA']tamanho=len(valor)

Dessa forma conseguimos não apenas acessar a resposta, mas também contar a quantidade de itens disponibilizados

O passo seguinte é, para cada entrada presente na resposta da prefeitura, nós verificarmos qual o nome da rua onde cada carro se encontra, para isso podemos utilizar uma das APIs do Google, que é feito da seguinte maneira. Exemplo:

https://maps.googleapis.com/maps/api/geocode/json?latlng=-22.96004,-43.39588&key=[INSIRA AQUI SUA CHAVE]

Cuja resposta está abaixo:


{ "plus_code" : { "compound_code" : "2JQ3+XJ Rio de Janeiro, RJ, Brasil", "global_code" : "589R2JQ3+XJ" }, "results" : [ { "address_components" : [ { "long_name" : "47", "short_name" : "47", "types" : [ "street_number" ] }, { "long_name" : "Rua Antonio Manoel Da Silva", "short_name" : "R. Antonio Manoel Da Silva", "types" : [ "route" ] }, { "long_name" : "Curicica", "short_name" : "Curicica", "types" : [ "political", "sublocality", "sublocality_level_1" ] }, { "long_name" : "Rio de Janeiro", "short_name" : "Rio de Janeiro", "types" : [ "administrative_area_level_2", "political" ] },
Para o nosso exemplo o que nos interessa é pegar o nome completo da Rua a partir de cada ponto. Para isso precisamos usar um loop for, para extrair cada uma das coordenadas, consultar o google então extrair o nome da rua e salvar em uma variável:


latitude_bruto=str(vez[3:4])longitude_bruto=str(vez[4:5])latitude=latitude_bruto[1:-1]longitude=longitude_bruto[1:-1]ler="https://maps.googleapis.com/maps/api/geocode/json?latlng=" + latitude + "," + longitude + "&key=SUA CHAVE"resposta = requests.get(ler)Jresposta = resposta.textdata = json.loads(Jresposta)resposta_final = data['results'][0]['address_components'][1]['long_name']

O código final você encontra logo abaixo:

import os
from flask import Flask,jsonify,request
import requests
import json
app = Flask(__name__)
@app.route("/")
def home():
    linha = request.args.get('linha')
    if linha is None:
        return "Informe a linha desejada com ?linha="
    uri = "http://dadosabertos.rio.rj.gov.br/apiTransporte/apresentacao/rest/index.cfm/obterPosicoesDaLinha/" + linha
    uResponse = requests.get(uri)
    Jresponse = uResponse.text
    data = json.loads(Jresponse)
    valor = data['DATA']
    tamanho=len(valor)
    aviso = "Foram identificados " + str(tamanho) + " carros para essa linha, que estão localizados em: "
    #return aviso
    for i  in range(tamanho):
        vez=valor[i]
        latitude_bruto=str(vez[3:4])
        longitude_bruto=str(vez[4:5])
        latitude=latitude_bruto[1:-1]
        longitude=longitude_bruto[1:-1]
        ler="https://maps.googleapis.com/maps/api/geocode/json?latlng=" + latitude + "," + longitude + "&key=[INSIRA AQUI SUA CHAVE]"
        resposta = requests.get(ler)
        Jresposta = resposta.text
        data = json.loads(Jresposta)
        if i < tamanho-2:
            resposta_final = data['results'][0]['address_components'][1]['long_name'] + ", "
        elif i < tamanho-1:
            resposta_final = data['results'][0]['address_components'][1]['long_name'] + " e "   
        else:
            resposta_final = data['results'][0]['address_components'][1]['long_name']
        aviso = aviso + resposta_final
    return aviso
if __name__ == "__main__":
    port = int(os.environ.get("PORT", 5000))
    app.run(host='0.0.0.0', port=port)



quarta-feira, 12 de fevereiro de 2020

Python: gerando feed rss a partir de um arquivo txt

Olá, pessoal!
Hoje eu apresento para vocês um código simples em python + flask para que vocês possam criar um web app que gere um rss feed a partir de um arquivo txt. Indo direto ao ponto, o código está logo abaixo:

import os
from flask import Flask, jsonify, request, make_response, Response
from rfeed import *
import random
import datetime
import codecs
app = Flask(__name__)
@app.route('/')
def frases():
    random.randrange(0,23)
    arquivo = codecs.open("frases.txt", "r", encoding='utf-8')
    palavras = []
    for linha in arquivo:
        linha = linha.strip()
        palavras.append(linha)
    arquivo.close()
    numero = random.randrange(0, len(palavras))
    escolha = palavras[numero].upper()
    # Define o item do feed
    item1 = Item(
        title=escolha,
        link = "http://www.kalirio.com.br",
        description=escolha,
        author = "contato@kalirio.com.br",
        guid = Guid("http://www.kalirio.com.br"),
        pubDate = datetime.datetime.now())
    feed  = Feed(
        title = "Frases de Bruce Lee",
        link="https://www.kalirio.com.br",
        description="Frases de Bruce Lee",
        language="pt-BR",
        lastBuildDate = datetime.datetime.now(),
        items = [item1]
    )
    ##return feed.rss()
    return Response(feed.rss(), mimetype='text/xml')

if __name__ == "__main__":
    port = int(os.environ.get("PORT", 5000))
    app.run(host='0.0.0.0', port=port)

Eu escrevi esse programa com um objetivo simples: gerar um feed rss com apenas 1 frase de Bruce Lee que seria escolhida aleatoriamente a partir um arquivo com 24 frases. Entendendo o arquivo:

O primeiro passo é abrir o arquivo com as frases

random.randrange(0,23)
    arquivo = codecs.open("frases.txt", "r", encoding='utf-8')
    palavras = []
    for linha in arquivo:
        linha = linha.strip()
        palavras.append(linha)
    arquivo.close()
Em seguida eu escolho um número aleatório e seleciono qual a frase da vez:

numero = random.randrange(0, len(palavras))
    escolha = palavras[numero].upper()

O passo seguinte é adicionar as características do feed com a frase escolhida

 # Define o item do feed
    item1 = Item(
        title=escolha,
        link = "http://www.kalirio.com.br",
        description=escolha,
        author = "contato@kalirio.com.br",
        guid = Guid("http://www.kalirio.com.br"),
        pubDate = datetime.datetime.now())
    feed  = Feed(
        title = "Frases de Bruce Lee",
        link="https://www.kalirio.com.br",
        description="Frases de Bruce Lee",
        language="pt-BR",
        lastBuildDate = datetime.datetime.now(),
        items = [item1]

O último passo é especificar a saída do app:

return Response(feed.rss(), mimetype='text/xml')

Caso vocês queiram adaptar esse arquivo para fazer o deploy no Heroku, não se esqueçam de adicionar o arquivo Procfile

web: python rss.py

E o arquivo Pipfile

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true

[packages]
Flask = "*"
rfeed = "*"
[requires]
python_version = "3.6"



quinta-feira, 2 de janeiro de 2020

Echo Dot Challenge Brasil


Echo Dot Challenge Brasil: não deu para chegar nos 400 usuários únicos, mas ainda assim foi muito legal a oportunidade de participar do programa de incentivo ao lançamento do Alexa Skill Set no Brasil! Ainda assim fica a dica, se você tem interesse em artes marciais habilite a skill do Arte Filipina hoje mesmo! hashtagechodotchallenge hashtagalexa

sábado, 30 de novembro de 2019

Redes e Segurança Aplicada


Último encontro da disciplina de "Redes e Segurança Aplicada" para a turma da pós graduação em Gestão Eletrônica de Documentos na UNISUAM hashtagturmanota10

sábado, 5 de outubro de 2019

Sistemas de Análise de Vulnerabilidades e Testes de Invasão


Hoje encerrei a disciplina "Sistemas de Análise de Vulnerabilidades e Testes de Invasão" no curso de pós graduação em Segurança da Informação da UNISUAM. Agradeço a todos os alunos que participaram, pois nos últimos dias trocamos experiências e informações que nos ajudarão em nosso desafio diário de mantermos nossas empresas mais seguras. Agora vamos que vamos rumo aos próximos desafios!

quinta-feira, 3 de outubro de 2019

Webinar sobre fraudes na internet


Muito bacana a oportunidade de participar do webinar promovido pela Unisuam para falar um pouco sobre Fraudes Cometidas na Internet. Para quem não assistiu, é só acessar a página da Unisuam no Facebook ou direto pelo link: https://web.facebook.com/UNISUAM/videos/372026400417982/
#MuitoMaisUNISUAM #PósUNISUAM #posunisuam #segurançadainformação #networksecurity #SouUNISUAM #unisuam

sábado, 24 de agosto de 2019

UNISUAM: Tópicos Avançados de Segurança


Hoje encerrei a matéria de "Tópicos Avançados de Segurança" na UNISUAM, onde tive a oportunidade de compartilhar informações sobre alguns dos temas mais atuais e relevantes para o profissional de Segurança da Informação como cultura ágil, DevSecOps, Marco Civil, LGPD, etc. Foi ótima a experiência de ter ministrado esse conteúdo para essa turma cheia de potencial! Boa sorte a todos e até a próxima! hashtagvidadeprofessor hashtagseginfo hashtagsouunisuam

quarta-feira, 1 de maio de 2019

SOM – The SAM Optimization Model


O Modelo de Otimização do SAM (SOM) é uma estrutura de avaliação objetiva do SAM desenvolvida pela Microsoft. O SOM fornece um conjunto de critérios para ajudar a fazer avaliações e recomendações do SAM uniformes, cuja análise se baseia em 10 competências principais e cada uma delas é avaliada em quatro níveis de maturidade diferentes, que estão demonstrados na figura acima.
Entre os itens verificados pelo SAM temos: gerenciamento organizacional, processos de inventário, processos de verificação de licenças, interfaces de gerenciamento de operações, interfaces de processos do ciclo de vida entre outros.
Para saber mais sobre o SOM, eu recomendo fortemente você ler a brochura disponibilizada gratuitamente pela Microsoft nesse link.

sexta-feira, 26 de abril de 2019

Transformação Digital & Cultura Ágil no CEFET-RJ


Me sinto honrado em ter participado da Semana em Comemoração dos 60 anos do curso de Eletrônica do CEFET RJ, onde tive a oportunidade de palestrar sobre o tema “Transformação Digital e Cultura Ágil”. É gratificante compartilhar com a próxima geração de técnicos os desafios do mundo VUCA que temos à frente.
Nas últimas décadas, nós acompanhamos uma evolução tecnológica sem precedentes na história humana. Passamos de sistemas óbvios, para os sistemas complicados até chegarmos aos sistemas complexos. Essa evolução mudou os hábitos de consumo das pessoas e consequentemente das empresas. Dessa forma a transformação digital surge como é um processo no qual essas empresas buscam fazer uso da tecnologia para melhorar o desempenho, aumentar o alcance dos seus produtos ou serviços e as práticas ágeis surgem como uma forma de garantir esses resultados.
Nessa palestra apresentei o histórico e implicações da transformação digital para empresas e trabalhadores, ainda ofereci algumas dicas de como os atuais estudantes e futuros profissionais podem tirar benefício dela.

terça-feira, 23 de abril de 2019

1ª Semana de Eletrônica – CEFET RJ


Acontece nos próximos dias 24, 25 e 26 a 1ª Semana de Eletrônica do CEFET-RJ, em homenagem aos 60 anos da criação do curso técnico de eletrônica da instituição. Com alegria que eu compartilho com vocês que estarei participando do evento, com a palestra “Transformação Digital e Métodos Ágeis” no próximo dia 26 as 9h.