Thứ ba, 15/09/2020 | 00:00 GMT+7

Bắt đầu với Python - Get Request


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, tôi sẽ nói về thư viện Python Request, cho phép bạn gửi các yêu cầu HTTP bằng Python.

Và vì việc sử dụng API chỉ đơn giản 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. Tôi 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ó để bạn có thể sử dụng nó trong các ứng dụng của riêng mình.

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.

Bài viết này sẽ chỉ đề 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 cho một việc đơn giản: 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.

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 () và .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:
Bắt đầu với Python - Get Request

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 đã nhầm lẫn)
  • 5XX - Lỗi server (chúng đã làm hỏng)

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à Sai.

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

if res:     print('Response OK') else:     print('Response Failed') 

Bắt đầu với Python - Get Request

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ực hiện:

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ố.

Bắt đầu với Python - Get Request

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.

print(res.headers) 

Bắt đầu với Python - Get Request
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 nên bạn có thể dễ dàng truy cập vào dữ liệu được trả về .

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

Và cuối cùng, nếu ta nhìn vào res.text (điều này hoạt động đối với dữ liệu dạng 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ư trang Scotch.io trông như thế nào 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.

print(res.text) 

Bắt đầu với Python - Get Request

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/

Bắt đầu với Python - Get Request

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 có lẽ là hình thức xác thực đơn giản nhất, vì nó chỉ đượ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 về Yandex tại đây: https://tech.yandex.com/translate/doc/dg/reference/translate-docpage/

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.

Bắt đầu với Python - Get Request

Đôi khi, tài liệu API có thể khó đọc, nhưng trong trường hợp này thì đơn giản. 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à tất nhiên rất dễ dàng để xem URL. 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:

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 . Có Yêu cầu làm điều đó cho ta dễ dàng hơn nhiều.

Để làm điều đó, 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, 'Xin chào' 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: https://en.wikipedia.org/wiki/List\_of\_ISO\_639-1\_codes 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 .

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 ().

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.

print(res.text) 

Bắt đầu với Python - Get Request

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 'Boujour' trong phản hồi ngay bây giờ.

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

Bắt đầu với Python - Get Request
Ta hãy xem xét các tiêu đề cho phản hồi cụ thể này.

print(res.headers) 

Bắt đầu với Python - Get Request
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.

json = res.json() print(json) 

Bắt đầu với Python - Get Request
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.

print(json['text']) 

Bắt đầu với Python - Get Request
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 .

print(json['text'][0]) 

Bắt đầu với Python - Get Request
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ừ Xin chào thành Tạm biệt, thay đổi ngôn ngữ đích trở lại tiếng Tây Ban Nha và gửi lại yêu cầu.

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

Bắt đầu với Python - Get Request
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 API KEY 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ệ nữa. 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:

print(res.status_code) 

Bắt đầu với Python - Get Request
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 nội dung của ứng dụng / json sang từ điển Điều này bao gồm các khái niệm cơ bản về Yêu cầu trong Python. Tất nhiên bạn có thể làm được nhiều hơn thế, nhưng những gì tôi đã nói trong bài viết này là nền tảng của hầu hết các yêu cầu. Mọi thứ có thể thay đổi một chút tùy thuộc vào hoàn cảnh, nhưng những ý tưởng cơ bản sẽ vẫn được giữ nguyên.

Nếu bạn muốn làm nhiều việc hơn, hãy xem https://apilist.fun/ để 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 sử dụng f-string để tạo chuỗi trong Python 3
2020-09-10
Cách chuyển đổi số nguyên thành chuỗi trong Python 3
2020-09-03
Cách chuyển đổi chuỗi thành số nguyên trong Python 3
2020-09-03
Cách sử dụng module bộ sưu tập trong Python 3
2020-08-19
Cách chuyển đổi kiểu dữ liệu trong Python 3
2020-08-07
Cách sử dụng hàm bản đồ Python
2020-08-03
Cách sử dụng quy trình con để chạy các chương trình bên ngoài trong Python 3
2020-07-30
Làm thế nào để đánh lừa một mạng neural trong Python 3
2020-07-30
Cách sử dụng hàm bộ lọc Python
2020-07-24
Cách sử dụng module pathlib để thao tác đường dẫn hệ thống tệp trong Python 3
2020-07-15