Thứ tư, 29/01/2020 | 00:00 GMT+7

Cách bắt đầu với Thư viện yêu cầu bằng Python

Trong nhiều ứng dụng web, việc kết nối với các dịch vụ của bên thứ ba khác nhau bằng cách sử dụng API là điều bình thường. Khi bạn sử dụng các API này, bạn có thể truy cập vào dữ liệu như thông tin thời tiết, tỷ số thể thao, danh sách phim, tweet, kết quả của công cụ tìm kiếm và hình ảnh. Bạn cũng có thể sử dụng các API để thêm chức năng cho ứng dụng của bạn . Ví dụ về những điều này là thanh toán, lên lịch, email, bản dịch, bản đồ và chuyển file . Nếu bạn tự tạo bất kỳ cái nào trong số đó thì sẽ mất rất nhiều thời gian, nhưng với API, có thể chỉ mất vài phút để kết nối với một cái và truy cập các tính năng và dữ liệu của nó.

Trong bài viết này, ta sẽ tìm hiểu về thư viện Yêu cầu Python, cho phép bạn gửi các yêu cầu HTTP bằng Python.

Và vì sử dụng API là gửi yêu cầu HTTP và nhận phản hồi, Yêu cầu cho phép bạn sử dụng API bằng Python. Ta sẽ trình bày việc sử dụng API dịch ngôn ngữ tại đây để bạn có thể xem ví dụ về cách hoạt động của nó.

Tổng quan nhanh về các yêu cầu HTTP

Yêu cầu HTTP là cách web hoạt động. Mỗi khi bạn chuyển đến một trang web, trình duyệt của bạn thực hiện nhiều yêu cầu đến server của trang web. Sau đó, server sẽ phản hồi với tất cả dữ liệu cần thiết để hiển thị trang và trình duyệt của bạn sau đó thực sự hiển thị trang để bạn có thể nhìn thấy nó.

Quy trình chung là thế này: một ứng dụng client (như trình duyệt hoặc tập lệnh Python sử dụng Yêu cầu) sẽ gửi một số dữ liệu đến một URL và sau đó server đặt tại URL sẽ đọc dữ liệu, quyết định phải làm gì với nó và trả lại phản hồi cho khách hàng. Cuối cùng, khách hàng có thể quyết định phải làm gì với dữ liệu trong phản hồi.

Một phần dữ liệu mà khách hàng gửi trong một yêu cầu là phương thức yêu cầu. Một số phương thức yêu cầu phổ biến là GET, POST và PUT. Các yêu cầu GET thường chỉ để đọc dữ liệu mà không thực hiện thay đổi đối với một cái gì đó, trong khi các yêu cầu POST và PUT nói chung là để sửa đổi dữ liệu trên server . Vì vậy, ví dụ: API Stripe cho phép bạn sử dụng các yêu cầu POST để tạo một khoản phí mới để user có thể mua thứ gì đó từ ứng dụng của bạn.

Lưu ý: Bài viết này sẽ đề cập đến các yêu cầu GET, vì ta sẽ không sửa đổi bất kỳ dữ liệu nào trên server .

Khi gửi một yêu cầu từ tập lệnh Python hoặc bên trong ứng dụng web, bạn, nhà phát triển, sẽ quyết định những gì được gửi trong mỗi yêu cầu và phải làm gì với phản hồi. Vì vậy, hãy khám phá điều đó bằng cách đầu tiên gửi một yêu cầu đến Scotch.io và sau đó bằng cách sử dụng API dịch ngôn ngữ.

Cài đặt yêu cầu Python

Trước khi có thể làm bất cứ điều gì, ta cần cài đặt thư viện. Vì vậy, hãy tiếp tục và cài đặt các yêu cầu bằng pip . Trước tiên, bạn nên tạo một môi trường ảo nếu bạn chưa có.

  • pip install requests

Yêu cầu đầu tiên của ta

Để bắt đầu, hãy sử dụng Yêu cầu để yêu cầu trang Scotch.io. Tạo một file có tên script.py và thêm mã sau vào file đó. Trong bài viết này, ta sẽ không có nhiều mã để làm việc, vì vậy khi có điều gì đó thay đổi, bạn chỉ có thể cập nhật mã hiện có thay vì thêm các dòng mới.

script.py
import requests  res = requests.get('https://scotch.io')  print(res) 

