#-----------------------------------------------------------------------
#                                            Prof. Dr. Walmes M. Zeviani
#                                leg.ufpr.br/~walmes · github.com/walmes
#                                        walmes@ufpr.br · @walmeszeviani
#                      Laboratory of Statistics and Geoinformation (LEG)
#                Department of Statistics · Federal University of Paraná
#                                       2019-abr-20 · Curitiba/PR/Brazil
#-----------------------------------------------------------------------

#-----------------------------------------------------------------------
# Carrega os módulos.

import os
os.getcwd()

# Instalar com `anaconda3/bin/pip install requests`
import requests as rqst
import webbrowser as wb
import json

# Tokens de acesso para algumas APIs.
with open("tokens.json") as token_file:
    tokens = json.load(token_file)
print(tokens)

#-----------------------------------------------------------------------
# Web API de terremotos.

url_doc = "https://earthquake.usgs.gov/fdsnws/event/1/"
wb.open(url_doc)

url = "https://earthquake.usgs.gov/fdsnws/event/1/count?" + \
      "format=text&" + \
      "starttime=2018-02-02T12:00:00&" + \
      "endtime=2018-02-02T13:00:00"
wb.open(url)

r = rqst.get(url)
r.text

url_count = "https://earthquake.usgs.gov/fdsnws/event/1/count?"
params = {"format": "text",
          "starttime": "2018-02-02T12:00:00",
          "endtime": "2018-02-02T13:00:00"}

r = rqst.get(url_count, params = params)
r.url
r.text

url_query = "https://earthquake.usgs.gov/fdsnws/event/1/query?"
params = {"format": "text",
          "starttime": "2018-02-02T12:00:00",
          "endtime": "2018-02-02T13:00:00"}

r = rqst.get(url_query, params = params)
r.url
print(r.text)

# Escreve e disco para poder ler os campos delimitados.
print(r.text, file = open("tb.txt", "w"))

# Cabeçalhos de requisição e resposta.
r.request.headers
r.headers

#-----------------------------------------------------------------------
# Nominatim, API do Open Street Map.

wb.open("https://wiki.openstreetmap.org/wiki/Nominatim")

url = "http://nominatim.openstreetmap.org/search?" + \
      "q=2300, Rua Brigadeiro Franco, Curitiba, BR&format=json"
wb.open(url)

r = rqst.get(url)
r.url
print(r.text)

# Cabeçalhos de requisição e resposta.
r.request.headers
r.headers

# Conversão da string JSON em dicionário Python.
apidata = json.loads(r.text)[0]
type(apidata)

# Extração das informações do dicionário.
apidata.keys()
apidata.get("lat")
apidata.get("lon")
apidata.get("display_name")

#-----------------------------------------------------------------------
# API Kiva.

wb.open("http://build.kiva.org/api")

#-----------------------------------------------------------------------
# Mais APIs. Todas elas precisam de token de acesso.

# Twitter.
wb.open("https://developer.twitter.com/en.html")

# Last FM.
wb.open("https://www.last.fm/api")

# Quandl API.
wb.open("https://www.quandl.com/docs/api")

# Free Music Archive.
wb.open("https://freemusicarchive.org/api/docs/")

# National Centers for Environmental Information.
wb.open("https://www.ncdc.noaa.gov/cdo-web/webservices")

# NASA.
wb.open("https://api.nasa.gov/")

# **--> Catálogos de APIs. <--**
wb.open("https://apilist.fun/")
wb.open("https://any-api.com/")
wb.open("https://github.com/toddmotto/public-apis")
wb.open("https://www.computersciencezone.org/50-most-useful-apis-for-developers/")

#-----------------------------------------------------------------------
# Usando APIs que precisam de tokem de acesso.

# Open Weather Map. -------------------------
wb.open("https://openweathermap.org/api")

url = "http://api.openweathermap.org/data/2.5/weather"
params = {"apiid": tokens.get("openweathermap"),
          "q": "Curitiba,PR"}
params

r = rqst.get(url, params)
r.url
print(r.text)

# The Open Movie Database. ------------------
wb.open("http://www.omdbapi.com/")

url = "http://www.omdbapi.com/"
params = {"apikey": tokens.get("omdbapi"),
          "t": "Titanic",
          "r": "json"}
params

r = rqst.get(url, params)
r.url
print(r.text)

apidata = json.loads(r.text)
apidata

apidata.get("Title")
apidata.get("Actors")
apidata.get("Released")
apidata.get("Awards")

#-----------------------------------------------------------------------
