Bölüm kodlarını ve/veya veri setlerini indir.
Request GET Methodu, ile canlı bir sunucuya API isteğinde bulunmak için kullanılır. Bunun için request modülünün içe aktarılması gerekmektedir.
import requests
Request modülünün özeliklerine bakalım;
print(dir(requests))
#help(requests) daha detaylı bilgi için
Çıktı:
['ConnectTimeout', 'ConnectionError', 'DependencyWarning', 'FileModeWarning', 'HTTPError', 'NullHandler', 'PreparedRequest', 'ReadTimeout', 'Request', ' RequestException', 'RequestsDependencyWarning', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__author_email__', ' __build__', '__builtins__', '__cached__', '__cake__', '__copyright__', '__description__', '__doc__', '__file__', '__license__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__title__', '__url__', '__version__', '_check_cryptography', '_internal_utils', 'adapters', 'api', 'auth', 'certs', 'chardet', 'check_compatibility', 'codes', 'compat', 'cookies', 'delete', 'exceptions', 'get', 'head', 'hooks', 'logging', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'session', 'sessions', 'ssl', 'status_codes', 'structures', 'urllib3', 'utils', 'warnings']
Denemeler yapmak için ücretsiz bir şeklide test API'lerinin bulunduğu https://jsonplaceholder.typicode.com sayfasındaki API'lerden faydalanacağız.
1.Parametre olmadan veri çekme
Örnek-1:
todosUrl="https://jsonplaceholder.typicode.com/todos"
response=requests.get(todosUrl)
response
Çıktı:
<Response [200]>
print(dir(response)) #response'in alabileceği özelliklere bakalım
Çıktı:
['__attrs__', '__bool__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_content', '_content_consumed', '_next', ' apparent_encoding', 'close', 'connection', 'content', 'cookies', 'elapsed', 'encoding', 'headers', 'history', 'is_permanent_redirect', 'is_redirect', 'iter_content', 'iter_lines', 'json', 'links', 'next', 'ok', 'raise_for_status', 'raw', 'reason', 'request', 'status_code', 'text', 'url']
Bunlardan en kullanışlı olanlara bakalım;
response.status_code #satus code, bağlantı başarılı olduğu için 200 döndü.
Çıktı:
200
response.url #url adresi
Çıktı:
'https://jsonplaceholder.typicode.com/todos'
response.text #içeriği düz bir şekilde gösterir.
Çıktı:
'[\n {\n "userId": 1,\n "id": 1,\n "title": "delectus aut autem",\n "completed": false\n },\n {\n "userId": 1,\n "id": 2,\n "title": "quis ut nam facilis et officia qui",\n " completed": false\n },\n {\n "userId": 1,\n "id": 3,\n "title": "fugiat veniam minus",\n "completed": false\n },\n {\n "userId": 1,\n "id": 4,\n "title": "et porro tempora",\n "completed": true\n },\n {\n "userId": 1,\n "id": 5,\n "title": "laboriosam mollitia et e nim quasi adipisci quia provident illum",\n ........... ]
response.json() #İçeriği json formatında gösterir.
Çıktı:
[{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}, {'userId': 1, 'id': 2, 'title': 'quis ut nam facilis et officia qui', 'completed': False}, {'userId': 1, 'id': 3, 'title': 'fugiat veniam minus', 'completed': False}, {'userId': 1, 'id': 4, 'title': 'et porro tempora', 'completed': True}, {'userId': 1, 'id': 5, 'title': 'laboriosam mollitia et enim quasi adipisci quia provident illum', 'completed': False},.......]
2.Parametre göndererek veri çekme
Örnek-2
#https://jsonplaceholder.typicode.com/comments?postId=1
#Linkimizde postId parametresini(soru işaretinden sonraki değerler) göndereceğiz.
commentUrl="https://jsonplaceholder.typicode.com/comments"
pattern={"postId":2} #eğer birkaç tane parametre almış olsaydı burada tanımlanacaktı.
response=requests.get(commentUrl,params=pattern)
response
Çıktı:
<Response [200]>
response.status_code
Çıktı:
200
response.url
Çıktı:
'https://jsonplaceholder.typicode.com/comments?postId=2'
response.json()
Çıktı:
[{'postId': 2, 'id': 6, 'name': 'et fugit eligendi deleniti quidem qui sint nihil autem', 'email': 'Presley.Mueller@myrl.com', 'body': 'doloribus at sed quis culpa deserunt consectetur qui praesentium\naccusamus fugiat dicta\nvoluptatem rerum ut voluptate autem\nvoluptatem repellendus aspernatur dolorem in'}, {'postId': 2, 'id': 7, 'name': 'repellat consequatur praesentium vel minus molestias voluptatum', 'email': 'Dallas@ole.me', 'body': 'maiores sed dolores similique labore et inventore et\nquasi temporibus esse sunt id et\neos voluptatem aliquam\naliquid ratione corporis molestiae mollitia quia et magnam dolor'},... ]
Örnek-3: Örneğimiz aşağıdaki özelliklerden oluşmaktadır.
- https://jsonplaceholder.typicode.com/ sitesinde bulunan kullanıcıların oluşturdukları fotoğraf albümleri vardır.
- Her fotoğraf albümünün bir bir sahibi vardır ve oluşturan kişinin userId'si bellidir. Bir kullanıcının birden fazla albümü olabilir.
- Fotoğraflar listesinde albümün sahibinin userId'si yok ama albümId'si vardır.
- Son durumda isteğimiz şey userId bilgisini girdiğimizde kullanıcının fotoğraflarını listelemektir.
class Fotograf():
def __init__(self,userId):
self.userId=userId
self.albumleriGetir=self.AlbumleriGetir()
def AlbumleriGetir(self):
albumUrl="https://jsonplaceholder.typicode.com/albums"
pattern={"userId":self.userId}
response=requests.get(albumUrl,params=pattern)
albumIdList=[]
if response.status_code==200:
for alb in response.json():
albumIdList.append(alb["id"])
return albumIdList
else:
return None
def AlbumdekiFotograflariGetir(self):
fotoUrl="https://jsonplaceholder.typicode.com/photos"
fotoList=[]
for album in self.albumleriGetir:
pattern={"albumId":album}
response=requests.get(fotoUrl,params=pattern)
if response.status_code==200:
for foto in response.json():
fotoList.append(foto["url"])
return fotoList
else:
return None
return fotoList
f1=Fotograf(2)
f1.AlbumleriGetir() #kullanıcının albümler listesi
Çıktı:
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
f1.AlbumdekiFotograflariGetir()
Çıktı:
['https://via.placeholder.com/600/cda4c0', 'https://via.placeholder.com/600/74e371', 'https://via.placeholder.com/600/9022fb', 'https://via.placeholder.com/600/99dd3f', 'https://via.placeholder.com/600/1cb49b', 'https://via.placeholder.com/600/91f992', 'https://via.placeholder.com/600/dfe687', 'https://via.placeholder.com/600/c4e0b1', 'https://via.placeholder.com/600/963d65', 'https://via.placeholder.com/600/4e59cd', 'https://via.placeholder.com/600/4016ae', 'https://via.placeholder.com/600/a45dfe',........ (Fazla alan kaplamasın diye görüntü kesildi) ]