【问题标题】:How to extract "nextPageToken" string from httr GET response in R console?如何从 R 控制台中的 httr GET 响应中提取“nextPageToken”字符串?
【发布时间】:2019-08-20 15:49:12
【问题描述】:

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

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

请注意,我可以在我的环境中将此查询输出保存为“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”字符串:

  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": [
  {

非常感谢您的见解。

【问题讨论】:

    标签: r youtube-api httr jsonlite


    【解决方案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))
    

    【讨论】:

    • 感谢@QHarr,RegEx 可能是另一种选择,感谢您提供代码。我实际上最终使用了 curl 和 fromJOSN 包,并且能够通过从列表对象中调用它来提取 nextPageToken - 不知道为什么这不是 httr 中的一个选项..
    • 我忘了说看看你的解决方案会很有趣。您可以发布并接受您自己的答案。
    猜你喜欢
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 2014-08-30
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多