Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. requests.get (so'rov)
- 2.2. Status kod va JSON (200, .json())
- 2.3. So'rov parametrlari (params)
- 2.4. Autentifikatsiya (API kalit)
- 2.5. Xato boshqarish (raise_for_status)
- 2.6. API amaliyoti
- 2.7. API tuzoqlari
- 2.8. API asoslari — veb-xizmatdan jonli ma'lumot
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — So'rov va status (mock)
- Misol 2 — Status kodlar
- Misol 3 — Parametr va URL
- Misol 4 — JSON javobni DataFrame'ga
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
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:
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:
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
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'qiAPI 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)
"""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:
=== 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 + statusNima ko'rsatdi: 2.1, 2.2-bo'limlar.
Misol 2 — Status kodlar
"""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:
=== 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 holatiNima ko'rsatdi: 2.2-bo'lim.
Misol 3 — Parametr va URL
"""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:
=== 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 moslashNima ko'rsatdi: 2.3-bo'lim.
Misol 4 — JSON javobni DataFrame'ga
"""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:
=== 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
data = requests.get(url).json() # 404 → xato (HTML) # ⚠️
r = requests.get(url); r.raise_for_status(); data = r.json() # ✅2. Timeout yo'q
requests.get(url) # javob kelmasa — cheksiz kutish # ⚠️
requests.get(url, timeout=10) # kutish chegarasi # ✅3. Kalit kodda
kalit = "abc123secret" # kodda/git (xavfsizlik) # ⚠️
kalit = os.environ["API_KEY"] # .env (git emas) # ✅4. Rate limit
for i in range(10000): requests.get(url) # 429 (bloklash) # ⚠️
time.sleep(1) # kutib (rate limit hurmat) # ✅5. JSON faraz
requests.get(url).json() # javob HTML → xato # ⚠️
try: data = r.json() except: ... # tekshir # ✅6. Sahifalash
requests.get(url).json() # faqat 1-sahifa (100 yozuv) # ⚠️
# page/offset bilan sikl (barcha) # ✅7. POST vs GET
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
timeout— har so'rov (qotish).Status tekshir —
raise_for_status.Kalit —
.env(git emas).Rate limit — hurmat (
sleep).JSON — try/tekshir.
params— filtr/moslash.Hujjat — o'qi (API turli).
Retry — vaqtincha xato (backoff).
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
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
- Dastur interfeysi (veb-xizmat)
- GET so'rov (ma'lumot olish)
- OK (muvaffaqiyat)
- Topilmadi
- Rate limit (ko'p so'rov)
- JSON → Python obyekt
- So'rov parametrlari (filtr)
- API kalit (kim)
- Qotish (javob kelmasa)
- .env (git emas — maxfiy)
- So'rov soni cheklov (bloklash)
- Rasmiy (ruxsat, tuzilgan)
Vazifa 2: Xatolarni tuzating
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) # yaratishJavoblar
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:
- requests.get
- timeout
- params
- headers
Vazifa 4: Status va JSON
Modellang:
- status_code
- 200/404/429
- raise_for_status
- .json()
Vazifa 5: Xavfsizlik
Modellang:
- API kalit
- .env
- Rate limit
- Retry
Vazifa 6: Integratsiya
Modellang:
- Manbalar (7.1)
- JSON (7.3)
- Scraping (7.9)
- 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
- Rate limit hurmat (
sleep— cheklovda) - Kalit maxfiy (
.env, git emas) - Terms o'qi (ruxsat, cheklov)
- Keshlash (qayta so'rama — server kam)
5. Xulosa
- Ma'lumot bepul/cheksiz emas (server, ruxsat, hurmat)
- Rate limit hurmat (server — boshqalarga zarar yo'q)
- Kalit maxfiy (
.env— javobgarlik, xavfsizlik) - 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:
So'rov va status.
requests.get(url, params=, headers=, timeout=10)— GET so'rov (ma'lumot olish;timeoutmuhim — qotish yo'q);responsejavob (.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).Parametr va autentifikatsiya.
params={"shahar": "Toshkent"}(so'rov parametrlari — URL?shahar=...; API filtr/moslash/sahifa). Autentifikatsiya — API kalit (headers={"Authorization": "Bearer KALIT"}yokiparams; kim/ruxsat); kalit maxfiy (.env/os.environ— kodda/git'da emas; xavfsizlik).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).
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!