2015-02-18 3 views
2

Я пытаюсь получить список файлов на Google Диске с завитом, но OAuth 2 становится лучше меня.list google drive files with curl

Вот некоторые из вещей, которые я пробовал:

curl -H "Authorization: Bearer $token" https://www.googleapis.com/drive/v2/files 

Где $ лексема 460 символов строкой я получил с помощью:

https://www.google.com/accounts/ClientLogin 

и эта загрузка script (который прекрасно работает). Это ошибка, я получил:

{ 
    "error": { 
    "errors": [ 
    { 
     "domain": "global", 
     "reason": "authError", 
     "message": "Invalid Credentials", 
     "locationType": "header", 
     "location": "Authorization" 
    } 
    ], 
    "code": 401, 
    "message": "Invalid Credentials" 
    } 
} 

Также пробовал:

curl https://www.googleapis.com/drive/v2/files?key=apiKey 

Ошибка:

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "required", 
    "message": "Login Required", 
    "locationType": "header", 
    "location": "Authorization" 
    } 
    ], 
    "code": 401, 
    "message": "Login Required" 
} 
} 

И:

curl -H "Authorization: GoogleLogin auth=${token}" "https://www.googleapis.com/drive/v2/files" 

Ошибка:

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "usageLimits", 
    "reason": "dailyLimitExceededUnreg", 
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.", 
    "extendedHelp": "https://code.google.com/apis/console" 
    } 
    ], 
    "code": 403, 
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup." 
} 
} 

У меня был небольшой успех как с клиентскими библиотеками JavaScript, так и с PHP, оба оптимизированы для ситуации, когда пользователь предоставляет журнал/пропуск для авторизации приложения. Мне нужно, чтобы каждый раз перечислять файлы из одной учетной записи.

ответ

5

Для будущих Googlers:

Если вы хотите, чтобы спасти себя днем ​​боли, забыть doumentation и глава компании Google над here

Суть его, так как я знаю, StackOverflow предпочитает цитировать содержание для ссылки:

В вашем браузере:

https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fanalytics&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&client_id=1234567890.apps.googleusercontent.com 

Разрешить доступ, конечно, и скопировать код, который должен выглядят как 4/v6xr77ewYqjkslsdUOKwAzu

curl -H "Content-Type: application/x-www-form-urlencoded" -d 'code=4/v6xr77ewYqjkslsdUOKwAzu&client_id=1234567890.apps.googleusercontent.com&client_secret=xywzxywzxywzxywzxywz&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code' https://accounts.google.com/o/oauth2/token 

Вы получите JSON, как этот:

{ 
    "access_token" : "ya29.AHES6Zkjhkjhahskjhskkskjh", 
    "token_type" : "Bearer", 
    "expires_in" : 3600, 
    "refresh_token" : "1/HH9E7k5D0jakjhsd7askdjh7899a8sd989" 
} 

Если вы свернуться:

curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.AHES6Zkjhkjhahskjhskkskjh' 

вы получите что-то вроде:

{ 
"issued_to": "562211803675.apps.googleusercontent.com", 
"audience": "562211803675.apps.googleusercontent.com", 
"scope": "https://www.googleapis.com/auth/analytics", 
"expires_in": 3556 
} 

Выполнено

curl 'https://www.googleapis.com/analytics/v3/management/accounts?access_token=ya29.AHES6Zkjhkjhahskjhskkskjh 

Заменить маркер

Вы должны использовать «refresh_token» получил ранее

curl -d "client_id=562211803675.apps.googleusercontent.com&client_secret=ZQxoOBGbvMGnZOYUrVIDXrgl&refresh_token=1/HH9E7k5D0jakjhsd7askdjh7899a8sd989&grant_type=refresh_token" https://accounts.google.com/o/oauth2/token 

и вы получите новый access_token.

+1

Но это аналитика ... она работает одинаково для дисков. Я еще не смог получить токен доступа для этой области, используя это описание. – Fildor

3

Я просто потратил около 30 минут, чтобы понять это для доступа к API-интерфейсам контактов и повторить шаги для API-интерфейсов дисков и задокументировать их для дальнейшего использования. Есть 5 шагов, а первые 4 - одна установка времени.

Шаг 1: Создать новые учетные данные OAuth2

Create API Manager > Credentials > OAuth Client ID

Application type = Other, Name = curl-client

enter image description here

Примечание вниз client ID и client secret.

Этап 2: Запросить разрешение с приводом как с прицелом.

Использование client ID и https://docs.google.com/feeds как scope, построить под завиток команду:

$ curl -d "client_id=413437979384-05efiod756k5hp2eji5tsn2lmlg0qslc.apps.googleusercontent.com&scope=https://docs.google.com/feeds" https://accounts.google.com/o/oauth2/device/code 
{ 
    "device_code" : "KRYU-NTVW4/qi6ysOpK2AtsmtZz4MB9LAthlYGGgAepxpBnGQLvhqo", 
    "user_code" : "KRYU-NTVW", 
    "verification_url" : "https://www.google.com/device", 
    "expires_in" : 1800, 
    "interval" : 5 
} 

Скопируйте user_code.

Этап 3: Авторизовать запрос.

Посетите URL-адрес проверки https://www.google.com/device и введите скопированный код.

Paste the code and press Next

Press Allow

Шаг 4: Получить access_token.

Добавить device_code полученные из запроса Идента к client ID и client secret и построить под завитком команды:

$ curl -d "client_id=413437979384-05efiod756k5hp2eji5tsn2lmlg0qslc.apps.googleusercontent.com&client_secret=0zWNribRJ4PcYWH-rDkCpCcm&grant_type=http://oauth.net/grant_type/device/1.0&code=KRYU-NTVW4/qi6ysOpK2AtsmtZz4MB9LAthlYGGgAepxpBnGQLvhqo" https://www.googleapis.com/oauth2/v4/token 
{ 
"access_token": "ya29.kgKW4Z4IDqK7lCjUQw-u5VT2uAx19MtgdoKeAC9ikKYGwKh7Nh46pY8nQsANQ5lRwA", 
"token_type": "Bearer", 
"expires_in": 3600, 
"refresh_token": "1/qinFVaMPYvhWtUtmjb1qCpnQt48XyvQhB_ILZJ4H1Uw" 
} 

Теперь у нас есть необходимый access_token, сохранить его и использовать его со всеми запросами API привода REST ,

Этап 5: Запрос API привода.

$ curl -H 'GData-Version: 3.0' -H 'Authorization: Bearer ya29.kgKW4Z4IDqK7lCjUQw-u5VT2uAx19MtgdoKeAC9ikKYGwKh7Nh46pY8nQsANQ5lRwA' https://www.googleapis.com/drive/v2/files 
{ 
"kind": "drive#fileList", 
...