بمجرد تنزيل OneDrive SDK for 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، يجب أن يقوم تطبيقك بالمصادقة لمورد معين. يجب أن يستخدم تطبيقك أولاً مساعد Resource Discovery لمعرفة الخدمة التي يمكنك الوصول إليها. وبعد ذلك، يمكنك إنشاء عميل للوصول إلى تلك الموارد. يستخدم هذا تدفق مصادقة مختلفًا قليلاً عن تدفق التعليمات البرمجية القياسي - لاحظ استخدام 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 مفتوحة المصدر. لمزيد من المعلومات، راجع الأسئلة الشائعة حول قواعد السلوك أو اتصل بـ [email protected] لطرح أي أسئلة أو تعليقات إضافية.