作者iambakr (123)
看板R_Language
标题[问题] tuber套件撷取YouTube频道资讯
时间Wed Jun 10 00:43:52 2020
[问题类型]:
程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
[软体熟悉度]:
新手(没写过程式,R 是我的第一次)
[问题叙述]:
想利用tuber套件抓取特定 YouTube频道ID的国家与频道名称
假设为以下四个频道,我先建一个空的 data frame
然後用for回圈抓这四个频道的国家与频道名称填入这个空的 data frame
但都会跑出list,涵盖下面四个资讯,导致错误
Channel Title: xxxxxxxxx
No. of Views: 2101540167
No. of Subscribers: 5750000
No. of Videos: 618
请问这个问题该如何解决?
是不是建议用 lapply 来跑?
[程式范例]:
library(tidyverse)
library(tuber)
library(scales)
library(lubridate)
yt_id <- c("UC-9wY4gVMkPGFvFcv63MhKw",
"UC4q12NoPNySbVqwpw4iO5Vg",
"UCVTDsWA7ItkDj9vt9Kt_oCw",
"UCoEpTYzBXDhB5eoSZ6ALa8w"
)
access <- yt_oauth(app_id = id, app_secret = pass, token = "")
access
youtube <- data.frame()
for (i in 1:4){
youtube$country[i] <-
as.character(get_channel_stats(channel_id = yt_id[i])[[4]][7])
youtube$title[i] <-
as.character(get_channel_stats(channel_id = yt_id[i])[[4]][1])
}
[环境叙述]:
R version 4.0.0 Patched (2020-04-26 r78306)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)
[关键字]:
tuber
谢谢前辈
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.250.82.64 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1591721034.A.B37.html
1F:→ andrew43: 先用str()看清楚get_channel_stats()回传什麽东西 06/10 01:04
2F:→ andrew43: 我没app id不能帮你试,但我猜你只是不熟悉回传的结构 06/10 01:04
3F:→ iambakr: 感谢Andrew大回覆! 其实我有str()看回传值是list。但我 06/10 01:28
4F:→ iambakr: 卡在试过转字串,在第一步回传是list就停住了... 06/10 01:29
5F:→ iambakr: 所以才想说有没有什麽使用方式是可以指定list的位置後 06/10 01:30
6F:→ iambakr: 再转成字串或是数值。目前就是卡在这最关键的一步 @@ 06/10 01:31
7F:→ locka: 请问可以贴一下回传的list范例吗,值可以是假的,重点是结 06/10 04:11
8F:→ locka: 构 06/10 04:11
10F:→ locka: 类似这样子可以吗?对了id那行应该是id <- c(id, snippet[1 06/10 04:35
11F:→ locka: ]) 06/10 04:35
Hi 感谢L大
我从tuber抓下来的 get_channel_stats(channel_id = xxxxx) List
长这个样子 -->
https://imgur.com/a/gfnXpVz
第二张图的萤光部分就是我想抓的资讯
不过我照L大的方式抓,没有成功抓下来country与id
get_channel_stats底下的snippet与statistics,分别又是另一个list
所以我一直没办法成功抓到想要的资讯.....
※ 编辑: iambakr (111.71.71.107 台湾), 06/10/2020 12:36:19
12F:→ locka: 我没有实际操作过这个套件,只是看你code里面存取get_chann 06/10 13:06
13F:→ locka: el_stat(id)[4][7],猜测你想要的是第4个element里面的第7 06/10 13:06
14F:→ locka: 个element,里面应该是id资讯,这样理解是对的吗? 06/10 13:06
15F:→ locka: 喔抱歉刚刚没点进去图所以没看到萤光部分,感觉就是资料结 06/10 13:15
16F:→ locka: 构的存取问题,多试几次慢慢拆罗。ps. 如果那行改成 get_ch 06/10 13:15
17F:→ locka: annel_stats(x)$snippet$country 抓的出国家(AU)吗? 06/10 13:15
18F:→ locka: 或是 snippet[[7]] 06/10 13:17
我有这样试过,但最大的问题是:
每次执行时,都会跑出如下面第二张图的错误资讯
https://imgur.com/a/h6MqOvM
好像是因为都会一次跑出下面资讯
Channel Title: Hillsong Worship
No. of Views: 2102542413
No. of Subscribers: 5750000
No. of Videos: 618
※ 编辑: iambakr (111.71.71.107 台湾), 06/10/2020 15:21:35
19F:→ andrew43: 可以的话把整个get_channel_stat回传给saveRDS把档案贴 06/10 15:41
20F:→ andrew43: 在云端。 06/10 15:41
21F:→ andrew43: 没办法重现你的问题实在不方便解答 06/10 15:42
22F:→ locka: 同意楼上大大~ 06/10 18:05
感谢楼上两位大大
请见下面连结储存get_channel_stats的RDS档案
https://1drv.ms/u/s!Ajmg_0PpohUJgzQrQMbckApP5PTK?e=rdPkiE
※ 编辑: iambakr (111.250.82.64 台湾), 06/11/2020 00:48:37
23F:→ andrew43: rds读入後叫x,用x$snippet$localized$title 06/11 09:43
24F:→ andrew43: 和x$snippet$country就行了吧 06/11 09:43
25F:→ andrew43: x$snippet[[1]]等同x$snippet[1][[1]]但不同於 06/11 09:48
26F:→ andrew43: x$snippet[1],这大概是你卡关的关键 06/11 09:48
27F:→ andrew43: 下次你不确定成不成的时候,可先检查要取出的一个字串 06/11 09:55
28F:→ andrew43: 是不是长度为1的character vector就可以避免了。 06/11 09:56
29F:推 locka: 还有我发现可能还有一个地方有问题:大大你 youtube <- dat 06/12 00:14
30F:→ locka: a.frame() 只是宣告了一个空的dataframe没有告诉他有多少笔 06/12 00:14
31F:→ locka: 资料,这样後面 youtube$country[i]可能找不到东西,後面错 06/12 00:14
32F:→ locka: 误讯息应该是在指这件事。如果要用for回圈的话请一开始就宣 06/12 00:14
33F:→ locka: 告好list或dataframe的大小,不然就用 list <- c(list, ele 06/12 00:14
34F:→ locka: ment)的方式append 06/12 00:14