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