Python_Notatki Z13

Python_Notatki Z13
Photo by Zhen H / Unsplash

Zaczynamy od pisania apki z grą Zgadnij Liczbę w streamlit:

API - komunikacja pomiędzy aplikacjami i stronami www.

REST — podejście do tworzenia API

Hoppscotch — ułatwia komunikowanie się z restowymi API. Tu można potestować API i wygenerować kod do Python requests.

REST — to nie standard, to jest tylko zestaw luźnych wytycznych. Są elastyczne, można dopasować do potrzeb konkretnego użytkownika/developera tego API i danych na stronie lub w appce.

Tak są zbudowane adresy w przeglądarce:

Dodatkowe parametry podawane są po ? (queries)

Zaczynamy zapytanie strony/serwera z "?", kolejne parametry w zapytaniu przekazywane po "&"

W większości REST API komunikują się za pomocą json, ale nie zawsze.

Jeżeli jest API, to powinna być dokumentacja do API.

Możemy zrobić tylko to, co przewidział dostawca danych (developer API).

Swagger — interaktywna dokumentacja, gdzie można od razu wygenerować kod/ URL z zapytaniem oraz zobaczyć jakie dane dostaniemy:

Swagger — rodzaj "interaktywnej" dokumentacji, a nie tekstowej. Czasem jest tylko tekstowa, czasem mieszana, czasem w ogóle słaba.

Hoppscotch • Open source API development ecosystem
Helps you create requests faster, saving precious time on development.

Hoppskotch — testowanie API

Jak wygląda Hoppskotch:

struktura i interfejs:

Play 😄

auth - no, API nie wymaga uwierzytelnienia.

python requests — biblioteka obsługująca zapytania do API w python. Jedna z możliwych, popularna.

Ostatnio coraz więcej używana biblioteka HTTPX, zamiast Requests. Ale requests dalej jest często używane:

Tu już korzystamy z API Open Meteo do pobierania aktualnej pogody.

Zadanie domowe: odpytać jakieś API i te dane wyświetlić z wykorzystaniem streamlit'a, użyj hoppskotch'a do parametrów i requests kodu:

Kod do komunikacji z Notion i zapisywania do tablicy danych podawanych przez input w streamlit. Jest niedokończona:

from notion_client import Client 
from pprint import pprint
import streamlit as st

notion_token = "ntn_Z47643869708Z6UZFfNETK177MH74P4znqU3aajfilI9Qg"
notion_page_id = "14b11bfac69a8024a108ff76fcf7280d"
# 14b11bfac69a8024a108ff76fcf7280d

def write_text(client, page_id: str, text: str, type: str):
    client.blocks.children.append(
        block_id = page_id,
        children=[
		{
			"object": "block",
			"type": type,
			type: {
                "rich_text": [{"type": "text","text": {"content": text}}],
			}
		},]
        )
    
# https://www.notion.so/python_qr_list-14b11bfac69a8024a108ff76fcf7280d?pvs=4#14b11bfac69a80e59392e154c5547114

def write_to_table(client, page_id, name_text, link_text, qr_file_name):
    client.blocks.children.append(
        object= "block",
	    block_id= "14b11bfac69a80e59392e154c5547114",
    	parent= {
	    	"type": "page_id",
	    	"page_id": page_id,
	        },
        children=[
		{
			"object": "block",
			"type": "table_row",
			"table_row": {
                "cells": [
                    [{
                        "type": "text",
                        "text": {
                        "content": name_text}
                    }],
                    [{
                        "type": "text",
                        "text": {
                        "content": link_text}
                    }],
                    [{
                        "type": "text",
                        "text": {
                        "content": qr_file_name}
                    }],
                ]

			}
		}]
        )

def main():
    client = Client(auth=notion_token)
    
    page_response = client.pages.retrieve(notion_page_id)
    
    pprint(page_response)
    
    # write_text(client, notion_page_id, "Hello World!", type="heading_3")
    name_text_instance = "Sample Page Name"
    link_text_instance = "https://www.youtube.com/watch?v=M1gu9MDucMA&ab_channel=PatrickLoeber"
    qr_file_name_instance = "Bricks_E_Diff_03.jpg"
    write_to_table(client, notion_page_id, name_text_strml, link_text_strml, qr_file_name_strml)
    
    
st.write("# To jest appka do zapisywania info o wygenerowanych QR kodach do tabeli Notion")
name_text_strml = st.text_input(label = "Wpisz tytuł strony: ")
link_text_strml = st.text_input(label = "Wpisz link do strony: ")
qr_file_name_strml = st.text_input(label = "Wpisz nazwę pliku z QR kodem: ")
    
if __name__ == "__main__":
    main()

Co robimy tu?

if __name__ == "__main__":
    main()