IlmHamroh
Data Science va sun'iy intellekt/Malumot yigish7/12-dars17 daqiqa
Mundarija (22)

7.7-dars: API asoslari

7-QISM — MA'LUMOT YIG'ISH · 7-dars


1. Kirish va motivatsiya

Ko'p ma'lumot jonli (real-time) va veb-xizmatlar orqali tarqatiladi: ob-havo, valyuta kursi, aksiya narxlari, ijtimoiy media, xaritalar. Bu ma'lumotni olishning rasmiy usuli — API (Application Programming Interface): dastur bilan gaplashadigan interfeys. Web scraping 7.9-bob o'rniga API afzal (rasmiy, ruxsat berilgan, tuzilgan). Python'da API'ga so'rov yuborishning standart kutubxonasi — requests. Bu darsda: requests.get (so'rov), HTTP asoslari (status kod — 200 OK, 404 topilmadi), JSON javob (.json()), so'rov parametrlari (params), va autentifikatsiya (API kaliti). Nega muhim? (1) Jonli — real-time ma'lumot (ob-havo, valyuta); (2) Rasmiy — API (scraping'dan afzal); (3) Standart — requests + JSON. Bu dars API asoslarini o'rgatadi — veb-xizmatdan ma'lumot.

API asoslari (Application Programming Interface) — veb-xizmatdan: requests.get(url) (so'rov yuborish), HTTP (status kod — 200 OK, 404 topilmadi, 401 ruxsat yo'q), JSON javob (.json() — javobni obyektga; 7.3), params= (so'rov parametrlari — ?shahar=Toshkent), autentifikatsiya (API kalit — headers/params), raise_for_status (xato tekshir). Foydalanish: jonli ma'lumot olish (ob-havo, valyuta), rasmiy manba. Bu 7.1 (manbalar), 7.3 (JSON), 7.9 (scraping — API afzal) bilan bog'liq. API asoslari — veb-xizmatdan (requests, JSON). API. requests.

Real vaziyat. Data Scientist O'zbekiston valyuta kursini (jonli) olmoqchi. API: Markaziy bank API'si (https://cbu.uz/.../json/). So'rov: requests.get(url) → javob (response); response.status_code (200 — OK), response.json() (JSON → Python ro'yxat — valyutalar). Parametr: aynan valyuta — requests.get(url, params={"code": "USD"}). Autentifikatsiya: ba'zi API — kalit (headers={"Authorization": "Bearer KALIT"}). Data Scientist requests bilan so'rov yubordi, status tekshirdi (200), JSON oldi (valyuta kursi). API asoslari — jonli ma'lumot.

Bu darsda API asoslarini o'rganamiz.

Bu darsda:

  • requests.get (so'rov)
  • Status kod va JSON (200, .json())
  • So'rov parametrlari (params)
  • Autentifikatsiya (API kalit)
  • Xato boshqarish (raise_for_status)
  • API amaliyoti
  • API tuzoqlari
  • Amaliy: API so'rov

ℹ Misollar mock (soxta) javob bilan deterministik (real tarmoq — bu muhitda ishlamaydi/nobarqaror).


2. Nazariya — chuqur tushuntirish

2.1. requests.get (so'rov)

So'rov yuborish:

python
import requests

# GET so'rov — ma'lumot olish
response = requests.get("https://api.example.com/data")

# javob obyekti
response.status_code    # HTTP status (200 OK)
response.text           # matn (xom)
response.json()         # JSON → Python obyekt

# timeout (kutish chegarasi — muhim)
response = requests.get(url, timeout=10)

requests.get (so'rov) — ma'lumot olish: requests.get(url) — GET so'rov (ma'lumot olish; POST — yuborish); response (javob obyekti): .status_code (HTTP status — 200 OK), .text (xom matn), .json() (JSON → Python obyekt), .headers (javob sarlavhalari); timeout=10 (kutish chegarasi — muhim; javob kelmasa — cheksiz kutmasin). Sabab: API bilan (so'rov → javob; HTTP protokol); requests — standart (oddiy, kuchli); timeout (javob kelmasa — dastur qotib qolmasin). get (olish), response (javob), .json() (JSON), timeout (kutish). requests.get — so'rov (javob; timeout). requests. get.

2.2. Status kod va JSON (200, .json())

Javob holati va ma'lumot:

python
import requests

response = requests.get(url)

# status kod (HTTP holati)
# 200 — OK (muvaffaqiyat)
# 404 — topilmadi
# 401 — ruxsat yo'q (autentifikatsiya)
# 429 — juda ko'p so'rov (rate limit)
# 500 — server xatosi
if response.status_code == 200:
    data = response.json()   # JSON → Python

Status kod va JSON (200, .json()) — javob holati: response.status_code (HTTP status — javob holati): 200 (OK — muvaffaqiyat), 404 (topilmadi — noto'g'ri URL), 401 (ruxsat yo'q — autentifikatsiya), 403 (taqiqlangan), 429 (juda ko'p so'rov — rate limit), 500 (server xatosi); .json() (javob JSON → Python obyekt — 7.3; agar JSON bo'lsa). Sabab: status tekshir (200 — OK; boshqa — xato; ko'r-ko'rona .json() — xato javobda buziladi); .json() (API odatda JSON qaytaradi — 7.3 parse). 200 (OK), 404/401/429/500 (xato), .json() (ma'lumot). Status/JSON — status_code (200) / .json(). Status. 200.

2.3. So'rov parametrlari (params)

So'rov parametrlari (params) — so'rovni moslash: requests.get(url, params={"shahar": "Toshkent", "yil": 2024}) — so'rov parametrlari (URL'ga ?shahar=Toshkent&yil=2024 qo'shiladi); API filtr/moslash (qaysi ma'lumot — shahar, sana, cheklov). Sabab: aynan kerak (API — parametr bilan; barcha emas — filtr; sahifalash — page); params (dict — avtomatik URL'ga; qochirish — bo'shliq/maxsus belgi); "so'rovni moslash" (parametr — kerak ma'lumot). params (dict — so'rov moslash), URL (?a=1&b=2), filtr/sahifa (kerak ma'lumot). So'rov parametrlari — params (moslash). params. Filtr.

2.4. Autentifikatsiya (API kalit)

Autentifikatsiya (API kalit) — kim so'rayapti: ko'p API kalit talab qiladi (kim — hisob, cheklov, to'lov); usullar: headers (headers={"Authorization": "Bearer KALIT"} — eng ko'p), params (params={"api_key": "KALIT"} — ba'zi API), auth (auth=("user", "parol") — asosiy). Sabab: kim/ruxsat (API — kalit bilan; bepul cheklov, pulli; suistemol oldini olish); kalit maxfiy (kodda emas — .env/muhit o'zgaruvchisi; git'ga qo'yma — xavfsizlik). headers (Bearer — token), params (api_key), maxfiy (.env — git emas). Autentifikatsiya — kalit (headers/params; maxfiy). Kalit. Maxfiy.

2.5. Xato boshqarish (raise_for_status)

Xato boshqarish (raise_for_status) — ishonchlilik: response.raise_for_status() (xato status (4xx/5xx) — istisno ko'taradi; 200 — davom), try/except (requests.exceptions.RequestException — tarmoq/timeout xatosi), qayta urinish (retry — vaqtincha xato; kutib qayta). Sabab: API ishonchsiz (tarmoq uzilish, timeout, server xatosi, rate limit); tekshir (status — 200?; raise_for_status); qayta urinish (429/500 — vaqtincha; kutib qayta; time.sleep). raise_for_status (xato — istisno), try/except (tarmoq), retry (vaqtincha). Xato boshqarish — raise_for_status/try (ishonchlilik). Xato. Retry.

2.6. API amaliyoti

API amaliyoti: hujjat (API hujjatini o'qi — URL, parametr, autentifikatsiya, javob format, rate limit); so'rov (requests.get(url, params=, headers=, timeout=)); status tekshir (raise_for_status yoki status_code == 200); JSON (.json() — 7.3; json_normalize ierarxik); kalit maxfiy (.env — git emas); rate limit (hurmat — kutib; ortiqcha so'rov yo'q); xato (try/except, retry); DataFrame (JSON → pd.DataFrame/json_normalize). Tuzoqlar: status tekshirmas (xato .json()), timeout yo'q (qotish), kalit kodda (xavfsizlik), rate limit (bloklash), JSON faraz (matn/xato). Amaliyot — hujjat, so'rov, status, JSON. API. requests.

2.7. API tuzoqlari

API asosiy tuzoqlari: status tekshirmaslik (.json() to'g'ridan (status ko'rmay) — xato javob (404/500 — HTML/matn; JSON emas) → buziladi; raise_for_status/status_code == 200 avval); timeout yo'q (requests.get(url) — javob kelmasa cheksiz kutadi (dastur qotadi); timeout=10); kalit kodda (API kalit kodda/git'da (api_key = "abc123") — xavfsizlik (o'g'irlash, suistemol); .env/muhit o'zgaruvchisi (os.environ); git'ga qo'yma — .gitignore); rate limit (API — so'rov soni cheklov (429; daqiqaga N); ko'p so'rov → bloklash; kutib (time.sleep), hurmat); JSON faraz (.json() — javob JSON emas (HTML, matn, bo'sh) → xato; Content-Type tekshir yoki try); sahifalash (API — sahifa (bir so'rovda N; page/offset; barcha — sikl bilan)); hujjat o'qimas (API turli (URL, parametr, format, kalit); hujjat o'qi — taxmin emas); retry yo'q (vaqtincha xato (429/500/timeout) — qayta urinish (kutib; exponential backoff)); maxfiylik (API ma'lumot — shaxsiy? litsenziya? — 7.11); so'rov turi (GET olish; POST yuborish/yaratish — mos ishlat). Sabab: API status/xavfsizlik/cheklov nozik (status, timeout, kalit, rate limit — xato yoki bloklash). Yechim: status tekshir, timeout, kalit .env, rate limit hurmat, JSON try. Tuzoqlar — status, timeout, kalit, rate limit.

2.8. API asoslari — veb-xizmatdan jonli ma'lumot

API asosiy g'oyasi — veb-xizmatdan jonli ma'lumot: ko'p ma'lumot jonli (real-time — ob-havo, valyuta, aksiya) va veb-xizmat orqali; API (rasmiy interfeys — dastur bilan; scraping'dan afzal — rasmiy, ruxsat, tuzilgan; 7.1). requests.get(url, params=, headers=, timeout=) (so'rov), HTTP status (.status_code — 200 OK, 404 topilmadi, 401 ruxsat yo'q, 429 rate limit, 500 server), JSON javob (.json() — 7.3; json_normalize ierarxik), params (so'rov moslash — filtr/sahifa), autentifikatsiya (API kalit — headers Bearer; maxfiy .env), xato boshqarish (raise_for_status, try/except, retry). Foydalanish: jonli ma'lumot olish (ob-havo, valyuta — real-time), rasmiy manba (scraping'dan afzal). Tuzoqlar: status tekshirmas (xato .json()), timeout yo'q (qotish), kalit kodda (.env — xavfsizlik), rate limit (bloklash — hurmat), JSON faraz (try), sahifalash, hujjat o'qi. Bu 7.1 (manbalar — rasmiy), 7.3 (JSON), 7.9 (scraping — API afzal), 7.11 (etika — maxfiylik) bilan. API asoslari — veb-xizmatdan jonli ma'lumot (requests, JSON, status). API. requests. Jonli.


3. Tez ma'lumotnoma

python
import requests

# GET SO'ROV (timeout MUHIM):
response = requests.get(
    "https://api.example.com/data",
    params={"shahar": "Toshkent", "yil": 2024},   # so'rov parametrlari
    headers={"Authorization": "Bearer KALIT"},     # autentifikatsiya
    timeout=10)                                     # kutish chegarasi

# STATUS TEKSHIRISH (avval):
response.raise_for_status()          # xato (4xx/5xx) → istisno
# yoki: if response.status_code == 200:

# JSON JAVOB:
data = response.json()               # JSON → Python (7.3)
df = pd.json_normalize(data)         # ierarxik → DataFrame

# STATUS KODLAR: 200 OK · 404 topilmadi · 401 ruxsat · 429 rate limit · 500 server

# KALIT MAXFIY (git'ga qo'yma):
import os
kalit = os.environ["API_KEY"]        # .env / muhit o'zgaruvchisi

# XATO BOSHQARISH:
try:
    r = requests.get(url, timeout=10)
    r.raise_for_status()
except requests.exceptions.RequestException as e:
    print("xato:", e)

QOIDA: status tekshir · timeout · kalit .env · rate limit hurmat · hujjat o'qi

API asoslari xulosasi

API asoslari — veb-xizmatdan jonli ma'lumot (requests)
requests.get — so'rov (params, headers, timeout)
Status kod — 200 OK, 404, 401, 429 (rate limit), 500
JSON javob — .json() (7.3; json_normalize ierarxik)
Autentifikatsiya — API kalit (headers Bearer; maxfiy .env)

4. Batafsil misollar

Misollar mock (soxta) javob bilan deterministik.

Misol 1 — So'rov va status (mock)

python
"""API so'rov va status (mock javob)."""

import json


class MockResponse:
    """Soxta HTTP javob (real requests.get o'rniga — deterministik)."""
    def __init__(self, status_code, data):
        self.status_code = status_code
        self._data = data

    def json(self):
        return self._data

    def raise_for_status(self):
        if self.status_code >= 400:
            raise Exception(f"HTTP {self.status_code}")


def main() -> None:
    # real: response = requests.get(url, timeout=10)
    response = MockResponse(200, {"shahar": "Toshkent", "harorat": 25})

    print("=== 1. Status kod ===")
    print(f"  status: {response.status_code} (200 — OK)")

    print("\n=== 2. Status tekshirish ===")
    if response.status_code == 200:
        data = response.json()
        print(f"  ma'lumot: {data}")

    print("\n=== 3. JSON javob ===")
    print(f"  harorat: {response.json()['harorat']}")

    print("\n=== 4. Xato status (mock 404) ===")
    xato = MockResponse(404, {})
    print(f"  status: {xato.status_code} (404 — topilmadi)")
    print("  ⭐ requests.get — so'rov + status")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Status kod ===
  status: 200 (200 — OK)

=== 2. Status tekshirish ===
  ma'lumot: {'shahar': 'Toshkent', 'harorat': 25}

=== 3. JSON javob ===
  harorat: 25

=== 4. Xato status (mock 404) ===
  status: 404 (404 — topilmadi)
  ⭐ requests.get — so'rov + status

Nima ko'rsatdi: 2.1, 2.2-bo'limlar.

Misol 2 — Status kodlar

python
"""Status kodlar (real Python)."""


def status_ma_no(kod):
    """HTTP status kodi ma'nosi."""
    xarita = {
        200: "OK (muvaffaqiyat)",
        404: "topilmadi (noto'g'ri URL)",
        401: "ruxsat yo'q (autentifikatsiya)",
        429: "juda ko'p so'rov (rate limit)",
        500: "server xatosi",
    }
    return xarita.get(kod, "noma'lum")


def main() -> None:
    print("=== 1. 200 (muvaffaqiyat) ===")
    print(f"  {status_ma_no(200)}")

    print("\n=== 2. 404 va 401 ===")
    print(f"  404: {status_ma_no(404)}")
    print(f"  401: {status_ma_no(401)}")

    print("\n=== 3. 429 (rate limit) ===")
    print(f"  {status_ma_no(429)}")

    print("\n=== 4. Guruhlar ===")
    print("  2xx — muvaffaqiyat; 4xx — mijoz xatosi; 5xx — server")
    print("  ⭐ Status kod — javob holati")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. 200 (muvaffaqiyat) ===
  OK (muvaffaqiyat)

=== 2. 404 va 401 ===
  404: topilmadi (noto'g'ri URL)
  401: ruxsat yo'q (autentifikatsiya)

=== 3. 429 (rate limit) ===
  juda ko'p so'rov (rate limit)

=== 4. Guruhlar ===
  2xx — muvaffaqiyat; 4xx — mijoz xatosi; 5xx — server
  ⭐ Status kod — javob holati

Nima ko'rsatdi: 2.2-bo'lim.

Misol 3 — Parametr va URL

python
"""So'rov parametrlari (real urllib)."""

from urllib.parse import urlencode


def main() -> None:
    print("=== 1. params → URL ===")
    params = {"shahar": "Toshkent", "yil": 2024}
    query = urlencode(params)
    print(f"  URL: https://api.example.com/data?{query}")

    print("\n=== 2. Filtr (kerak ma'lumot) ===")
    print("  params — API filtr (barcha emas)")

    print("\n=== 3. Maxsus belgi (qochirish) ===")
    p2 = {"nom": "uy narxi"}
    print(f"  qochirilgan: {urlencode(p2)}")
    print("  (bo'shliq → +; avtomatik qochirish)")

    print("\n=== 4. Sahifalash ===")
    p3 = {"page": 2, "limit": 50}
    print(f"  {urlencode(p3)}")
    print("  ⭐ params — so'rovni moslash")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. params → URL ===
  URL: https://api.example.com/data?shahar=Toshkent&yil=2024

=== 2. Filtr (kerak ma'lumot) ===
  params — API filtr (barcha emas)

=== 3. Maxsus belgi (qochirish) ===
  qochirilgan: nom=uy+narxi
  (bo'shliq → +; avtomatik qochirish)

=== 4. Sahifalash ===
  page=2&limit=50
  ⭐ params — so'rovni moslash

Nima ko'rsatdi: 2.3-bo'lim.

Misol 4 — JSON javobni DataFrame'ga

python
"""API JSON → DataFrame (mock/pandas)."""

import pandas as pd


class MockResponse:
    def __init__(self, data):
        self.status_code = 200
        self._data = data

    def json(self):
        return self._data


def main() -> None:
    # mock API javob (valyuta kurslari)
    javob = [
        {"code": "USD", "rate": 12650, "date": "2024-06-01"},
        {"code": "EUR", "rate": 13720, "date": "2024-06-01"},
        {"code": "RUB", "rate": 142, "date": "2024-06-01"},
    ]
    response = MockResponse(javob)

    print("=== 1. Status va JSON ===")
    if response.status_code == 200:
        data = response.json()
        print(f"  yozuvlar: {len(data)}")

    print("\n=== 2. JSON → DataFrame ===")
    df = pd.json_normalize(data)
    print(f"  ustunlar: {list(df.columns)}")

    print("\n=== 3. Tahlil ===")
    print(f"  USD kurs: {df[df['code'] == 'USD']['rate'].values[0]}")

    print("\n=== 4. Endi pandas ===")
    print(f"  eng qimmat: {df.loc[df['rate'].idxmax(), 'code']}")
    print("  ⭐ API JSON → DataFrame (tahlil)")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Status va JSON ===
  yozuvlar: 3

=== 2. JSON → DataFrame ===
  ustunlar: ['code', 'rate', 'date']

=== 3. Tahlil ===
  USD kurs: 12650

=== 4. Endi pandas ===
  eng qimmat: EUR
  ⭐ API JSON → DataFrame (tahlil)

Nima ko'rsatdi: 2.6-bo'lim.


5. To'g'ri va noto'g'ri tushunishlar

Noto'g'ri fikr To'g'risi
"darhol .json()" Status tekshir (avval)
"timeout kerakmas" Qotish (timeout=10)
"kalit kodda OK" Maxfiy (.env, git emas)
"ko'p so'rov OK" Rate limit (bloklash)
"javob doim JSON" Tekshir (HTML/matn)
"scraping = API" API afzal (rasmiy)
"bir so'rov = barcha" Sahifalash (page)
"hujjatsiz so'rov" Hujjat o'qi (API turli)

6. Keng tarqalgan xatolar va yechimlari

1. Status tekshirmaslik

python
data = requests.get(url).json()   # 404 → xato (HTML)             # ⚠️
r = requests.get(url); r.raise_for_status(); data = r.json()     # ✅

2. Timeout yo'q

python
requests.get(url)   # javob kelmasa — cheksiz kutish              # ⚠️
requests.get(url, timeout=10)   # kutish chegarasi               # ✅

3. Kalit kodda

python
kalit = "abc123secret"   # kodda/git (xavfsizlik)                 # ⚠️
kalit = os.environ["API_KEY"]   # .env (git emas)                # ✅

4. Rate limit

python
for i in range(10000): requests.get(url)   # 429 (bloklash)       # ⚠️
time.sleep(1)   # kutib (rate limit hurmat)                      # ✅

5. JSON faraz

python
requests.get(url).json()   # javob HTML → xato                    # ⚠️
try: data = r.json()  except: ...   # tekshir                    # ✅

6. Sahifalash

python
requests.get(url).json()   # faqat 1-sahifa (100 yozuv)           # ⚠️
# page/offset bilan sikl (barcha)                                 # ✅

7. POST vs GET

python
requests.get(url, data=payload)   # yaratish — GET emas           # ⚠️
requests.post(url, json=payload)   # yaratish — POST             # ✅

7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 7.1-dars (o'tilgan): Manbalar (API rasmiy)
  • 7.3-dars (o'tilgan): JSON (javob)
  • 7.8-dars: JSON parse (chuqurroq)
  • 7.9-dars: Web scraping (API afzal)
  • 7.11-dars: Etika (maxfiylik)

8. Eng yaxshi amaliyotlar

  1. timeout — har so'rov (qotish).

  2. Status tekshir — raise_for_status.

  3. Kalit — .env (git emas).

  4. Rate limit — hurmat (sleep).

  5. JSON — try/tekshir.

  6. params — filtr/moslash.

  7. Hujjat — o'qi (API turli).

  8. Retry — vaqtincha xato (backoff).


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
1.  # API nima?
2.  # requests.get?
3.  # status 200?
4.  # status 404?
5.  # status 429?
6.  # .json()?
7.  # params nima?
8.  # autentifikatsiya?
9.  # timeout nega?
10. # kalit qayerda?
11. # rate limit?
12. # nega API (scraping emas)?
Javoblar
  1. Dastur interfeysi (veb-xizmat)
  2. GET so'rov (ma'lumot olish)
  3. OK (muvaffaqiyat)
  4. Topilmadi
  5. Rate limit (ko'p so'rov)
  6. JSON → Python obyekt
  7. So'rov parametrlari (filtr)
  8. API kalit (kim)
  9. Qotish (javob kelmasa)
  10. .env (git emas — maxfiy)
  11. So'rov soni cheklov (bloklash)
  12. Rasmiy (ruxsat, tuzilgan)

Vazifa 2: Xatolarni tuzating

python
1.  requests.get(url).json()   # status

2.  requests.get(url)   # timeout

3.  kalit = "abc123"

4.  for i in range(10000): requests.get(url)

5.  requests.get(url, data=payload)   # yaratish
Javoblar
python
1.  raise_for_status() avval

2.  timeout=10

3.  os.environ["API_KEY"]

4.  time.sleep (rate limit)

5.  requests.post(url, json=payload)

Vazifa 3: So'rov

Modellang:

  1. requests.get
  2. timeout
  3. params
  4. headers

Vazifa 4: Status va JSON

Modellang:

  1. status_code
  2. 200/404/429
  3. raise_for_status
  4. .json()

Vazifa 5: Xavfsizlik

Modellang:

  1. API kalit
  2. .env
  3. Rate limit
  4. Retry

Vazifa 6: Integratsiya

Modellang:

  1. Manbalar (7.1)
  2. JSON (7.3)
  3. Scraping (7.9)
  4. Etika (7.11)

Vazifa 7: O'ylash

API'lar rate limit (so'rov soni cheklovi) qo'yadi va API kaliti talab qiladi. Bu shuni ko'rsatadiki, ma'lumot olish "bepul va cheksiz" emas — server resurslari, ruxsat va hurmat masalasi. Nima uchun "API bilan mas'uliyatli ishlash" (rate limit hurmat, kalit maxfiy) muhim, va nima uchun bu texnik emas, balki professional/axloqiy tamoyil?

Javob

Qisqa javob: API rate limit (so'rov cheklov) va kalit talab qiladi; ma'lumot olish bepul/cheksiz emas (server resursi, ruxsat, hurmat); "API bilan mas'uliyatli ishlash" (rate limit hurmat, kalit maxfiy) muhim, texnik emas — professional/axloqiy tamoyil, chunki: (1) server resursi — API serverda (so'rov — server ishlaydi; ko'p so'rov — yuklama, sekinlashadi, xizmat buziladi; boshqalarga zarar); rate limit — hurmat (server/boshqa foydalanuvchi); (2) kelishuv — API foydalanish sharti (Terms — rate limit, litsenziya; buzish — kelishuv buzish; bloklash, huquqiy); (3) kalit — javobgarlik (kalit — sizning (hisob; suistemol — sizga; o'g'irlansa — boshqa ishlatadi); maxfiy — javobgarlik); (4) hamjamiyat — API umumiy resurs (ko'p foydalanuvchi; suistemol — hammaga zarar; adolat). "Nega professional/axloqiy": (a) boshqalarga ta'sir (ko'p so'rov — server/boshqa foydalanuvchi; hurmat — axloqiy); (b) kelishuv (Terms — huquqiy/axloqiy; buzmaslik); (c) ishonch (mas'uliyatli — API egasi ishonadi; suistemol — bloklash, obro'); (d) kasbiy standart (Data Scientist — mas'uliyatli ma'lumot; etika). "Mas'uliyatli ishlash": (1) rate limit hurmat (sleep — so'rov orasi; cheklovda); (2) kalit maxfiy (.env, git emas — o'g'irlash oldini ol); (3) Terms o'qi (foydalanish sharti — ruxsat, cheklov); (4) keshlash (bir marta olingan — saqla; qayta so'rama; server kam); (5) kam so'rov (faqat kerak; ortiqcha yo'q); (6) shaffof (User-Agent — kim; yashirma). "Nega texnik emas": texnik (requests.get — oson) lekin mas'uliyat (kimga ta'sir, ruxsat, hurmat — axloqiy); kod ishlaydi, lekin to'g'ri (mas'uliyatli) ishlash — professional. Saboqlar: ma'lumot bepul/cheksiz emas (server, ruxsat, hurmat); rate limit (server — hurmat); kalit maxfiy (javobgarlik); professional/axloqiy (boshqalarga ta'sir, kelishuv, ishonch). To'g'ri: API mas'uliyatli (rate limit hurmat, kalit maxfiy, Terms); professional/axloqiy (texnik emas); boshqalarga ta'sir. Muvozanat: ma'lumot kerak (olish) + mas'uliyat (server, ruxsat, hurmat — axloqiy). Bu Data Science etika asosiy (API — mas'uliyatli; rate limit, kalit, Terms; professional; 7.11). API asoslari — mas'uliyatli ishlash (rate limit hurmat, kalit maxfiy; professional/axloqiy).

1. Nega ma'lumot bepul/cheksiz emas

  • Server resursi (so'rov — server ishlaydi; yuklama)
  • Kelishuv (Terms — rate limit, litsenziya)
  • Kalit (javobgarlik — hisob, suistemol)
  • Hamjamiyat (umumiy resurs — adolat)

2. Nega professional/axloqiy

  • Boshqalarga ta'sir (ko'p so'rov — server/foydalanuvchi)
  • Kelishuv (Terms — huquqiy/axloqiy)
  • Ishonch (mas'uliyatli — API egasi)
  • Kasbiy standart (Data Scientist — etika)

3. Mas'uliyatsiz vs mas'uliyatli

Mas'uliyatsiz Mas'uliyatli
Ko'p so'rov (yuklama) Rate limit hurmat (sleep)
Kalit kodda Kalit maxfiy (.env)
Terms e'tiborsiz Terms o'qi

4. Mas'uliyatli ishlash

  1. Rate limit hurmat (sleep — cheklovda)
  2. Kalit maxfiy (.env, git emas)
  3. Terms o'qi (ruxsat, cheklov)
  4. Keshlash (qayta so'rama — server kam)

5. Xulosa

  1. Ma'lumot bepul/cheksiz emas (server, ruxsat, hurmat)
  2. Rate limit hurmat (server — boshqalarga zarar yo'q)
  3. Kalit maxfiy (.env — javobgarlik, xavfsizlik)
  4. Professional/axloqiy (texnik emas — mas'uliyat, kelishuv)

Nimani mustahkamlaydi: 2.4, 2.7-bo'limlar.


Xulosa

Bu darsda API asoslarini o'rgandik.

Eng muhim uch fikr:

  1. So'rov va status. requests.get(url, params=, headers=, timeout=10) — GET so'rov (ma'lumot olish; timeout muhim — qotish yo'q); response javob (.status_code, .text, .json(), .headers). Status kod — 200 OK, 404 topilmadi, 401 ruxsat yo'q, 429 rate limit, 500 server; .json() oldin status tekshir (raise_for_status).

  2. Parametr va autentifikatsiya. params={"shahar": "Toshkent"} (so'rov parametrlari — URL ?shahar=...; API filtr/moslash/sahifa). Autentifikatsiya — API kalit (headers={"Authorization": "Bearer KALIT"} yoki params; kim/ruxsat); kalit maxfiy (.env/os.environ — kodda/git'da emas; xavfsizlik).

  3. Jonli ma'lumot. API — veb-xizmatdan jonli ma'lumot (ob-havo, valyuta; scraping'dan afzal — rasmiy, ruxsat). Xato boshqarish (raise_for_status, try/except, retry — API ishonchsiz). API bilan mas'uliyatli (rate limit hurmat — sleep; kalit maxfiy; Terms o'qi; professional/axloqiy — texnik emas; server/boshqalarga ta'sir). Tuzoqlar: status tekshirmas (xato .json()), timeout yo'q (qotish), kalit kodda (.env), rate limit (bloklash — hurmat), JSON faraz (try), sahifalash (page), hujjat o'qi.

Keyingi darsda JSON parse (chuqurroq)ni o'rganamiz: murakkab, ichma-ich JSON (API javoblari) bilan ishlash — chuqur kirish, ro'yxat ichida obyekt, xavfsiz olish (.get), va ierarxikni jadvalga (json_normalize chuqurroq).

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
7.7-dars: API asoslari — IlmHamroh