Vì vậy, tất cả những gì mã này đang làm là gửi một yêu cầu GET tới Scotch.io. Đây là cùng một loại yêu cầu mà trình duyệt của bạn đã gửi để xem trang này, nhưng điểm khác biệt duy nhất là Yêu cầu không thể thực sự hiển thị HTML, vì vậy thay vào đó bạn sẽ chỉ nhận được HTML thô và thông tin phản hồi khác.

Ta đang sử dụng hàm .get() ở đây, nhưng Yêu cầu cho phép bạn sử dụng các hàm khác như .post().put() để gửi các yêu cầu đó.

Bạn có thể chạy nó bằng cách thực thi file script.py.

  • python script.py

Và Đây là kết quả bạn nhận lại được:
tập lệnh chạy với  kết quả  là `Đáp ứng 200 '

Mã trạng thái

Điều đầu tiên ta có thể làm là kiểm tra mã trạng thái. Mã HTTP nằm trong repository ảng từ 1XX đến 5XX. Các mã trạng thái phổ biến mà bạn có thể đã thấy là 200, 404 và 500.

Dưới đây là tổng quan nhanh về ý nghĩa của từng mã trạng thái:

  • 1XX - Thông tin
  • 2XX - Thành công
  • 3XX - Chuyển hướng
  • 4XX - Lỗi client (bạn đã mắc lỗi)
  • 5XX - Lỗi server (họ đã mắc lỗi)

Nói chung, những gì bạn đang tìm kiếm khi thực hiện các yêu cầu của riêng mình là mã trạng thái trong những năm 200.

Yêu cầu nhận ra rằng mã trạng thái 4XX và 5XX là lỗi, vì vậy nếu các mã trạng thái đó được trả về, đối tượng phản hồi từ yêu cầu sẽ đánh giá là False .

Bạn có thể kiểm tra xem một yêu cầu được phản hồi thành công hay không bằng cách kiểm tra xem phản hồi có xác thực hay không. Ví dụ:

script.py
if res:     print('Response OK') else:     print('Response Failed') 

Đầu ra Phản hồi 200 kèm theo Phản hồi OK

Thông báo “Phản hồi không thành công” sẽ chỉ xuất hiện nếu mã trạng thái 400 hoặc 500 trả về. Hãy thử thay đổi URL thành một số nội dung vô nghĩa để xem phản hồi không thành công với 404.

Bạn có thể xem mã trạng thái trực tiếp bằng cách thêm:

script.py
print(res.status_code) 

Thao tác này sẽ hiển thị trực tiếp mã trạng thái để bạn có thể tự mình kiểm tra số.

Lỗi  kết quả  với 404

Tiêu đề

Một điều khác bạn có thể nhận được từ phản hồi là các tiêu đề. Bạn có thể xem chúng bằng cách sử dụng từ điển tiêu đề trên đối tượng phản hồi.

script.py
print(res.headers) 

 kết quả  với tiêu đề được in tiêu chuẩn

Tiêu đề được gửi cùng với yêu cầu và được trả lại trong phản hồi. Tiêu đề được sử dụng để cả client và server biết cách diễn giải dữ liệu đang được gửi và nhận trong phản hồi / phản hồi.

Ta thấy các tiêu đề khác nhau được trả về. Nhiều khi bạn sẽ không cần sử dụng thông tin tiêu đề trực tiếp, nhưng nó sẽ ở đó nếu bạn cần.

Loại nội dung thường là loại bạn có thể cần vì nó tiết lộ định dạng của dữ liệu, ví dụ: HTML, JSON, PDF, văn bản, v.v. Nhưng loại nội dung thường được xử lý bởi Yêu cầu để bạn có thể truy cập dữ liệu được trả về.

Văn bản phản hồi

Và cuối cùng, nếu ta xem qua res.text (điều này hoạt động đối với dữ liệu văn bản, như một trang HTML mà ta đang xem), ta có thể thấy tất cả HTML cần thiết để xây dựng trang chủ của Scotch. Nó sẽ không được hiển thị, nhưng ta thấy rằng có vẻ như nó thuộc về Scotch. Nếu bạn đã lưu nó vào một file và mở nó ra, bạn sẽ thấy một cái gì đó giống với trang Scotch. Trong tình huống thực tế, nhiều yêu cầu được thực hiện cho một trang web để tải những thứ như hình ảnh, tập lệnh và bảng định kiểu, vì vậy nếu bạn chỉ lưu HTML vào một file , nó sẽ không giống như những gì trang Scotch.io trông. như trong trình duyệt của bạn vì chỉ có một yêu cầu duy nhất được thực hiện để lấy dữ liệu HTML.

script.py
print(res.text) 

Dữ liệu HTML được in trên dòng lệnh

Sử dụng API Dịch

Vì vậy, bây giờ ta hãy chuyển sang một cái gì đó thú vị hơn. Ta sẽ sử dụng Yandex Translate API để thực hiện yêu cầu dịch một số văn bản sang một ngôn ngữ khác.

Để sử dụng API, trước tiên bạn cần đăng ký. Sau khi bạn đăng ký, hãy truy cập API Dịch và tạo khóa API. Khi bạn có khóa API, hãy thêm nó vào file của bạn dưới dạng một hằng số. Đây là liên kết nơi bạn có thể làm tất cả những điều đó: https://tech.yandex.com/translate/

script.py
API_KEY = 'your yandex api key' 

Lý do tại sao ta cần khóa API là để Yandex có thể xác thực ta mỗi khi ta muốn sử dụng API của họ. Khóa API là một dạng xác thực nhẹ, vì nó được thêm vào cuối URL yêu cầu khi được gửi đi.

Để biết URL nào ta cần gửi để sử dụng API, ta có thể xem tài liệu cho Yandex .

Nếu ta nhìn vào đó, ta sẽ thấy tất cả thông tin cần thiết để sử dụng API Dịch của họ để dịch văn bản.

Cú pháp yêu cầu để sử dụng API

Khi ta thấy một URL có dấu và (&), dấu chấm hỏi (?) Và dấu bằng (=), bạn có thể chắc chắn rằng URL đó dành cho các yêu cầu GET. Các ký hiệu đó chỉ định các tham số đi cùng với URL.

Thông thường những thứ trong dấu ngoặc vuông ([]) sẽ là tùy chọn. Trong trường hợp này, định dạng, tùy chọn và gọi lại là tùy chọn, trong khi khóa, văn bản và ngôn ngữ là bắt buộc cho yêu cầu.

Vì vậy, hãy thêm một số mã để gửi đến URL đó. Bạn có thể thay thế yêu cầu đầu tiên mà ta đã tạo bằng:

script.py
url = 'https://translate.yandex.net/api/v1.5/tr.json/translate' res = requests.get(url) 

Có hai cách để ta có thể thêm các tham số. Ta có thể nối trực tiếp nó vào cuối URL hoặc ta có thể yêu cầu Yêu cầu thực hiện điều đó cho ta . Để làm điều sau, ta có thể tạo một từ điển cho các tham số của bạn . Ba mục ta cần là key , văn bản và ngôn ngữ. Hãy tạo từ điển bằng cách sử dụng khóa API, 'Hello' cho văn bản và 'en-es' là ngôn ngữ, nghĩa là ta muốn dịch từ tiếng Anh sang tiếng Tây Ban Nha.

Nếu bạn cần biết bất kỳ mã ngôn ngữ nào khác, bạn có thể xem tại đây . Bạn đang tìm cột 639-1.

Ta tạo từ điển tham số bằng cách sử dụng hàm dict() và chuyển các khóa và giá trị mà ta muốn vào từ điển của bạn .

script.py
params = dict(key=API_KEY, text='Hello', lang='en-es') 

Bây giờ ta lấy từ điển tham số và chuyển nó vào hàm .get() .

script.py
res = requests.get(url, params=params) 

Khi ta chuyển các tham số theo cách này, Yêu cầu sẽ tiếp tục và thêm các tham số vào URL cho ta .

Bây giờ, hãy thêm một câu lệnh in cho văn bản phản hồi và xem những gì được trả lại trong phản hồi.

script.py
print(res.text) 

từ điển  kết quả  với các giá trị được nhập

Ta thấy ba điều. Ta thấy mã trạng thái, chính xác là mã trạng thái của chính phản hồi, ta thấy ngôn ngữ mà ta đã chỉ định và ta thấy văn bản đã dịch bên trong danh sách. Vì vậy, bạn sẽ thấy 'Hola' cho văn bản đã dịch.

Hãy thử lại với en-fr làm mã ngôn ngữ và bạn sẽ thấy 'Bonjour' trong phản hồi ngay bây giờ.

script.py
params = dict(key=API_KEY, text='Hello', lang='en-fr') 

Văn bản dịch tiếng Pháp

Ta hãy xem xét các tiêu đề cho phản hồi cụ thể này.

script.py
print(res.headers) 

Tiêu đề được in ở  kết quả

Rõ ràng là các tiêu đề phải khác nhau vì ta đang giao tiếp với một server khác, nhưng trong trường hợp này, loại nội dung là application / json thay vì text / html. Điều này nghĩa là dữ liệu có thể được hiểu là JSON.

Khi ứng dụng / json là loại nội dung của phản hồi, ta có thể yêu cầu Yêu cầu chuyển đổi phản hồi thành từ điển và danh sách để ta có thể truy cập dữ liệu dễ dàng hơn.

Để dữ liệu được phân tích cú pháp dưới dạng JSON, ta sử dụng phương thức .json() trên đối tượng phản hồi.

Nếu bạn in nó, bạn sẽ thấy rằng dữ liệu trông giống nhau, nhưng định dạng hơi khác.

script.py
json = res.json() print(json) 


Lý do tại sao nó khác là vì nó không còn là văn bản thuần túy mà bạn nhận được từ res.text. Lần này là version in của từ điển.

Giả sử ta muốn truy cập văn bản. Vì đây là từ điển nên ta có thể sử dụng phím văn bản.

script.py
print(json['text']) 


Và bây giờ ta chỉ thấy dữ liệu cho một khóa đó. Trong trường hợp này, ta đang xem danh sách một mục, vì vậy nếu ta muốn lấy trực tiếp văn bản đó trong danh sách, ta có thể truy cập nó bằng index .

script.py
print(json['text'][0]) 

"Bonjour" không có dấu ngoặc vuông

Và bây giờ thứ duy nhất ta thấy là từ đã được dịch.

Vì vậy, tất nhiên nếu ta thay đổi mọi thứ trong thông số của bạn , ta sẽ nhận được kết quả khác. Hãy thay đổi văn bản cần dịch từ Hello thành Goodbye , thay đổi ngôn ngữ đích trở lại tiếng Tây Ban Nha và gửi lại yêu cầu.

script.py
params = dict(key=API_KEY, text='Goodbye', lang='en-es') 

"Adios" được in để xuất
Hãy thử dịch văn bản dài hơn sang các ngôn ngữ khác nhau và xem API cung cấp cho bạn những phản hồi nào.

Dịch các trường hợp lỗi API

Cuối cùng, ta sẽ xem xét một trường hợp lỗi. Mọi thứ không phải lúc nào cũng hoạt động, vì vậy ta cần biết khi nào điều đó xảy ra.

Hãy thử thay đổi khóa API của bạn bằng cách xóa một ký tự. Khi bạn làm điều này, khóa API của bạn sẽ không còn hợp lệ. Sau đó, hãy thử gửi một yêu cầu.

Nếu bạn xem mã trạng thái, Đây là kết quả bạn nhận được:

script.py
print(res.status_code) 

Lỗi 403
Vì vậy, khi bạn đang sử dụng API, bạn cần kiểm tra xem mọi thứ có thành công hay không để bạn có thể xử lý các trường hợp lỗi theo nhu cầu của ứng dụng của bạn .

Kết luận

Đây là những gì ta học được:

  • Cách thức hoạt động của các yêu cầu HTTP
  • Các mã trạng thái khác nhau có thể có trong một phản hồi
  • Cách gửi yêu cầu và nhận phản hồi bằng thư viện Yêu cầu Python
  • Cách sử dụng API dịch ngôn ngữ để dịch văn bản
  • Cách chuyển đổi phản hồi của ứng dụng / nội dung JSON sang từ điển

Nếu bạn muốn làm nhiều việc hơn, hãy xem danh sách này để xem các API khác nhau có sẵn và cố gắng sử dụng chúng với Yêu cầu Python.


Tags:

Các tin liên quan

Cách quản lý Python với Pyenv và Direnv
2019-12-12
Cách tạo trình tạo lớp Python cho mã VS
2019-12-12
Cách thực hiện phân tích cảm xúc trong Python 3 bằng Bộ công cụ ngôn ngữ tự nhiên (NLTK)
2019-09-26
Cách thiết lập một sổ ghi chép Jupyter với Python 3 trên Debian 10
2019-08-29
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên macOS
2019-08-16
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên macOS
2019-08-16
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên macOS
2019-08-16
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên Debian 10
2019-08-05
Cách cài đặt bản phân phối Python Anaconda trên Debian 10
2019-07-09
Cách cài đặt Phân phối Python Anaconda trên Ubuntu 18.04
2019-04-18