1
1
---
2
2
jupyter :
3
3
jupytext :
4
+ custom_cell_magics : kql
4
5
formats : ipynb,md
5
6
split_at_heading : true
6
7
text_representation :
7
8
extension : .md
8
9
format_name : markdown
9
10
format_version : ' 1.3'
10
- jupytext_version : 1.16.0
11
+ jupytext_version : 1.11.2
11
12
kernelspec :
12
- display_name : Python 3 (ipykernel)
13
+ display_name : cours-web
13
14
language : python
14
15
name : python3
15
16
---
@@ -24,10 +25,6 @@ Cours 5 : consommer des API web
24
25
25
26
<!-- #endregion -->
26
27
27
- ``` python
28
- from IPython.display import display
29
- ```
30
-
31
28
``` python
32
29
% pip install - U requests
33
30
```
@@ -77,8 +74,8 @@ se passe par exemple avec une requête `GET` sur le point d'accès (*endpoint*)
77
74
```
78
75
79
76
``` python
80
- import requests
81
- requests .get(" https://api.github.com/users/loicgrobol" ).text
77
+ import httpx
78
+ print (httpx .get(" https://api.github.com/users/loicgrobol" ).text)
82
79
```
83
80
84
81
Le serveur est alors littéralement un serveur web, les concepts s'alignent !
@@ -120,12 +117,12 @@ Les principes (un peu simplifiés) de REST sont
120
117
121
118
## Accéder à des API
122
119
123
- On l'a déjà fait [ plusieurs] ( ../01-internet/internets.py.md ) [ fois] ( ../04-requests/requests .py.md ) !
120
+ On l'a déjà fait [ plusieurs] ( ../01-internet/internets.py.md ) [ fois] ( ../03-httpx/httpx .py.md ) !
124
121
125
122
On a dit qu'il suffisait de faire des requêtes HTTP et ça on sait déjà faire :
126
123
127
124
``` python
128
- print (requests .get(" https://jsonplaceholder.typicode.com/comments/1" ).text)
125
+ print (httpx .get(" https://jsonplaceholder.typicode.com/comments/1" ).text)
129
126
```
130
127
131
128
Par contre, on a pas reparlé de ce format étrange.
@@ -135,24 +132,24 @@ Par contre, on a pas reparlé de ce format étrange.
135
132
136
133
``` python
137
134
import ast
138
- ast.literal_eval(requests .get(" https://jsonplaceholder.typicode.com/comments/1" ).text)
135
+ ast.literal_eval(httpx .get(" https://jsonplaceholder.typicode.com/comments/1" ).text)
139
136
```
140
137
141
138
Mais ce n'est pas tout à fait ça
142
139
143
140
``` python
144
- ast.literal_eval(requests .get(" https://jsonplaceholder.typicode.com/todos/1" ).text)
141
+ ast.literal_eval(httpx .get(" https://jsonplaceholder.typicode.com/todos/1" ).text)
145
142
```
146
143
147
144
Tiens, d'ailleurs, est-ce que vous voyez le problème ?
148
145
149
146
``` python
150
- print (requests .get(" https://jsonplaceholder.typicode.com/todos/1" ).text)
147
+ print (httpx .get(" https://jsonplaceholder.typicode.com/todos/1" ).text)
151
148
```
152
149
153
150
## JSON
154
151
155
- *** J** ava** S** cript ** O** bject ** N** otation* . Comme son nom l'indique, c'est (à de tout, tout petits
152
+ ** J** ava** S** cript ** O** bject ** N** otation* . Comme son nom l'indique, c'est (à de tout, tout petits
156
153
détails près) la syntaxe pour noter des objets en JavaScript.
157
154
158
155
C'est très très très proche de la syntaxe des ` dict ` littéraux en Python. Sauf quand c'est
@@ -170,7 +167,7 @@ C'est facile de le parser en Python et de récupérer un `dict` avec le module n
170
167
171
168
``` python
172
169
import json
173
- data_as_a_str = requests .get(" https://api.github.com/users/loicgrobol" ).text
170
+ data_as_a_str = httpx .get(" https://api.github.com/users/loicgrobol" ).text
174
171
data_as_a_dict = json.loads(data_as_a_str)
175
172
data_as_a_dict
176
173
```
@@ -183,18 +180,19 @@ s = json.dumps(d)
183
180
s
184
181
```
185
182
186
- En plus ` requests ` le fait pour nous
183
+ En plus ` httpx ` le fait pour nous
187
184
188
185
``` python
189
- data_as_a_dict = requests.get(" https://api.github.com/users/loicgrobol" ).json()
186
+ data_as_a_dict = httpx.get(" https://api.github.com/users/loicgrobol" ).json()
187
+ data_as_a_dict
190
188
```
191
189
192
190
Même pas besoin de se fatiguer.
193
191
194
192
Si on veut * envoyer* du JSON, il y a une subtilité :
195
193
196
194
``` python
197
- response = requests .post(
195
+ response = httpx .post(
198
196
" https://jsonplaceholder.typicode.com/todos" ,
199
197
json = {" userId" : 1 , " title" : " Buy milk" , " completed" : False }
200
198
)
@@ -205,6 +203,9 @@ Il faut passer les données au paramètre `json` de `requests.post` et non `data
205
203
lui passer sous forme de chaîne de caractère et avoir dans les * headers* ` "Content-Type" ` qui vaut
206
204
` "application/json" ` ).
207
205
206
+
207
+ Attention, si vous essayez de faire ça dans un ` get ` , httx ne va pas être d'accord : ce n'est pas une méthode HTTP avec laquelle on est censé envoyer des données.
208
+
208
209
## 🌐 Exo 🌐
209
210
210
211
### Le cheeseshop
0 commit comments