[問題] tuber套件擷取YouTube頻道資訊

作者: iambakr (123)   2020-06-10 00:43:52
[問題類型]:
程式諮詢(我想用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
謝謝前輩
作者: andrew43 (討厭有好心推文後刪文者)   2020-06-10 01:04:00
先用str()看清楚get_channel_stats()回傳什麼東西我沒app id不能幫你試,但我猜你只是不熟悉回傳的結構
作者: iambakr (123)   2020-06-10 01:28:00
感謝Andrew大回覆! 其實我有str()看回傳值是list。但我卡在試過轉字串,在第一步回傳是list就停住了...所以才想說有沒有什麼使用方式是可以指定list的位置後再轉成字串或是數值。目前就是卡在這最關鍵的一步 @@
作者: locka (locka)   2020-06-10 04:11:00
請問可以貼一下回傳的list範例嗎,值可以是假的,重點是結構http://i.imgur.com/Tk3Ul8H.jpg類似這樣子可以嗎?對了id那行應該是id <- c(id, snippet[1])我沒有實際操作過這個套件,只是看你code裡面存取get_channel_stat(id)[4][7],猜測你想要的是第4個element裡面的第7個element,裡面應該是id資訊,這樣理解是對的嗎?喔抱歉剛剛沒點進去圖所以沒看到螢光部分,感覺就是資料結構的存取問題,多試幾次慢慢拆囉。ps. 如果那行改成 get_channel_stats(x)$snippet$country 抓的出國家(AU)嗎?或是 snippet[[7]]
作者: andrew43 (討厭有好心推文後刪文者)   2020-06-10 15:41:00
可以的話把整個get_channel_stat回傳給saveRDS把檔案貼在雲端。沒辦法重現你的問題實在不方便解答
作者: locka (locka)   2020-06-10 18:05:00
同意樓上大大~
作者: andrew43 (討厭有好心推文後刪文者)   2020-06-11 09:43:00
rds讀入後叫x,用x$snippet$localized$title和x$snippet$country就行了吧x$snippet[[1]]等同x$snippet[1][[1]]但不同於x$snippet[1],這大概是你卡關的關鍵下次你不確定成不成的時候,可先檢查要取出的一個字串是不是長度為1的character vector就可以避免了。
作者: locka (locka)   2020-06-12 00:14:00
還有我發現可能還有一個地方有問題:大大你 youtube <- data.frame() 只是宣告了一個空的dataframe沒有告訴他有多少筆資料,這樣後面 youtube$country[i]可能找不到東西,後面錯誤訊息應該是在指這件事。如果要用for迴圈的話請一開始就宣告好list或dataframe的大小,不然就用 list <- c(list, element)的方式append

Links booklink

Contact Us: admin [ a t ] ucptt.com