<jupyter_start><jupyter_text>_El maravilloso mundo de las_ **APIs** o EL RETORNO DE JSON API: Interfaz de Programación de AplicacionesConjunto de definiciones y protocolos que se utiliza para desarrollar e integrar el software de las aplicaciones, permitiendo la comunicación entre dos aplicaciones de software a través de un conjunto de reglas. Listado de **APIs** for free: https://github.com/public-apis/public-apis<jupyter_code>import json
import requests

import pandas as pd
from pandas.io.json import json_normalize
url_s = "https://favqs.com/"
endpoint = "api/qotd"
url_w = url_s + endpoint
requests.get(url_w)
qotd = requests.get(url_w).json()
qotd
qotd["quote"]
cita = qotd["quote"]
fecha = qotd["qotd_date"][:10]
autor = cita["author"]
cita_texto = cita["body"]

print("La frase del día", fecha, "es de", autor, "y es la siguiente:\n\n" + cita_texto)<jupyter_output>La frase del día 2020-12-14 es de <NAME> y es la siguiente:

A budget tells us what we can't afford, but it doesn't keep us from buying it.<jupyter_text>API sin token **¿Qué es súper importante cuando tratamos con APIs?**Leer la documentación porque, si no lo hacemos, no sabemos como usarla. https://pokeapi.cohttps://pokeapi.co/docs/v2pokemon ------------------ Objetivo: Tener todos los nombres de pokemons junto con su url-----------------<jupyter_code>url = "https://pokeapi.co/api/v2/pokemon"
poke_json = requests.get(url).json()
poke_json                 
poke_json["next"]
# Cogemos 77 pokemons

answer = requests.get("https://pokeapi.co/api/v2/pokemon?offset=0&limit=77").json()
answer
df_pokemons = pd.DataFrame(answer)
df_pokemons
df2 = pd.DataFrame(answer["results"])
df2
l1 = [2, 4]

l2 = ["a", "b"]

l1.extend(l2)
l1
poke_json
pokemon = [] # para contener todos los resultados de la api
poke_dict = {"name":"url"}

pokemon.extend(poke_json["results"])

pokemon
%%time
pokemon_api_url = "https://pokeapi.co/api/v2/pokemon"
poke_json = requests.get(pokemon_api_url).json()
pokemon = []

# Almacenamos 40 pokemons realizando peticiones hasta que la lista de pokemons tenga 40 o más pokemons
while len(pokemon) < 40:
#while len(pokemon) < 1118:
    pokemon.extend(poke_json["results"])
    next_url = poke_json["next"]
    poke_json = requests.get(next_url).json()
print(len(pokemon))
pokemon
%%time
pokemon_api_url = "https://pokeapi.co/api/v2/pokemon"
poke_json = requests.get(pokemon_api_url).json()
pokemon = []

import time
while poke_json["next"] != None:
    pokemon.extend(poke_json["results"])
    next_url = poke_json["next"]
    poke_json = requests.get(next_url).json()
    #print(poke_json["next"])
    #time.sleep(1)
pokemon.extend(poke_json["results"])
    
print(len(pokemon))
pokemon
diccionario_pokemons_url = {}
for i, e in enumerate(pokemon):
    nombre_pokemon = pokemon[i]["name"]
    url_pokemon = pokemon[i]["url"]
    diccionario_pokemons_url[nombre_pokemon] = url_pokemon

diccionario_pokemons_url
df = pd.DataFrame(diccionario_pokemons_url, index=["url"])
df = df.T
df
# Para acceder al índice de cualquier DataFrame
print(type(df.T.index.values)
df.T.index
for nombre_pokemon, url in diccionario_pokemons_url.items():
    peticion_api_url = requests.get(url).json()
    print(nombre_pokemon)
    print(url)
    break
peticion_api_url
for nombre_pokemon, url in diccionario_pokemons_url.items():
    peticion_api_url = requests.get(url).json()
    print(nombre_pokemon)
    print(url)
    break
peticion_api_url["types"]<jupyter_output>bulbasaur
https://pokeapi.co/api/v2/pokemon/1/
{'fraction_non_alphanumeric': 0.13443935926773457, 'fraction_numerical': 0.012013729977116704, 'mean_word_length': 4.8872053872053876, 'pattern_counts': {'":': 1, '<': 10, '<?xml version=': 0, '>': 8, 'https://': 9, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '280449', 'license': 'Apache-2.0', 'n_tokens_mistral': 1369, 'n_tokens_neox': 1351, 'n_words': 304, 'path': 'week4/day4/theory/apis/api_no_token.ipynb', 'repo_name': 'JavierOlcoz/data_science_nov_2020', 'size': '3505'}