如何使用 R 在 DataForSEO API 中获取 Rising 'google_trends_queries_list'

问题描述 投票:0回答:1

如何从 DataforSEO API 集成中提取 Google Trends 的所有 Rising 相关查询到单/一列数据框架?

我运行下面的脚本没有错误,但仍然没有得到结果。 “res_json”根本不显示上升的关键字。

设置实时“Google Trends Explore”任务文档: https://docs.dataforseo.com/v3/keywords_data/google_trends/explore/live/

library(httr) 
library(jsonlite)

username <- "YOUR_EMAIL" 
password <- "YOUR_API_PASSWORD"

headers = c(   `Authorization` = paste('Basic',base64_enc(paste0(username,":",password))),   `Content-Type` = 'application/json' )

data = paste0('[{"api": "keywords_data","function": "explore","se": "google_trends","location_code": 2840,"category_code": 0,"type": "web","time_range": "past_7_days","keywords": ["coffee","coffee machine","coffee shop"]}]')

res <- POST(url = 'https://api.dataforseo.com/v3/keywords_data/google_trends/explore/live', httr::add_headers(.headers=headers), body = data)

res_text <- content(res, "text")

res_json <- fromJSON(res_text, flatten = TRUE)
r dataframe extract keyword jsonlite
1个回答
0
投票

我使用了 rjsoncons CRAN 包和 JMESPath 查询语言。

library(rjsoncons)

简短的答案可能类似于(取决于您查询的具体情况)

query <- "
tasks[].result[].items[?type=='google_trends_queries_list'].data.rising | 
[][]"
j_pivot(json, query, as = "data.frame")

为了解释这一点,我查看了您引用的页面,其中包括响应架构和带有示例查询/响应的侧边栏。我将完整的示例响应复制到 R 中(我仅显示前几行)

json <- '{
  "version": "0.1.20220420",
  "status_code": 20000,
  "status_message": "Ok.",
  ...

然后以交互方式探索它

listviewer::jsonedit(json)

响应是一个带有“任务”字段的对象。 “任务”字段是一个对象数组,每个对象都包含一个“结果”字段。 “结果”字段是一个对象数组,每个对象都包含一个“项目”字段。 “items”字段是一个对象数组,每个对象都包含一个“type”字段。 “类型”字段标识项目中的信息。为了查找每个项目的类型,我使用了以下 JMESPath 表达式,以及

j_query()
函数来查询 JSON 对象

query <- "tasks[].result[].items[].type"
j_query(json, query)
## ["google_trends_graph","google_trends_map","google_trends_topics_list","google_trends_queries_list"] 

很好,响应中有一个“google_trends_queries_list”。我更新了查询以使用

items[?type == 'google_trends_queries_list']
仅选择此项,然后查看“数据”对象和“上升”数组

query <- "tasks[].result[].items[?type=='google_trends_queries_list'].data.rising"
j_query(json, query)
## [[[]]]

对于这个特定的响应,“rising”字段由零长度数组组成。

让我们使用“google_trends_topics_list”继续该示例。以下查询告诉我该项目中有 15 个“上升”元素

query <- "tasks[].result[].items[?type=='google_trends_topics_list'].data.rising"

j_query(json, query)
返回上升主题的数组的数组的数组。可以修改 JMESPath 表达式,以使用管道运算符
|
和两级解包

将其“解包”为上升主题数组
query <- "
tasks[].result[].items[?type=='google_trends_topics_list'].data.rising | 
[][]"

最后,这个上升主题列表可以使用

j_pivot()

表示为 data.frame 或 tibble
j_pivot(json, query, as = "tibble")
## # A tibble: 15 × 4
##    topic_id   topic_title                           topic_type             value
##    <chr>      <chr>                                 <chr>                  <int>
##  1 /m/086df   Web design                            Discipline               400
##  2 /m/07xy0   Uniform Resource Locator              Topic                    250
##  3 /m/02cwm   Design                                Topic                    140
##  4 /m/055t58  Google Maps                           Website                  130
##  5 /m/05x35   Plug-in                               Computing                 90
##  6 /m/026sq   Data                                  Topic                     80
##  7 /m/07k1x   Tool                                  Topic                     80
##  8 /m/081rb   Writing                               Language writing syst…    70
##  9 /m/085n4   Website                               Topic                     70
## 10 /m/05z1_   Python                                Programming language      60
## 11 /m/0bngkg  Yelp                                  Company                   60
## 12 /m/03l68z  Google Ads                            Topic                     60
## 13 /m/02x3zp_ Content                               Media                     50
## 14 /m/05fbf64 Google APIs                           Topic                     50
## 15 /m/05s_jbn Application programming interface key Topic                     50

使用“搜索”放大镜查找“上升”的出现。我记下了发生的路径——响应有一个“任务”数组,每个任务有一个“结果”数组,每个结果有一个“项目”数组,然后一些项目有一个“数据”对象,其中包含‘上升’阵列。我将此路径编写为 JMESPath 查询,并使用

j_query
rjsoncons CRAN 包中提取数据的相关部分。

query = "tasks[].result[].items[].data.rising"
rising = j_query(json, query)
© www.soinside.com 2019 - 2024. All rights reserved.