Một phần quan trọng của lập trình là khả năng giao tiếp với các Giao diện lập trình ứng dụng [API] khác nhau. Nếu bạn truy cập Google API Explorer, bạn sẽ tìm thấy một thư viện API khổng lồ, bao gồm tất cả các ứng dụng nổi tiếng của họ như Gmail, Drive và Lịch. Nói một cách đơn giản, một API cho phép bạn tìm nạp hoặc gửi dữ liệu đến các dịch vụ thông qua các yêu cầu HTTP
Việc sử dụng và tài liệu về các API này lúc đầu có thể hơi rắc rối, nhưng khi bạn học nó, bạn sẽ có thể áp dụng kiến thức của mình vào hầu hết các ứng dụng của Google
Tôi quyết định viết hướng dẫn cho người mới bắt đầu về cách sử dụng và hiểu API Gmail. Hướng dẫn này dựa trên tài liệu, nghĩa là bạn sẽ tìm hiểu những gì cần tìm và cách đọc nó thay vì chỉ sao chép mã. Vì hầu hết các tài liệu tham khảo Google API khác đều giống nhau, bạn sẽ thấy rằng việc thích ứng với chúng sẽ dễ dàng hơn nhiều khi bạn biết cách đọc tài liệu thực sự. Điều này sẽ cho phép bạn viết mã của riêng mình và thực sự hiểu những gì bạn đang làm
Python 3 được sử dụng trong hướng dẫn này, nhưng cách sử dụng cũng sẽ khá giống với các ngôn ngữ khác
Bắt đầu nhanhGoogle thường cung cấp hướng dẫn bắt đầu nhanh để giúp ủy quyền dễ dàng hơn. Hướng dẫn này sẽ sử dụng ủy quyền từ hướng dẫn bắt đầu nhanh, có nghĩa là nó sẽ có một số hạn chế, nhưng nó đủ cho mục đích của chúng tôi. Một cách khác để lấy khóa API là tạo một dự án mới, cách này phức tạp hơn một chút
Hướng dẫn bắt đầu nhanh Python có thể được truy cập tại liên kết này, nhưng tôi sẽ làm theo và chỉ cho bạn cách mọi thứ được thực hiện tại đây
Đây là giao diện bắt đầu nhanh
Bật API Gmail
Bước đầu tiên là bật API và tải xuống thông tin đăng nhập để sử dụng trong dự án của chúng tôi. Bằng cách nhấn nút “kích hoạt API Gmail”, chúng tôi sẽ mở một cửa sổ mới với thông tin đăng nhập của mình
ID khách hàng và Bí mật khách hàng của chúng tôi sẽ được hiển thị. Chọn cấu hình máy khách để tải xuống. Một tệp sẽ được lưu, có tên là credentials.json
. Chúng tôi sẽ lưu cái này vào cùng một thư mục mà mã của chúng tôi sẽ ở trong
Cài đặt thư viện
Việc cài đặt các thư viện cần thiết được thực hiện bằng lệnh pip đơn giản do Google cung cấp. Tôi dán nó dưới đây là tốt. Tôi khuyên bạn nên làm điều đó trong một môi trường ảo. Tuy nhiên, điều đó không được đề cập trong hướng dẫn này
pip install — upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Lần chạy đầu tiên — Cho phép truy cậpTrước khi chúng tôi tiếp tục làm theo hướng dẫn, chúng tôi cần cấp quyền truy cập vào API Gmail cho tập lệnh của mình. Hãy bắt đầu bằng cách tạo kịch bản thực tế
Tạo một. py trong thư mục dự án [giống như thư mục với credentials.json
]. Vì lợi ích của nó, hãy gọi nó là gmail.py
Sao chép mã ví dụ từ khởi động nhanh Python vào tệp gmail.py
. Bây giờ hãy bỏ qua mã, chúng ta sẽ đi sâu vào vấn đề đó sau. Chúng tôi chỉ cần cho phép truy cập trong lần chạy đầu tiên — nó cũng sẽ được lưu cho tất cả các lần chạy sau
Chỉ cần chạy tệp như bình thường và bạn sẽ có thể đăng nhập vào tài khoản Google của mình trong trình duyệt web
python gmail.py
đăng nhập vào tài khoản của bạn. Một cảnh báo nói rằng ứng dụng chưa được xác minh sẽ được hiển thị. Vì chúng tôi đang sử dụng phương pháp bắt đầu nhanh nên ứng dụng của chúng tôi chưa được xác minh. Chỉ cần nhấp vào liên kết hiển thị trên hình ảnh để tiếp tục ngay bây giờ và cho phép truy cập
Hiểu Mã
Mã ví dụ thoạt nhìn có vẻ choáng ngợp, nhưng tôi sẽ chia nó thành các phần nhỏ hơn để giữ cho nó đơn giản. Cuối cùng, bạn sẽ thấy rằng nó thực sự không khó
Nhập khẩu và phạm vi
Như với bất kỳ tập lệnh Python nào khác, chúng tôi sẽ bắt đầu với việc nhập. Hầu hết các lần nhập được sử dụng để ủy quyền với tệp credentials.json
. Tất cả những thứ này được cung cấp theo mặc định nên chúng ta không cần thay đổi gì cả
Tuy nhiên, phạm vi là phần quan trọng nhất. Biến này sẽ được sửa đổi sau, nhưng hiện tại, chúng tôi sẽ giải quyết phạm vi mặc định được cung cấp
Điều này nói lên rằng nó sẽ cho phép chúng tôi truy cập dữ liệu từ phạm vi gmail.readonly
. Có nhiều phạm vi hơn và điều này cho phép một tập hợp các hành động và yêu cầu mà chúng tôi có thể thực hiện đối với API Gmail. Một số yêu cầu khác yêu cầu phạm vi khác
Sau này, chúng tôi sẽ thêm một phạm vi khác để sử dụng các chức năng khác
thông tin đăng nhập
Ủy quyền có lẽ là phần nâng cao nhất của tập lệnh. Hiện tại, chúng tôi sẽ không đi sâu vào vấn đề đó vì nó đã được định cấu hình để hoạt động ngay từ hộp
Đây là phần lấy thông tin đăng nhập mà bạn đã tải xuống từ ________ 56 _______. Đầu tiên, nó tìm tệp
python gmail.py
1. Đó là tệp được tạo sau khi bạn cho phép truy cập vào tài khoản của mình lần đầu tiên. Nếu tệp đã tồn tại, nó sẽ lấy thông tin xác thực từ tệp đó, nghĩa là bạn không phải cho phép truy cập nhiều lầnNếu tệp
python gmail.py
1 không tồn tại, nó sẽ tải thông tin đăng nhập từ tệp credentials.json
của bạn để thay thế. Điều này yêu cầu bạn cho phép truy cập qua trình duyệt web mà bạn đã làm trước đâyTrong cả hai trường hợp, thông tin đăng nhập đều được lưu trong biến
python gmail.py
4 để sử dụng sau nàyAPI
Đây là phần thú vị của kịch bản. Phần tìm nạp dữ liệu từ Gmail API. Như bạn có thể thấy, nó thực sự không quá cao cấp. Đây là phần mà chúng ta sẽ tìm hiểu sâu hơn
python gmail.py
5 được xây dựng bằng cách sử dụng hàm python gmail.py
6 đã nhập trước đó. Thông tin đăng nhập mà chúng tôi nhận được trước đó được chuyển thành đối số cho nóSau đó,
python gmail.py
5 được sử dụng để tìm nạp tất cả các nhãn Gmail cho tài khoản đã được ủy quyền. Dữ liệu được lưu vào biến python gmail.py
8Dòng cuối cùng lưu tất cả các nhãn vào biến
python gmail.py
9. Chúng được định dạng dưới dạng danh sách, do đó giá trị mặc định [ //www.googleapis.com/gmail/v1/users/userId/labels
0 ] được chỉ định nếu danh sách trốngPhần tiếp theo của hướng dẫn này sẽ xem xét tài liệu để hiểu ý nghĩa của điều này
Kết quả
Cuối cùng, tên nhãn được in [nếu có]
Hiểu tài liệuVì vậy, đó là mã ví dụ khởi động nhanh. Tuy nhiên, nó không có nhiều ý nghĩa nếu không đọc tài liệu. Phần này sẽ chỉ cho bạn cách thực sự hiểu những gì được viết trong mã và cách bạn sẽ sử dụng tài liệu để viết mã của riêng mình
Trước tiên, hãy chuyển đến tab “Tham khảo” để truy cập tài liệu
Ở bên trái, một menu tóm tắt lớn được hiển thị. Nó có rất nhiều thông tin, nhưng nó sẽ cực kỳ hữu ích trong bước sắp tới
Khi chúng ta làm việc với nhãn, hãy chọn phần
//www.googleapis.com/gmail/v1/users/userId/labels
1 và phần //www.googleapis.com/gmail/v1/users/userId/labels
2 để biết một số thông tin cơ bản về nhãnChúng tôi được chào đón bởi màn hình này
Một văn bản nói rằng danh sách các phương pháp đó nằm ở cuối trang, cũng như các biểu diễn tài nguyên của nhãn. Thông tin thường được gửi dưới dạng JSON, được xử lý giống như từ điển trong Python
Đây là thông tin mà mỗi nhãn chúng tôi tìm nạp nắm giữ. Nếu kéo xuống sâu hơn, chúng ta sẽ thấy một bảng cung cấp thông tin về từng thuộc tính trong từ điển
Tôi đã đánh dấu phần tên vì chúng tôi đã sử dụng nó trước đây. Chúng tôi đã truy cập vào
//www.googleapis.com/gmail/v1/users/userId/labels
3 của nhãn khi chúng tôi in nhãn trước đó. Như thế nàyTrong trường hợp này,
//www.googleapis.com/gmail/v1/users/userId/labels
4 là một từ điển và chúng tôi truy cập thuộc tính //www.googleapis.com/gmail/v1/users/userId/labels
3 bên trong nó. Chúng tôi có thể truy cập bất kỳ tài sản nào khác có tên ở trên, nhưng hiện tại, //www.googleapis.com/gmail/v1/users/userId/labels
3 vẫn ổnĐiều quan trọng cần lưu ý là
//www.googleapis.com/gmail/v1/users/userId/labels
3 là một chuỗi, nhưng một số giá trị có thể là số nguyên. Dễ dàng tìm thấy trong tài liệuNếu chúng ta tiếp tục cuộn xuống cuối trang, chúng ta sẽ thấy tất cả các phương pháp. Một mô tả ngắn về từng phương pháp được trình bày, cũng như một siêu liên kết đến tài liệu
Bạn sẽ sử dụng các phương pháp khác nhau tùy thuộc vào những gì bạn muốn làm. Ví dụ khởi động nhanh sử dụng phương pháp
//www.googleapis.com/gmail/v1/users/userId/labels
8 để tìm nạp tất cả các nhãn trên tài khoản Gmail. Nếu chúng tôi muốn tạo một nhãn mới, chúng tôi sẽ sử dụng phương pháp //www.googleapis.com/gmail/v1/users/userId/labels
9, mà chúng tôi sẽ thực hiện sauNếu chúng ta quay lại đầu trang và nhìn vào phần tổng quan ở bên trái, bạn sẽ thấy rằng mỗi phương thức đều có nút menu riêng
Phương pháp liệt kê
Hãy xem xét kỹ hơn phương pháp danh sách mà chúng ta đã sử dụng trước đây bằng cách nhấp vào
//www.googleapis.com/gmail/v1/users/userId/labels
8 trên thanh menuĐiều này cung cấp rất nhiều thông tin hữu ích. Đối với người mới bắt đầu, một yêu cầu HTTP GET được gửi tới URL nhãn để tìm nạp tất cả các nhãn
//www.googleapis.com/gmail/v1/users/userId/labels
Chúng ta có thể thực hiện việc này theo cách thủ công bằng cách sử dụng thư viện
list_of_labels = response["labels"]
1 trong Python chẳng hạn. Tuy nhiên, chúng tôi sẽ sử dụng thư viện Google cung cấp trong hướng dẫn nàyCần có sự cho phép, nhưng chúng tôi đã xử lý phần đó trước đó
Và cuối cùng, nhưng không kém phần quan trọng, các tham số mà chúng ta có thể truyền cho phương thức
//www.googleapis.com/gmail/v1/users/userId/labels
8. Như bạn có thể thấy, list_of_labels = response["labels"]
3 là người duy nhất chúng ta có thể vượt qualist_of_labels = response["labels"]
3 là một chuỗi đại diện cho địa chỉ email của người dùng. Thay vào đó, giá trị list_of_labels = response["labels"]
5 có thể được sử dụng để chỉ ra người dùng được xác thực. Chúng tôi thực sự đã sử dụng giá trị list_of_labels = response["labels"]
5 trong mã ví dụChúng ta sẽ sớm đi sâu hơn vào vấn đề này, nhưng trước tiên, chúng ta sẽ đọc qua các phần khác của tài liệu về phương pháp
//www.googleapis.com/gmail/v1/users/userId/labels
8Ủy quyền và phạm vi
Phạm vi nghe có vẻ quen thuộc, đó là bởi vì chúng tôi đã đề cập sơ qua về nó trước đó. Để truy cập phương thức
//www.googleapis.com/gmail/v1/users/userId/labels
8, cần có ít nhất một trong các phạm vi được cung cấpNhư bạn có thể thấy, chúng tôi đã thêm phạm vi gmail.readonly
ở đầu mã của chúng tôi
Phản ứng
Phần cuối cùng cho chúng ta thấy một yêu cầu thành công sẽ trả về những gì. một nội dung ở định dạng JSON. Tất cả các nhãn được lưu trữ dưới dạng danh sách có thể được truy cập bằng phím
python gmail.py
9. Về cơ bản điều nàylist_of_labels = response["labels"]
Chính xác như bạn sẽ sử dụng một từ điển thông thường trong Python
Yêu cầu lập danh sáchBây giờ, hãy nhìn lại phần API trong mã của chúng tôi vì chúng tôi đã thu thập thêm một số thông tin từ tài liệu
Đầu tiên,
python gmail.py
5 được xây dựng bằng thông tin đăng nhập của chúng tôi. Đây chỉ đơn giản là cơ sở được sử dụng để thực hiện các yêu cầu [sử dụng các phương thức mà chúng ta đã thấy trước đây]Tiếp theo, chúng tôi thực sự thực hiện yêu cầu bằng cách sử dụng phương thức danh sách với mã này. Bây giờ nó có thể trông quen thuộc hơn một chút khi chúng tôi đã xem qua các tài liệu
Để dễ dàng chỉ cho bạn cách xây dựng cú pháp, tôi đã mã hóa mã màu cùng với menu để cho bạn thấy API hoạt động như thế nào
Chúng tôi bắt đầu với biến
python gmail.py
5. Chỉ cần làm theo cấu trúc giống như cây, từng phương pháp một, cuối cùng chúng ta sẽ có được phương pháp danh sáchThực sự chúng ta hãy xem xét kỹ hơn phương thức
//www.googleapis.com/gmail/v1/users/userId/labels
8, và đặc biệt là tham số quen thuộc list_of_labels = response["labels"]
3 đã truyền ___22_______5 dưới dạng đối sốNếu cuộn ngược lên trên cùng của tài liệu phương pháp
//www.googleapis.com/gmail/v1/users/userId/labels
8, chúng ta sẽ thấy bản tóm tắt các tham số mà chúng ta đã đề cập trước đó. Tham số list_of_labels = response["labels"]
3 được chỉ định, trong trường hợp chúng tôi không biết nó là gìChúng tôi chỉ cần chuyển nó làm đối số cho phương thức
//www.googleapis.com/gmail/v1/users/userId/labels
8 trong mãNhư bạn có thể nhớ lại, yêu cầu sẽ trả về một từ điển, theo phần phản hồi của tài liệu. Chúng tôi lưu trữ nó trong biến
python gmail.py
8Để truy cập các nhãn, chúng tôi sử dụng phương pháp credentials.json
0 của từ điển. Đối số đầu tiên mà chúng ta chuyển vào là tên của những gì chúng ta muốn lấy [
python gmail.py
9 ] và đối số thứ hai là những gì chúng ta nhận được nếu nó không tìm thấy bất kỳ thứ gì có tên đóNếu không có khóa tên là
python gmail.py
9, một danh sách trống sẽ được trả vềVề cơ bản, đó là cách tài liệu được đọc và cách thức hoạt động của phương pháp
//www.googleapis.com/gmail/v1/users/userId/labels
8. Thay vào đó, hãy thử làm điều gì đó khác từ đầu bằng cách làm theo tài liệu APITạo nhãn mớiHãy sử dụng kiến thức mới tìm được của chúng ta và làm điều gì đó mới mẻ, điều gì đó từ đầu [gần như]
Xóa tất cả mã liên quan đến API khỏi tài liệu của bạn. Chỉ giữ lại các lần nhập, phạm vi và xử lý thông tin xác thực. Chúng tôi sẽ cố gắng tạo nhãn mới thông qua API
Hãy đến trang Tổng quan của các nhãn. Cuộn xuống các phương thức để xem chúng ta cần sử dụng phương thức nào để tạo phương thức của riêng mình
Bạn có thể nhận thấy rằng có một phương pháp được gọi theo nghĩa đen là
//www.googleapis.com/gmail/v1/users/userId/labels
9 mà chúng ta sẽ sử dụng. Đi đến tài liệu của phương pháp đó để xem những gì chúng ta cầnHãy bắt đầu với ủy quyền và phạm vi
Như bạn có thể thấy, chúng tôi yêu cầu ít nhất một trong ba phạm vi hiện có. Tuy nhiên, chúng tôi không có bất kỳ một trong số họ trong mã của chúng tôi. Hãy thêm phạm vi credentials.json
5
Biến credentials.json
6 lấy một danh sách, nghĩa là chúng ta có thể chỉ cần thêm phạm vi mới bằng cách phân tách bằng dấu phẩy
Vì ủy quyền cũ đã được lưu trữ trong tệp
python gmail.py
1 [và tệp đó được sử dụng để ủy quyền miễn là nó tồn tại], chúng tôi cần xóa nó và tạo lại nó với phạm vi mới của chúng tôiChạy lại ứng dụng Python với credentials.json
8 để ủy quyền lại, tuy nhiên, có thể thấy một thay đổi nhỏ
Một phụ thuộc mới được thêm vào. Bạn có thể không hiểu nó vì ngôn ngữ Thụy Điển, nhưng về cơ bản nó nói “Xử lý nhãn. ” Vì vậy, phạm vi mới đã thêm một phụ thuộc mới vào ứng dụng của chúng tôi
Mật mã
Nếu chúng ta nhìn vào phần đầu của tài liệu phương pháp
//www.googleapis.com/gmail/v1/users/userId/labels
9, chúng ta có thể thấy rằng nó khá giống với phương pháp //www.googleapis.com/gmail/v1/users/userId/labels
8. Nó yêu cầu ủy quyền, nó tạo một yêu cầu HTTP POST và cần có tham số list_of_labels = response["labels"]
3Nhưng bằng cách nào đó, chúng tôi cần chuyển nhãn thực tế trong yêu cầu của mình. Nếu chúng tôi cuộn xuống phần thân yêu cầu, chúng tôi sẽ xem cách thực hiện điều đó
Trong phần nội dung yêu cầu của chúng tôi, phải có một nhãn có ít nhất các thuộc tính sau để tạo nhãn
- nhãnListVisibility
- tin nhắnListVisibility
- Tên
Bạn có thể tìm hiểu xem chúng nên thuộc loại nào, cũng như chúng là gì, trong tài liệu
Chính xác như chúng tôi đã nhận dữ liệu trong từ điển, dữ liệu sẽ được gửi dưới dạng từ điển
Tạo nhãn
Đây là một chức năng đơn giản để tạo nhãn. Nó yêu cầu một tên và hai đối số tùy chọn khác. Nếu chúng không được chỉ định, thì gmail.py
2 và gmail.py
3 sẽ được sử dụng làm mặc định
Nhãn được tạo dưới dạng từ điển, sau đó được trả lại
Để tạo nhãn có tên gmail.py
4, chúng tôi sẽ sử dụng cú pháp trên
Gửi yêu cầu tới API
Đã đến lúc thực hiện yêu cầu thực sự tới API và chuyển nhãn của chúng tôi tới tài khoản Gmail của chúng tôi. Hãy làm theo quy trình tương tự như lần trước
Tôi đã đánh mã màu đường dẫn đến phương thức
//www.googleapis.com/gmail/v1/users/userId/labels
9Chúng tôi không thay đổi nhiều so với lệnh gọi API cuối cùng của chúng tôi. Chúng tôi bắt đầu với
python gmail.py
5 mà chúng tôi đã tạo trước đó và thêm từng phương thức cho đến khi chúng tôi đạt được phương thức //www.googleapis.com/gmail/v1/users/userId/labels
9. Tuy nhiên, chúng tôi chưa hoàn thành ở đóNếu chúng tôi cuộn đến phần Tham số của tài liệu, chúng tôi sẽ thấy rằng chúng tôi cần chuyển
list_of_labels = response["labels"]
3 làm tham số, như cuộc gọi cuối cùng của chúng tôiHãy sử dụng lại
list_of_labels = response["labels"]
5, giống như tài liệu gợi ýChúng tôi vẫn còn thiếu một cái gì đó. nhãn thực tế. Bằng cách nào đó, chúng tôi cũng cần chuyển nhãn trong yêu cầu của mình. Hãy cuộn xuống phần thân yêu cầu một lần nữa
Chúng tôi đã tạo nhãn với tất cả các thuộc tính bắt buộc, vì vậy chúng tôi cần chuyển nhãn đó vào phần thân yêu cầu. Điều này được thực hiện bằng cách thêm một tham số khác vào phương thức
//www.googleapis.com/gmail/v1/users/userId/labels
9 có tên là gmail.py
1Hãy chuyển đối tượng
//www.googleapis.com/gmail/v1/users/userId/labels
4 của chúng ta vào đóCuộc gọi thực tế đã hoàn tất, nhưng để thêm một số kiểm tra lỗi, hãy gói nó vào một câu lệnh try/except
Nếu xảy ra sự cố, thông báo lỗi sẽ được in trong bảng điều khiển của chúng tôi. Nếu mọi thứ diễn ra theo kế hoạch, gmail.py
3 sẽ được in [và nhãn sẽ được tạo]
Vì vậy, hãy nhìn lại các phần mã mà chúng tôi đã tạo để thực hiện yêu cầu API mới
Việc xử lý API trên thực tế không quá khó. Quá trình tìm nạp thực tế không yêu cầu nhiều dòng mã — phần phức tạp là ủy quyền mà chúng tôi thậm chí không cần phải tự xử lý
Nếu chúng tôi lưu và chạy mã với credentials.json
8, một nhãn mới sẽ được tạo trong tài khoản Gmail của chúng tôi
Xong
Chúng tôi đã thực hiện thành công lệnh gọi API tới Gmail từ đầu và tạo nhãn của riêng mình. Nguyên tắc cơ bản tương tự cũng áp dụng cho hầu hết các phương pháp khác trong API Gmail và các API Google khác
Vui lòng thử thực hiện các yêu cầu khác chỉ để hiểu rõ về nó. Cách tốt nhất để học là thực hành. Khi bạn bắt đầu hiểu tài liệu, việc tạo cuộc gọi của riêng bạn không khó lắm
Hãy thử tạo bản nháp thư của riêng bạn hoặc tìm nạp tất cả thư trong hộp thư đến của bạn dựa trên truy vấn — mọi thứ đều được chỉ định trong tài liệu
Tôi đã cung cấp mã đầy đủ trên GitHub nếu bạn muốn xem kết quả cuối cùng của ví dụ của chúng tôi. Chúc may mắn với các dự án của bạn và viết mã vui vẻ