Python_Notatki Z13
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.


HOPPSKOTCH link:

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()