Как извлечь строку nextPageToken из ответа httr GET в консоли R?

Я пытаюсь извлечь ВСЕ комментарии к видео на YouTube, используя API данных YouTube. Я использую httr для запуска моего http-запроса GET, который выводит ответ в консоли R.

Как я могу получить доступ к строке nextPageToken, выведенной в ответе в консоли R? Мне нужно извлечь это автоматически, чтобы я мог продолжать повторять свой запрос и добавлять аргумент pageToken=[nextPageTokenString] до тех пор, пока он не станет неопределенным, что означает, что все комментарии для этого видео были извлечены.

Обратите внимание, что я могу сохранить этот вывод запроса как объект «Список из 10» в своей среде, из которого я могу вызывать множество заголовков или преобразовывать переменные в фрейм данных. Однако заголовок nextPageToken недоступен из этого сохраненного списка.

Вот мой запрос на примере идентификатора видео. Обратите внимание, что для запуска требуется ключ API Google:

library(httr)
library(jsonlite)
GET("https://www.googleapis.com/youtube/v3/commentThreads?key=[MyGoogleAPIKey]&textFormat=plainText&part=snippet&videoId=kffacxfA7G4&maxResults=15")

Это дает следующий результат, где я хотел бы сохранить строку «nextPageToken»:

  Date: 2019-08-20 15:37
  Status: 200
  Content-Type: application/json; charset=UTF-8
  Size: 18.2 kB
{
 "kind": "youtube#commentThreadListResponse",
 "etag": "\"0UM_wBUsFuT6ekiIlwaHvyqc80M/DpUxU7iuAG44hC52yMW1GzpD7zs\"",
 "nextPageToken": "QURTSl9pMGV3a0U3SzNhazR2bmRsdG1lNXNHYXVtdUF1cDlRemZnR01CRjdnaHFXYTBKRHA5anAtSllmZ2hSakdHeTVnQmJyRmlYbENlREp0cTk0YjVOOGFHdDU3SEw0T3NtT3FicThMS0RvOHFrdE9NUGJrMDliR01fUDVTa24=",
 "pageInfo": {
  "totalResults": 15,
  "resultsPerPage": 15
 },
 "items": [
  {

Заранее большое спасибо за ваши идеи.


person Eliza Riley    schedule 20.08.2019    source источник


Ответы (1)


Я не совсем уверен в том, как на самом деле появляется ответ. Возможно, вы можете применить регулярное выражение для извлечения строки токена путем сопоставления с образцом. Проверьте длину совпадений, чтобы увидеть, присутствует ли строка. Я даю шаблон, если есть пробел и нет пробела перед «токеном». Вероятно, можно объединить эти два в один, но я подозреваю, что нужен только один.

library(stringr)

s <- paste0(
'Date: 2019-08-20 15:37',
'Status: 200',
'Content-Type: application/json; charset=UTF-8',
'Size: 18.2 kB',
'{',
'"kind": "youtube#commentThreadListResponse",',
  '"etag": "\"0UM_wBUsFuT6ekiIlwaHvyqc80M/DpUxU7iuAG44hC52yMW1GzpD7zs\"",',
  '"nextPageToken":"QURTSl9pMGV3a0U3SzNhazR2bmRsdG1lNXNHYXVtdUF1cDlRemZnR01CRjdnaHFXYTBKRHA5anAtSllmZ2hSakdHeTVnQmJyRmlYbENlREp0cTk0YjVOOGFHdDU3SEw0T3NtT3FicThMS0RvOHFrdE9NUGJrMDliR01fUDVTa24=",',
  '"pageInfo": {',
    '"totalResults": 15,',
    '"resultsPerPage": 15',
  '},',
  '"items": [',
    '{')

x <- str_match_all(s,'"nextPageToken":"(.*?)"') #no white space before "token"
token_no_whitespace <- x[[1]][,2]
#test if character(0) i.e. no match so pattern and therefore we assume nextPageToken not present
print(length(token_no_whitespace))

x <- str_match_all(s,'"nextPageToken":\\s+"(.*?)"') #white space before "token"
token_whitespace <- x[[1]][,2]
print(length(token_whitespace))
person QHarr    schedule 20.08.2019
comment
Спасибо @QHarr, RegEx может быть еще одним вариантом, спасибо за предоставленный код. На самом деле я использовал пакеты curl и fromJOSN и смог извлечь nextPageToken, вызвав его из объекта списка - не уверен, почему это не вариант в httr.. - person Eliza Riley; 21.08.2019
comment
Я забыл сказать, что было бы интересно увидеть ваше решение. Вы можете опубликовать и принять свой собственный ответ. - person QHarr; 11.09.2019