Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何提取;“下一步行动”;在R控制台中从httr获取响应的字符串?_R_Youtube Api_Httr_Jsonlite - Fatal编程技术网

如何提取;“下一步行动”;在R控制台中从httr获取响应的字符串?

如何提取;“下一步行动”;在R控制台中从httr获取响应的字符串?,r,youtube-api,httr,jsonlite,R,Youtube Api,Httr,Jsonlite,我正在尝试使用YouTube数据API提取YouTube视频的所有评论。我正在使用httr运行我的httpGET查询,它在R控制台中输出响应 我如何访问R控制台响应中输出的nextPageToken字符串?我需要以一种自动方式提取它,这样我就可以继续重新运行我的查询并添加一个pageToken=[nextPageToken]参数,直到它未定义为止,这意味着该视频的所有注释都已提取 请注意,我可以在我的环境中将此查询输出保存为“10个列表”对象,从中可以调用许多标题或将变量转换为数据帧。但是,无法

我正在尝试使用YouTube数据API提取YouTube视频的所有评论。我正在使用
httr
运行我的http
GET
查询,它在R控制台中输出响应

我如何访问R控制台响应中输出的nextPageToken字符串?我需要以一种自动方式提取它,这样我就可以继续重新运行我的查询并添加一个
pageToken=[nextPageToken]
参数,直到它未定义为止,这意味着该视频的所有注释都已提取

请注意,我可以在我的环境中将此查询输出保存为“10个列表”对象,从中可以调用许多标题或将变量转换为数据帧。但是,无法从该存储列表访问“nextPageToken”标题

下面是我对示例视频ID的查询。请注意,这需要一个Google API密钥才能运行:

library(httr)
library(jsonlite)
GET("https://www.googleapis.com/youtube/v3/commentThreads?key=[MyGoogleAPIKey]&textFormat=plainText&part=snippet&videoId=kffacxfA7G4&maxResults=15")
这将产生以下输出,我想在其中保存“nextPageToken”字符串:


非常感谢您的见解。

我不完全确定响应实际上是如何出现的。您可以通过模式匹配应用正则表达式来提取令牌字符串。测试匹配的长度以查看是否存在字符串。我给出了在“token”之前是否有空格和是否没有空格的模式。也许可以把这两个结合成一个,但我怀疑只需要一个

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))
库(stringr)

我不完全确定这种反应实际上是如何出现的。您可以通过模式匹配应用正则表达式来提取令牌字符串。测试匹配的长度以查看是否存在字符串。我给出了在“token”之前是否有空格和是否没有空格的模式。也许可以把这两个结合成一个,但我怀疑只需要一个

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))
库(stringr)

感谢@QHarr,RegEx可能是另一个选项,感谢您提供代码。实际上,我最终使用了curl和fromJOSN包,并能够通过从列表对象中调用它来提取nextpGetOken-不确定为什么这不是httr中的选项..我忘了说查看您的解决方案会很有趣。您可以发布并接受自己的答案。谢谢@QHarr,RegEx可能是另一个选项,谢谢您提供代码。实际上,我最终使用了curl和fromJOSN包,并能够通过从列表对象中调用它来提取nextpGetOken-不确定为什么这不是httr中的选项..我忘了说查看您的解决方案会很有趣。你可以发布并接受自己的答案。