Cách lấy api của 1 trang web bằng python
Thứ tư, 20/03/2019 | 00:00 GMT+7 Show Giao diện API hoặc A pplication P rogram I cho phép các nhà phát triển tích hợp ứng dụng này với ứng dụng khác. Chúng tiết lộ một số hoạt động bên trong của chương trình một cách hạn chế. Bạn có thể sử dụng API để lấy thông tin từ các chương trình khác hoặc để tự động hóa những việc bạn thường làm trong trình duyệt web của bạn . Đôi khi bạn có thể sử dụng API để làm những việc mà bạn không thể làm theo bất kỳ cách nào khác. Một số lượng đáng ngạc nhiên thuộc tính web cung cấp các API dựa trên web cùng với trang web hoặc ứng dụng di động quen thuộc hơn, bao gồm Twitter, Facebook, GitHub và DigitalOcean. Nếu bạn đã làm theo cách của bạn thông qua một số hướng dẫn về cách viết mã bằng Python 3 và bạn thấy phù hợp với cú pháp, cấu trúc và một số hàm tích hợp của Python, bạn có thể viết các chương trình Python tận dụng các API yêu thích của bạn . Trong hướng dẫn này, bạn sẽ học cách sử dụng Python với API DigitalOcean để truy xuất thông tin về account DigitalOcean của bạn. Sau đó, ta sẽ xem xét cách bạn có thể áp dụng những gì bạn đã học được vào API của GitHub . Khi bạn hoàn thành, bạn sẽ hiểu các khái niệm phổ biến trên các API web và bạn sẽ có quy trình từng bước và các mẫu mã làm việc mà bạn có thể sử dụng để thử API từ các dịch vụ khác. Yêu cầuTrước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:
Bước 1 - Làm quen với APIBước đầu tiên trong việc sử dụng một API mới là tìm tài liệu và lấy vòng bi của bạn. Tài liệu API DigitalOcean bắt đầu tại https://developers.digitalocean.com/ . Để tìm các API cho các dịch vụ khác, hãy tìm kiếm tên của trang web và “API” - không phải tất cả các dịch vụ đều quảng cáo chúng trên trang đầu của chúng. Một số dịch vụ có shell bọc API . Shell bọc API là mã mà bạn cài đặt trên hệ thống của bạn để làm cho các API dễ sử dụng hơn bằng ngôn ngữ lập trình bạn đã chọn. Hướng dẫn này không sử dụng bất kỳ shell bọc nào bởi vì chúng ẩn nhiều hoạt động bên trong của các API và thường không tiết lộ mọi thứ mà API có thể làm. Shell bọc có thể tuyệt vời khi bạn muốn hoàn thành việc gì đó một cách nhanh chóng, nhưng hiểu rõ về những gì bản thân các API có thể làm sẽ giúp bạn quyết định xem shell bọc có phù hợp với mục tiêu của bạn hay không. Trước tiên, hãy xem Giới thiệu API DigitalOcean tại https://developers.digitalocean.com/documentation/v2/ và cố gắng chỉ hiểu những điều cơ bản về cách gửi yêu cầu và những gì mong đợi trong phản hồi. Đến đây, bạn chỉ đang cố gắng học ba điều:
API DigitalOcean sử dụng các phương thức HTTP (đôi khi được gọi là động từ ) để cho biết bạn đang cố đọc thông tin hiện có, tạo thông tin mới hay xóa nội dung nào đó. Phần này của tài liệu giải thích những phương pháp nào được sử dụng và cho những mục đích nào. Nói chung, yêu cầu GET đơn giản hơn yêu cầu ĐĂNG, nhưng khi hoàn thành ở đây, bạn sẽ không nhận thấy nhiều sự khác biệt. Phần tiếp theo của tài liệu API thảo luận về cách server sẽ phản hồi các yêu cầu của bạn. Nói chung, một yêu cầu thành công hoặc không thành công. Khi nó không thành công, nguyên nhân là do yêu cầu có vấn đề gì đó hoặc sự cố trên server . Tất cả thông tin này được truyền đạt bằng mã trạng thái HTTP , là các số có 3 chữ số được chia thành các loại.
Mã của bạn phải luôn kiểm tra mã trạng thái HTTP để tìm bất kỳ phản hồi nào trước khi cố gắng làm bất cứ điều gì với nó. Nếu bạn không làm điều này, bạn sẽ thấy mình lãng phí thời gian khắc phục sự cố với thông tin không đầy đủ. Đến đây bạn đã có ý tưởng chung về cách gửi yêu cầu và những gì cần tìm trong phản hồi, đã đến lúc gửi yêu cầu đầu tiên đó. Bước 2 - Lấy thông tin từ API WebTài khoản DigitalOcean của bạn bao gồm một số thông tin quản trị mà bạn có thể chưa thấy trong giao diện user Web. Một API có thể cung cấp cho bạn một cái nhìn khác về thông tin quen thuộc. Việc chỉ nhìn thấy chế độ xem thay thế này đôi khi có thể khơi dậy ý tưởng về những gì bạn có thể cần làm với API hoặc tiết lộ các dịch vụ và tùy chọn mà bạn chưa biết. Hãy bắt đầu bằng cách tạo một dự án cho các tập lệnh của ta . Tạo một folder mới cho dự án có tên là
Sau đó, chuyển vào folder mới này:
Tạo một virtualenv mới cho dự án này:
Kích hoạt virtualenv:
Sau đó, cài đặt thư viện yêu cầu , mà ta sẽ sử dụng trong các tập lệnh của bạn để thực hiện các yêu cầu HTTP trong các tập lệnh của ta :
Với môi trường được cấu hình , hãy tạo một file Python mới có tên do_get_account.py
Các câu lệnh Tiếp theo, ta muốn cài đặt một số
biến để lưu giữ thông tin sẽ giống nhau trong mọi yêu cầu. Điều này giúp ta không phải nhập lại nhiều lần và cung cấp cho ta một nơi duy nhất để cập nhật trong trường hợp có bất kỳ điều gì thay đổi. Thêm các dòng này vào file , sau các câu lệnh do_get_account.py
Biến Tiếp theo, ta cần cài đặt tiêu đề yêu cầu HTTP theo cách mà tài liệu API mô tả. Thêm các dòng này vào file để cài đặt từ điển chứa các tiêu đề yêu cầu của bạn: do_get_account.py
Điều này đặt hai tiêu đề cùng một lúc. Tiêu đề
Bây giờ ta đã có các chi tiết cài đặt này, đã đến lúc thực sự gửi yêu cầu. Xu hướng của bạn có thể là chỉ bắt đầu tạo và gửi các yêu cầu, nhưng có một cách tốt hơn. Nếu bạn đặt logic này vào một hàm xử lý việc gửi yêu cầu và đọc phản hồi, bạn sẽ phải suy nghĩ rõ ràng hơn một chút về những gì bạn đang làm. Bạn cũng sẽ nhận được mã giúp cho việc thử nghiệm và sử dụng lại đơn giản hơn. Đó là những gì ta sẽ làm. Hàm này sẽ sử dụng các biến bạn đã tạo để gửi yêu cầu và trả về thông tin account trong từ điển Python. Để giữ cho logic rõ ràng ở giai đoạn đầu này, ta sẽ không thực hiện bất kỳ xử lý lỗi chi tiết nào, nhưng ta sẽ sớm bổ sung điều đó. Xác định chức năng tìm nạp
thông tin account . Luôn luôn là một ý kiến hay khi đặt tên cho một hàm theo chức năng của nó: Hàm này lấy thông tin account , vì vậy ta sẽ gọi nó là do_get_account.py
Ta xây dựng giá trị cho Biến Tiếp theo, ta xem xét mã trạng thái HTTP của phản hồi. Nếu đó là Nếu phản hồi không phải là Bây giờ hãy gọi hàm này, kiểm tra đảm bảo rằng nó có phản hồi tốt và in ra các chi tiết mà API trả về: do_get_account.py
Nếu không phải là Nếu không (nghĩa là nếu Hãy tạm dừng một phút ở đây. Câu lệnh Bạn có
thể làm theo cách khác nếu thích và có thể là một bài tập tốt để tự viết mã đó. Thay vì Lưu tập lệnh và dùng thử:
Đầu ra sẽ giống như sau:
Đến đây bạn biết cách lấy dữ liệu từ một API. Tiếp theo, ta sẽ chuyển sang một thứ thú vị hơn một chút - sử dụng API để thay đổi dữ liệu. Bước 3 - Sửa đổi thông tin trên serverSau khi thực hành với yêu cầu chỉ đọc, đã đến lúc bắt đầu áp dụng các thay đổi . Hãy khám phá điều này bằng cách sử dụng Python và API DigitalOcean để thêm SSH key vào account DigitalOcean của bạn. Trước tiên, hãy xem tài liệu API cho SSH key , có sẵn tại /.2808.anews . API cho phép bạn liệt kê các SSH key hiện tại trên account của bạn và cũng cho phép bạn thêm các khóa mới. Yêu cầu lấy danh sách SSH key rất giống yêu cầu lấy thông tin account . Tuy nhiên, phản hồi là khác nhau: không giống như một account , bạn có thể có 0, một hoặc nhiều SSH key . Tạo một file mới cho tập lệnh này có tên do_ssh_keys.py
Hàm ta sẽ tạo để lấy SSH key tương tự như hàm ta đã sử dụng để lấy thông tin account , nhưng lần này ta sẽ xử lý lỗi trực tiếp hơn. Đầu tiên, ta sẽ thực hiện cuộc gọi API và lưu trữ các phản ứng trong một Thêm mã này vào tập lệnh: do_ssh_keys.py
Bây giờ, hãy thêm một số xử lý lỗi bằng cách xem mã trạng thái HTTP trong phản hồi. Nếu là Thêm các dòng này vào hàm do_ssh_keys.py
Mã này xử lý sáu điều kiện lỗi khác nhau bằng cách xem mã trạng thái HTTP trong phản hồi.
Điều đó sẽ xử lý bất kỳ lỗi nào mà ta có thể gặp phải khi gọi API. Đến đây, ta có thông báo lỗi và đối tượng do_ssh_keys.py
Vì phản hồi chứa danh sách (hoặc mảng) SSH key , ta muốn lặp lại toàn bộ danh sách để xem tất cả các khóa. Ta sử dụng
phương pháp Ta sử dụng Thông tin của mỗi khóa được trả về dưới dạng từ điển, vì vậy ta sử dụng mã tương tự
Chạy tập lệnh này và bạn sẽ nhận được danh sách các SSH key đã có trong account của bạn .
Đầu ra sẽ giống như thế này, tùy thuộc vào số lượng SSH key bạn đã có trong account của bạn .
Đến đây bạn có thể liệt kê các SSH key trên account của bạn , tập lệnh cuối cùng của bạn ở đây sẽ là một tập lệnh thêm khóa mới vào danh sách. Trước khi có thể thêm SSH key mới, ta cần tạo một khóa. Để có cách xử lý đầy đủ hơn về bước này, hãy xem hướng dẫn Cách cài đặt SSH key . Tuy nhiên, đối với mục đích của ta , ta chỉ cần một key đơn giản. Thực thi lệnh này để tạo một lệnh mới trên Linux, BSD hoặc MacOS. Bạn có thể làm điều này trên Server hiện có, nếu bạn thích.
Khi được yêu cầu , hãy nhập file để lưu khóa và không cung cấp passphrase (password bảo vệ) .
Ghi lại nơi lưu file public key , vì bạn cần nó cho tập lệnh. Bắt đầu một tập lệnh Python mới và gọi nó là add_ssh_key.py
Ta sẽ sử dụng một hàm để thực hiện yêu cầu của bạn , nhưng hàm này sẽ hơi khác một chút. Tạo một hàm có tên add_ssh_key.py
Dòng Tiếp theo, ta tạo một từ điển Python có tên Tuy nhiên, khi ta gửi yêu cầu, có một số thứ mới hơn
một chút. Đó là Theo API, phản hồi sẽ là HTTP Thêm mã xử lý lỗi sau vào hàm add_ssh_key.py
Hàm này, giống như các hàm trước, trả về Tiếp theo, gọi hàm và xử lý kết quả. Chuyển đường dẫn đến SSH key mới tạo của bạn làm đối số thứ hai: add_ssh_key.py
Chạy tập lệnh này và bạn sẽ nhận được phản hồi cho bạn biết rằng khóa mới của bạn đã được thêm vào.
Đầu ra sẽ giống như sau:
Nếu bạn quên thay đổi điều kiện “thành công” để tìm kiếm HTTP Khi bạn đã thêm thành công khóa bằng tập lệnh này, hãy chạy lại để xem điều gì sẽ xảy ra khi bạn cố gắng thêm một khóa đã có. API sẽ gửi lại phản hồi HTTP
Bây giờ hãy chạy lại tập lệnh Với những sửa đổi nhỏ, hai tập lệnh này có thể là một cách nhanh chóng để thêm SSH key mới vào account DigitalOcean của bạn khi nào bạn cần. Các chức năng liên quan trong API này cho phép bạn đổi tên hoặc xóa một khóa cụ thể bằng cách sử dụng dấu fingerprint hoặc ID khóa duy nhất của nó. Hãy xem xét một API khác và xem các kỹ năng bạn vừa học được dịch như thế nào. Bước 4 - Làm việc với một API khácGitHub cũng có một API. Mọi thứ bạn đã học về cách sử dụng API DigitalOcean đều có thể áp dụng trực tiếp cho việc sử dụng API GitHub. Làm quen với API GitHub giống như cách bạn đã làm với DigitalOcean. Tìm kiếm tài liệu API và đọc lướt phần Tổng quan . Bạn sẽ thấy ngay rằng API GitHub và API DigitalOcean có một số điểm tương đồng. Đầu tiên, bạn sẽ nhận thấy rằng có một root chung cho tất cả các URL API: API của GitHub sử dụng JSON làm định dạng yêu cầu và phản hồi, giống như DigitalOcean, vì vậy bạn biết cách thực hiện các yêu cầu đó và xử lý phản hồi. Phản hồi bao gồm thông tin về giới hạn tốc độ trong tiêu đề phản hồi HTTP, sử dụng các tên gần như giống nhau và chính xác các giá trị giống như DigitalOcean. GitHub sử dụng OAuth để xác thực và bạn có thể gửi mã thông báo của bạn trong tiêu đề yêu cầu. Các chi tiết của mã thông báo đó hơi khác một chút, nhưng cách nó được sử dụng giống với cách bạn đã thực hiện với API của DigitalOcean. Cũng có một số khác biệt. GitHub khuyến khích sử dụng tiêu đề yêu cầu để cho biết version API bạn muốn sử dụng. Bạn biết cách thêm tiêu đề vào các yêu cầu trong Python. GitHub cũng muốn bạn sử dụng một chuỗi API GitHub sử dụng các phương
thức yêu cầu HTTP tương tự, nhưng cũng sử dụng một phương thức mới gọi là Không phải tất cả các lệnh gọi API GitHub đều yêu cầu xác thực. Ví dụ: bạn có thể lấy danh sách kho của user mà không cần mã thông báo truy cập. Hãy tạo một script để thực hiện yêu cầu đó và hiển thị kết quả. Ta sẽ đơn giản hóa việc xử lý lỗi trong tập lệnh này và chỉ sử dụng một câu lệnh để xử lý tất cả các lỗi có thể xảy ra. Không phải lúc nào bạn cũng cần mã để xử lý từng loại lỗi riêng biệt, nhưng bạn nên làm điều gì đó với các điều kiện lỗi, nếu chỉ để nhắc nhở bản thân rằng mọi thứ không phải lúc nào cũng đi theo cách bạn muốn . Tạo một file mới có tên github_list_repos.py
Hàng nhập khẩu giống như hàng ta đang sử dụng. Các tiêu đề bao gồm hai trong số các tiêu đề tùy chọn mà GitHub đề cập trong phần tổng quan của chúng, cộng với một tiêu đề cho biết ta đang gửi dữ liệu có định dạng JSON theo yêu cầu của ta . Mặc dù đây là một tập lệnh nhỏ, ta vẫn sẽ xác định một hàm để giữ logic của ta theo module và đóng gói logic để thực hiện yêu cầu. Thông thường, các tập lệnh nhỏ của bạn sẽ phát triển thành các tập
lệnh lớn hơn, vì vậy sẽ rất hữu ích nếu bạn cần chăm chỉ về điều này. Thêm một hàm có tên github_list_repos.py
Bên trong hàm, ta tạo URL từ Bây giờ, hãy gọi hàm và nhập tên user GitHub mà bạn muốn sử dụng. Ta sẽ sử dụng github_list_repos.py
Lưu file và chạy tập lệnh để xem các repository cho user bạn đã chỉ định.
Bạn sẽ thấy nhiều dữ liệu trong kết quả vì ta chưa phân tích cú pháp phản hồi dưới dạng JSON trong ví dụ này, cũng như chưa lọc kết quả thành các khóa cụ thể. Sử dụng những gì bạn đã học trong các tập lệnh khác để làm điều đó. Nhìn vào kết quả bạn nhận được và xem liệu bạn có thể in ra tên repository hay không. Một điều thú vị về các API GitHub này là bạn có thể truy cập các yêu cầu mà bạn không cần xác thực trực tiếp trong trình duyệt web của bạn , Điều này cho phép bạn so sánh các phản hồi với những gì bạn thấy trong tập lệnh của bạn . Hãy thử truy cập https://api.github.com/orgs/octokit/repos trong trình duyệt của bạn để xem phản hồi ở đó. Bây giờ, bạn đã biết cách đọc tài liệu và viết mã cần thiết để gửi các yêu cầu cụ thể hơn nhằm hỗ trợ các mục tiêu của bạn với API GitHub. Bạn có thể tìm thấy mã hoàn chỉnh cho tất cả các ví dụ trong hướng dẫn này trong kho lưu trữ này trên GitHub . Kết luận Trong hướng dẫn này, bạn đã học cách sử dụng API web cho hai dịch vụ khác nhau với phong cách hơi khác nhau. Bạn đã thấy tầm quan trọng của việc bao gồm mã xử lý lỗi để giúp gỡ lỗi dễ dàng hơn và các tập lệnh mạnh mẽ hơn. Bạn đã sử dụng các Và hơn thế nữa, bây giờ bạn có một quy trình lặp lại để làm theo khi học bất kỳ API web mới nào:
Bây giờ, hãy củng cố kiến thức mới thu được này và tìm một API khác để sử dụng hoặc thậm chí là một tính năng khác của một trong các API bạn đã sử dụng ở đây. Một dự án của bạn sẽ giúp củng cố những gì bạn đã học ở đây. Tags: Các tin liên quan
Cách thu thập thông tin một trang web với Scrapy và Python 3 |