Tôi không thực sự chắc chắn những gì tôi đang làm. Tôi có nên sử dụng một thư viện cho việc này không? Hay làm nó bằng tay?
Vì vậy, tôi đang cố gắng thực hiện một số công việc với API Withings [//www.withings.com/api] trong Python.
Để thực hiện một số yêu cầu, xác thực OAuth là bắt buộc. Tôi đã trải qua bằng cách sử dụng thư viện yêu cầu và nhận được mã thông báo OAuth và Bí mật, cùng với mã thông báo bí mật tiêu dùng và người tiêu dùng của tôi.
Bây giờ tôi đang ở điểm phải đưa ra yêu cầu và tôi đang gặp phải một số vấn đề. Định dạng cho yêu cầu tôi cần thực hiện như sau [một ví dụ từ API của họ]:
//wbsapi.withings.net/notify?action=subscribe
&callbackurl=http%3a%2f%2fwww.yourdomain.net%2fyourCustomApplication.php
&comment=Your%20Own%20Application%20Description
&oauth_consumer_key=c331c571585e7c518c78656f41582e96fc1c2b926cf77648223dd76424b52b
&oauth_nonce=accbac1b7ee2b86b828e6dc4a5a539b2
&oauth_signature=XfobZMboIg2cRyNKAvyzONHHnKM%3D
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1311842514
&oauth_token=887557411788d5120537c6550fbf2df68921f8dd6f8c7e7f9b441941eb10
&oauth_version=1.0
&userid=831
Theo như tôi có thể nói, đây là một định dạng điển hình với OAuth, ngoại trừ người dùng ở cuối.
Vì vậy, tôi có thể đưa ra yêu cầu như thế này bằng thư viện yêu cầu không? Hoặc một số thư viện khác? Làm thế nào để tôi có được URL đúng, với các trường bình luận và userid và callbackurl? Hay tôi cần phải tạo URL này bằng tay? Nếu đó là trường hợp, cách tốt nhất để làm việc này?
Bất kỳ hỗ trợ nào cũng được đánh giá rất cao, vì tôi đã bị mắc kẹt trong một thời gian.
CHỈNH SỬA
Vì vậy, để làm rõ, tôi hiểu khoảng 98% mã tôi đang được đề cập. Cuối cùng tôi chỉ gặp một vấn đề nhỏ.
Vì vậy, tôi đang ở đây, với mã sau:
from __future__ import unicode_literals
from urlparse import parse_qs
import requests
from requests_oauthlib import OAuth2Session
consumer_key = '**Valid consumer key**'
consumer_secret = '**Valid consumer secret**'
oauth_key = '**Valid oauth key obtained through requests library and OAuth workflow**'
oauth_secret ='**Valid oauth secret obtained through requests library and OAuth workflow**'
verifier = '**Valid consumer key obtained through requests library and OAuth workflow**'
base_url = '//wbsapi.withings.net/notify'
params = {
'action': 'subscribe',
'callbackurl': '**callback URL**',
'comment': '**comment**',
'oauth_consumer_key': '**consumer_key**',
'oauth_nonce': 'etc etc',
'oauth_signature' : '' # >> requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
00:00 Này, Chào mừng bạn đến với Phần 2. Chúng tôi sẽ bắt đầu tiếp theo với việc nói về các tham số chuỗi truy vấn, sau đó chúng tôi sẽ tiếp tục yêu cầu các tiêu đề, các phương thức HTTP khác, thân thông báo và sau đó kiểm tra yêu cầu của bạn. Vì vậy, các tham số chuỗi truy vấn là gì? Chà, họ là một phần của URL gán các giá trị để chỉ định các tham số. Hey, welcome to Section 2. We’re going to get started next with talking about query string parameters, then we’ll continue on to request headers, other HTTP methods, the message body, and then inspecting your request. So, what are query string parameters? Well, they’re the part of the URL which assigns values to specify parameters.
00:19 Họ thường được thêm vào cơ sở của URL, giống như trong ví dụ này, nơi chúng tôi đang tìm kiếm kho lưu trữ. Nó bắt đầu với dấu hỏi [?
], và sau đó bạn có thể thấy một truy vấn được thêm vào.
They’re commonly added to the base of the URL, like in this example where we’re searching repositories.
It starts with the question mark [?
], and then you can see a query added.
00:29 Các ví dụ khác nếu bạn nhớ chúng tôi quay lại .content
từ API REST gốc, đây là một số cặp đó. Một là commit_search_url
, và ở đây bạn có thể thấy nó nói về việc tìm kiếm trong các cam kết.
Other examples—if you remember us returning back our .content
from the Root Rest API,
here are some of those pairs. One was commit_search_url
, and here you can see it talking about searching within the commits.
00:41 Một người khác sẽ là tìm kiếm người dùng và user_search_url
bắt đầu với các tham số của nó ở đây, ngay sau ____10. Các tham số chuỗi truy vấn có thể bao gồm một loạt các đối số. Another would be to search for users, and the user_search_url
starts with its
parameters here, just after
from __future__ import unicode_literals
from urlparse import parse_qs
import requests
from requests_oauthlib import OAuth2Session
consumer_key = '**Valid consumer key**'
consumer_secret = '**Valid consumer secret**'
oauth_key = '**Valid oauth key obtained through requests library and OAuth workflow**'
oauth_secret ='**Valid oauth secret obtained through requests library and OAuth workflow**'
verifier = '**Valid consumer key obtained through requests library and OAuth workflow**'
base_url = '//wbsapi.withings.net/notify'
params = {
'action': 'subscribe',
'callbackurl': '**callback URL**',
'comment': '**comment**',
'oauth_consumer_key': '**consumer_key**',
'oauth_nonce': 'etc etc',
'oauth_signature' : '' # > requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
3 key and its very first value. Like a Google search—are you lucky?—we’re going to find the very first item in our search.
02:38 Và từ đó đối tượng
4 mà Lừa được trả lại, chúng tôi sẽ sử dụng một vài chìa khóa ở đây, một trong số đó là >>> requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
5, và sau đó thứ hai là chúng tôi sẽ rút lại >>> requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
6 và in chúng ra bằng cách sử dụng F-String. Một lần nữa, chỉ cần một lưu ý: bạn sẽ cần Python 3.6 trở lên để sử dụng chúng. And from that >>> requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
>>> requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
4 object that’s being returned back,
we’ll use a couple of keys here—one being the >>> requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
5, and then the second being we’ll pull back the >>> requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
6 and print them out
using f-strings. Again, just a note: you will need Python 3.6 or higher to use these.02:58 Vì vậy, hãy để Lôi lưu và để cho chạy nó. So, let’s save and let’s run it.
03:06 Nó tìm kiếm ngay bây giờ. Được rồi! Đây là những gì nó trở lại. Tên kho lưu trữ là requests
! Chính xác những gì chúng tôi đang tìm kiếm, vì vậy chúng tôi đã có một cú hích tốt. Và nó đã in ra mô tả, mô tả là
8.
It’s searching right now. All right! Here is what it returned back. The repository name is >>> requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
requests
! Exactly what we were looking for,
so we got a good hit. And it printed out the description, the description being
>>> requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
8.03:22 Chúng tôi có thể sửa đổi nó một chút, cố gắng tìm kiếm một kho lưu trữ khác. We could modify it a little bit, try to search a different repository.
03:27 Hãy nói rằng chúng tôi đang tìm kiếm ____ 29 và có lẽ chúng tôi biết .get[]
0 là một tham số. Hãy để lưu lại điều đó và thử lại.
Let’s say we’re searching for
>>> requests.get[
... '//api.github.com/search/repositories',
... params={'q': 'requests+language:python'}
... ]
9… and maybe we know the .get[]
0
as a parameter. Let’s save that and try again. 03:47 Vì vậy, kho lưu trữ đó được đặt tên là .get[]
1. .get[]
2. Tuyệt quá!
So, that repository is named .get[]
1. .get[]
2. Great!