Как получить доступ к onedrive в автоматическом режиме без участия пользователя?

Я пытаюсь получить доступ к своим собственным документам и таблицам через API onedrive. Я имею:

import requests

client_id = 'my_id'
client_secret = 'my_secret'
scopes = 'wl.offline_access%20wl.signin%20wl.basic'
response_type = 'token' # also have tried "code"
redirect_uri = 'https://login.live.com/oauth20_desktop.srf'

base_url = 'https://apis.live.net/v5.0/'

r = requests.get('https://login.live.com/oauth20_authorize.srf?client_id=%s&scope=%s&response_type=%s&redirect_uri=%s' % (client_id, scopes, response_type, redirect_uri))
print r.text

(Для моего клиента я также попробовал "Мобильное или настольное клиентское приложение": установите "Да" и "Нет")

Это вернет HTML-код, по которому пользователь может щелкнуть вручную. Поскольку пользователь - это я, и это моя учетная запись, как я могу получить доступ к API без взаимодействия с пользователем?

РЕДАКТИРОВАТЬ #1: Для тех, кто запутался в том, что я ищу, это будет эквивалентно учетной записи службы Google (OAuth2): https://console.developers.google.com/project

1 ответ

Решение

Вы не можете "обойти" взаимодействие с пользователем.

Однако вы очень близки к тому, чтобы заставить его работать. Если вы хотите получить токен доступа в Python, вы должны сделать это через браузер. Вы можете использовать библиотеку веб-браузера, чтобы открыть веб-браузер по умолчанию. Это будет выглядеть примерно так (ваше приложение должно быть настольным):

import webbrowser    
webbrowser.open("https://login.live.com/oauth20_authorize.srf?client_id=foo&scope=bar&response_type=code&redirect_uri=https://login.live.com/oauth20_desktop.srf")

Это приведет вас на страницу авторизации, войдите в систему и примите условия (они будут отличаться в зависимости от области). Он направит вас на страницу, где URL выглядит так:

https://login.live.com/oauth20_desktop.srf?code=<THISISTHECODEYOUWANT>&lc=foo

Скопируйте этот код из браузера и сделайте так, чтобы ваш скрипт Python принял его в качестве входных данных.

Затем вы можете сделать запрос, как описано здесь, используя код, полученный из браузера.

Вы получите ответ, описанный здесь

Другие вопросы по тегам