Ошибка при попытке получить токен в YouTube Analytics API в R

Я пытаюсь подключить YouTube Analytics API, следуя следующей документации:

https://developers.google.com/youtube/reporting/guides/authorization/server-side-web-apps

Согласно документации должен быть получен параметр «code». На этом шаге у меня нет проблем, и я получаю следующее:

Закодировано:

4%2FAADopgcKaRx1vdX0mKP9Te-gwLwA54sgV14x6Qug28p944l3MasxIu9GLE6I4xFVMZrQbId_zXLQlOBtvV1ffsI#

Не закодировано:

4/AADopgcKaRx1vdX0mKP9Te-gwLwA54sgV14x6Qug28p944l3MasxIu9GLE6I4xFVMZrQbId_zXLQlOBtvV1ffsI

Итак, следующий шаг согласно документации - «Код авторизации Exchange для обновления и токенов доступа». В основном получают токен, и что они делают:

введите здесь описание изображения

Я делаю то же самое в R, выполняя следующий код:

Код в R для создания POST

library(httr)

login<-list(
  code="4%2FAADopgcKaRx1vdX0mKP9Te-gwLwA54sgV14x6Qug28p944l3MasxIu9GLE6I4xFVMZrQbId_zXLQlOBtvV1ffsI#",
  client_id="118642749887-1vvc0ckk3m601dv4rk6hefbmpqdjkvob.apps.googleusercontent.com",
  client_secret="2IFSNl88dd5peFlwVupXLCM6",
  redirect_uri="http://localhost:1410/code",
  grant_type="authorization_code"
)


url<-"https://www.googleapis.com/oauth2/v4/token?"

req <- POST(url,
            add_headers(
                        "Content-Type" = "application/x-www-form-urlencoded"
                       ),
            body = login,
            verbose()
)

Ответ

>req
Response [https://www.googleapis.com/oauth2/v4/token?]
  Date: 2018-03-07 13:40
  Status: 400
  Content-Type: application/json; charset=UTF-8
  Size: 85 B
{
 "error": "unsupported_grant_type",
 "error_description": "Invalid grant_type: "
}

Это означает, что я указываю неверный параметр grant_type, но я делаю то, что сказано в документации.

Кто-нибудь может мне помочь решить эту проблему?

Заранее спасибо.


person Henry Navarro    schedule 07.03.2018    source источник


Ответы (1)


Танец oauth по обмену кодом авторизации для обновления и токенов доступа полностью управляется httr, поэтому вам не нужно явно выполнять какую-либо из этих работ. Вот пример использования моего собственного ключа и секрета для вывода 5 лучших результатов поиска на Youtube по запросу «серфинг».

key <- "526767977974-i8pn4vvaga2utiqmeblfnpakflgq964n.apps.googleusercontent.com"
secret <- "tNJixXCExE30f_ARBzb6e4hC"
myapp <- oauth_app("google", key, secret)
token <- oauth2.0_token(oauth_endpoints("google"),
                        myapp,
                        scope=c("https://www.googleapis.com/auth/youtube.readonly", 
                                "https://www.googleapis.com/auth/yt-analytics.readonly"))

url = "https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=5&q=surfing"
req <- GET(url, token)
content(req)

Это использует API данных Youtube. Если вы хотите использовать Analytics API, он обычно включает в себя создание отчетов по каналам, которыми вы владеете. Вот пример вызова, в котором я получаю собственный отчет о канале.

query_parms <- paste0("ids=channel==MINE",
                      "&dimensions=video",
                      "&startDate=2018-02-01",
                      "&endDate=2018-02-28",
                      "&metrics=estimatedMinutesWatched,views,likes,subscribersGained",
                      "&maxResults=10",
                      "&sort=-estimatedMinutesWatched")

url <- paste0("https://youtubeanalytics.googleapis.com/v2/reports?", query_parms)
req <- GET(url, token)
parsed_req <- content(req)
person Steven M. Mortimer    schedule 08.03.2018
comment
ОБНОВЛЕНИЕ start-date теперь startDate, end-date теперь endDate, max-results теперь maxResults, а базовый URL теперь https://youtubeanalytics.googleapis.com/v2/reports? - person Jacob; 23.11.2019