เมื่อคุณดาวน์โหลด OneDrive SDK สำหรับ Python แล้ว ให้เปิดพร้อมท์คำสั่งแล้วพิมพ์คำสั่งต่อไปนี้เพื่อติดตั้ง:
pip install onedrivesdk
ถัดไป รวม SDK ในโปรเจ็กต์ Python ของคุณโดยเพิ่ม:
import onedrivesdk
หากต้องการโต้ตอบกับ OneDrive API แอปของคุณต้องรับรองความถูกต้อง คุณสามารถใช้ตัวอย่างรหัสต่อไปนี้เพื่อดำเนินการดังกล่าว
import onedrivesdk
redirect_uri = 'http://localhost:8080/'
client_secret = 'your_client_secret'
client_id = 'your_client_id'
api_base_url = 'https://api.onedrive.com/v1.0/'
scopes = [ 'wl.signin' , 'wl.offline_access' , 'onedrive.readwrite' ]
http_provider = onedrivesdk . HttpProvider ()
auth_provider = onedrivesdk . AuthProvider (
http_provider = http_provider ,
client_id = client_id ,
scopes = scopes )
client = onedrivesdk . OneDriveClient ( api_base_url , auth_provider , http_provider )
auth_url = client . auth_provider . get_auth_url ( redirect_uri )
# Ask for the code
print ( 'Paste this URL into your browser, approve the app ' s access.' )
print ( 'Copy everything in the address bar after "code=", and paste it below.' )
print ( auth_url )
code = raw_input ( 'Paste code here: ' )
client . auth_provider . authenticate ( code , redirect_uri , client_secret )
โค้ดข้างต้นจำเป็นต้องคัดลอกและวางลงในเบราว์เซอร์ของคุณและกลับเข้าไปในคอนโซลของคุณ หากคุณต้องการลบงานที่ต้องทำเองบางส่วนออก คุณสามารถใช้คลาสตัวช่วย GetAuthCodeServer
คลาสตัวช่วยนั้นจะหมุนเว็บเซิร์ฟเวอร์ ดังนั้นวิธีนี้จึงไม่สามารถใช้กับทุกสภาพแวดล้อมได้
import onedrivesdk
from onedrivesdk . helpers import GetAuthCodeServer
redirect_uri = 'http://localhost:8080/'
client_secret = 'your_app_secret'
scopes = [ 'wl.signin' , 'wl.offline_access' , 'onedrive.readwrite' ]
client = onedrivesdk . get_default_client (
client_id = 'your_client_id' , scopes = scopes )
auth_url = client . auth_provider . get_auth_url ( redirect_uri )
#this will block until we have the code
code = GetAuthCodeServer . get_auth_code ( auth_url , redirect_uri )
client . auth_provider . authenticate ( code , redirect_uri , client_secret )
เมื่อแอปของคุณได้รับการรับรองความถูกต้องแล้ว คุณควรมีสิทธิ์เข้าถึง OneDrive API และสามารถเริ่มโทรออกโดยใช้ SDK ได้
หากต้องการโต้ตอบกับ OneDrive API แอปของคุณต้องรับรองความถูกต้องสำหรับทรัพยากรเฉพาะ แอปของคุณต้องใช้ตัวช่วยการค้นพบทรัพยากรก่อนเพื่อดูว่าคุณสามารถเข้าถึงบริการใดได้บ้าง จากนั้น คุณสามารถสร้างไคลเอ็นต์เพื่อเข้าถึงทรัพยากรเหล่านั้นได้ ซึ่งใช้โฟลว์การรับรองความถูกต้องแตกต่างไปจากโฟลว์โค้ดมาตรฐานเล็กน้อย - โปรดสังเกตการใช้ redeem_refresh_token
กับ service_resource_id
ของบริการที่คุณต้องการเข้าถึง
import onedrivesdk
from onedrivesdk . helpers import GetAuthCodeServer
from onedrivesdk . helpers . resource_discovery import ResourceDiscoveryRequest
redirect_uri = 'http://localhost:8080'
client_id = your_client_id
client_secret = your_client_secret
discovery_uri = 'https://api.office.com/discovery/'
auth_server_url = 'https://login.microsoftonline.com/common/oauth2/authorize'
auth_token_url = 'https://login.microsoftonline.com/common/oauth2/token'
http = onedrivesdk . HttpProvider ()
auth = onedrivesdk . AuthProvider ( http ,
client_id ,
auth_server_url = auth_server_url ,
auth_token_url = auth_token_url )
auth_url = auth . get_auth_url ( redirect_uri )
code = GetAuthCodeServer . get_auth_code ( auth_url , redirect_uri )
auth . authenticate ( code , redirect_uri , client_secret , resource = discovery_uri )
# If you have access to more than one service, you'll need to decide
# which ServiceInfo to use instead of just using the first one, as below.
service_info = ResourceDiscoveryRequest (). get_service_info ( auth . access_token )[ 0 ]
auth . redeem_refresh_token ( service_info . service_resource_id )
client = onedrivesdk . OneDriveClient ( service_info . service_resource_id + '/_api/v2.0/' , auth , http )
หมายเหตุ: ตัวอย่างทั้งหมดถือว่าแอปของคุณได้รับการรับรองความถูกต้องแล้ว
returned_item = client . item ( drive = 'me' , id = 'root' ). children [ 'newfile.txt' ]. upload ( './path_to_file.txt' )
root_folder = client . item ( drive = 'me' , id = 'root' ). children . get ()
id_of_file = root_folder [ 0 ]. id
client . item ( drive = 'me' , id = id_of_file ). download ( './path_to_download_to.txt' )
f = onedrivesdk . Folder ()
i = onedrivesdk . Item ()
i . name = 'New Folder'
i . folder = f
returned_item = client . item ( drive = 'me' , id = 'root' ). children . add ( i )
from onedrivesdk . item_reference import ItemReference
ref = ItemReference ()
ref . id = 'yourparent!id' #path also supported
copy_operation = client . item ( drive = 'me' , id = 'youritemtocopy!id' ). copy ( name = 'new copied name' , parent_reference = ref ). post ()
#copy_operation.item will return None until the copy has completed.
#If you would like to block until the operation has been completed
#and copy_operation.item is no longer None
copy_operation . poll_until_complete ()
renamed_item = onedrivesdk . Item ()
renamed_item . name = 'NewItemName'
renamed_item . id = 'youritemtorename!id'
new_item = client . item ( drive = 'me' , id = renamed_item . id ). update ( renamed_item )
#get the top three elements of root, leaving the next page for more elements
collection = client . item ( drive = 'me' , id = 'root' ). children . request ( top = 3 ). get ()
#get the first item in the collection
item = collection [ 0 ]
#get the next page of three elements, if none exist, returns None
collection2 = onedrivesdk . ChildrenCollectionRequest . get_next_page_request ( collection , client ). get ()
สำหรับการดำเนินการแบบอะซิงก์ คุณสร้าง asyncio.coroutine
ซึ่งใช้ asyncio.ascompleted
และดำเนินการด้วย loop.run_until_complete
import asyncio
@ asyncio . coroutine
def run_gets ( client ):
coroutines = [ client . drive ( 'me' ). request (). get_async () for i in range ( 3 )]
for future in asyncio . as_completed ( coroutines ):
drive = yield from future
print ( drive . id )
loop = asyncio . get_event_loop ()
loop . run_until_complete ( run_gets ( client ))
คุณสามารถบันทึกรายละเอียดเซสชัน OAuth เพื่อจะได้ไม่ต้องผ่านขั้นตอน OAuth เต็มรูปแบบทุกครั้งที่เริ่มแอป โดยทำตามขั้นตอนเหล่านี้:
auth_provider = onedrivesdk . AuthProvider ( http_provider ,
client_id ,
scopes )
auth_provider . authenticate ( code , redirect_uri , client_secret )
# Save the session for later
auth_provider . save_session ()
#### Next time you start the app ####
auth_provider = onedrivesdk . AuthProvider ( http_provider ,
client_id ,
scopes )
auth_provider . load_session ()
auth_provider . refresh_token ()
client = onedrivesdk . OneDriveClient ( base_url , auth_provider , http_provider )
หลังจากการเรียก refresh_token()
AuthProvider
ของคุณจะพร้อมตรวจสอบสิทธิ์การโทรไปยัง OneDrive API การดำเนินการนี้ยังไม่เสร็จสมบูรณ์
Session
ไปใช้ใหม่เพื่อให้เหมาะกับความต้องการของแอปของคุณ.load_session()
อาจทำให้เกิดข้อยกเว้น ขึ้นอยู่กับการใช้งาน Session
ของคุณ ตัวอย่างเช่น การใช้งานเริ่มต้นจะพยายามเปิดไฟล์ session.pickle
ซึ่งอาจไม่มีอยู่และจะเพิ่ม FileNotFoundError
คุณจะต้องคำนึงถึงสิ่งนั้นที่นี่ (หรือที่ดีกว่านั้นคือในการใช้งาน Session
ของคุณ) หากคุณต้องการพรอกซีคำขอของคุณ คุณสามารถใช้คลาสตัวช่วย HttpProviderWithProxy
import onedrivesdk
from onedrivesdk . helpers import http_provider_with_proxy
proxy = {
'http' : 'http://localhost:8888' ,
'https' : 'https://localhost:8888'
}
http = http_provider_with_proxy . HttpProviderWithProxy ( proxy , verify_ssl = True )
auth = onedrivesdk . AuthProvider ( http , my_client_id , [ 'onedrive.readwrite' ])
client = onedrivesdk . OneDriveClient ( my_base_url , auth , http )
คำขอทั้งหมดที่ใช้ไคลเอ็นต์นั้นจะถูกมอบฉันทะ
โครงการนี้ได้นำหลักจรรยาบรรณของ Microsoft Open Source มาใช้ สำหรับข้อมูลเพิ่มเติม โปรดดูคำถามที่พบบ่อยเกี่ยวกับจรรยาบรรณหรือติดต่อ [email protected] หากมีคำถามหรือความคิดเห็นเพิ่มเติม