OAuth и API YouTube - PullRequest
       5

OAuth и API YouTube

2 голосов
/ 18 июля 2011

Я пытаюсь использовать сервисы YouTube с OAuth.Мне удалось получить токены запросов, авторизовать их и преобразовать в токены доступа.

Теперь я пытаюсь использовать эти токены для выполнения запросов к службам YouTube.Например, я пытаюсь добавить видео в плейлист.Поэтому я делаю POST-запрос к

https://gdata.youtube.com/feeds/api/playlists/XXXXXXXXXXXX

, отправляя тело

<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:yt="http://gdata.youtube.com/schemas/2007">
  <id>XXXXXXXXX</id>
</entry>

и с заголовками

Gdata-version: 2
Content-type: application/atom+xml
Authorization: OAuth oauth_consumer_key="www.xxxxx.xx",
                                oauth_nonce="xxxxxxxxxxxxxxxxxxxxxxxxx",
                                oauth_signature="XXXXXXXXXXXXXXXXXXX",
                                oauth_signature_method="HMAC-SHA1",
                                oauth_timestamp="1310985770",
                                oauth_token="1%2FXXXXXXXXXXXXXXXXXXXX",
                                oauth_version="1.0"
X-gdata-key: key="XXXXXXXXXXXXXXXXXXXXXXXXX"

плюснекоторые стандартные заголовки (Host и Content-Length), которые добавляются urllib2 (я использую Python) в момент запроса.

К сожалению, я получаю Error 401: Unknown authorization header, а заголовки ответа

X-GData-User-Country: IT
WWW-Authenticate: GoogleLogin service="youtube",realm="https://www.google.com/youtube/accounts/ClientLogin"
Content-Type: text/html; charset=UTF-8
Content-Length: 179
Date: Mon, 18 Jul 2011 10:42:50 GMT
Expires: Mon, 18 Jul 2011 10:42:50 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Connection: close

В частности, я не знаю, как интерпретировать заголовок WWW-Authenticate, область которого намекает на ClientLogin.

Я также пытался играть с OAuth Playground и заголовок авторизации, отправленный этим сайтом, выглядит точно так же, как у меня, за исключением порядка полей.Все-таки на багге все работает.Ну, почти: я получаю сообщение об ошибке, указывающее на то, что ключ разработчика отсутствует, но это разумно, так как нет возможности добавить его на игровую площадку.Тем не менее, я иду мимо ошибки 401.

Я также попытался вручную скопировать оттуда заголовок авторизации, и я получил Error 400: Bad request.

Что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 19 июля 2011

Оказывается, проблема заключалась в переводе строки до xmlns:yt. Я смог отладить это с помощью ncat, как предложено здесь , и проверить полный ответ.

0 голосов
/ 18 июля 2011

я бы предложил использовать модуль oauth python, потому что он гораздо более прост и заботится о заголовках аутентификации :) https://github.com/simplegeo/python-oauth2, как решение, которое я предлагаю вам кодировать ваши параметры с помощью 'utf-8', у меня былоаналогичная проблема, и решение состояло в том, что Google ожидал строки в кодировке utf-8

...