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

看板R_Language作者 (123)時間3年前 (2020/06/10 00:43), 3年前編輯推噓2(2032)
留言34則, 3人參與, 3年前最新討論串1/2 (看更多)
[問題類型]: 程式諮詢(我想用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://www.ptt.cc/bbs/R_Language/M.1591721034.A.B37.html

06/10 01:04, 3年前 , 1F
先用str()看清楚get_channel_stats()回傳什麼東西
06/10 01:04, 1F

06/10 01:04, 3年前 , 2F
我沒app id不能幫你試,但我猜你只是不熟悉回傳的結構
06/10 01:04, 2F

06/10 01:28, 3年前 , 3F
感謝Andrew大回覆! 其實我有str()看回傳值是list。但我
06/10 01:28, 3F

06/10 01:29, 3年前 , 4F
卡在試過轉字串,在第一步回傳是list就停住了...
06/10 01:29, 4F

06/10 01:30, 3年前 , 5F
所以才想說有沒有什麼使用方式是可以指定list的位置後
06/10 01:30, 5F

06/10 01:31, 3年前 , 6F
再轉成字串或是數值。目前就是卡在這最關鍵的一步 @@
06/10 01:31, 6F

06/10 04:11, 3年前 , 7F
請問可以貼一下回傳的list範例嗎,值可以是假的,重點是結
06/10 04:11, 7F

06/10 04:11, 3年前 , 8F
06/10 04:11, 8F

06/10 04:33, 3年前 , 9F

06/10 04:35, 3年前 , 10F
類似這樣子可以嗎?對了id那行應該是id <- c(id, snippet[1
06/10 04:35, 10F

06/10 04:35, 3年前 , 11F
])
06/10 04:35, 11F
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

06/10 13:06, 3年前 , 12F
我沒有實際操作過這個套件,只是看你code裡面存取get_chann
06/10 13:06, 12F

06/10 13:06, 3年前 , 13F
el_stat(id)[4][7],猜測你想要的是第4個element裡面的第7
06/10 13:06, 13F

06/10 13:06, 3年前 , 14F
個element,裡面應該是id資訊,這樣理解是對的嗎?
06/10 13:06, 14F

06/10 13:15, 3年前 , 15F
喔抱歉剛剛沒點進去圖所以沒看到螢光部分,感覺就是資料結
06/10 13:15, 15F

06/10 13:15, 3年前 , 16F
構的存取問題,多試幾次慢慢拆囉。ps. 如果那行改成 get_ch
06/10 13:15, 16F

06/10 13:15, 3年前 , 17F
annel_stats(x)$snippet$country 抓的出國家(AU)嗎?
06/10 13:15, 17F

06/10 13:17, 3年前 , 18F
或是 snippet[[7]]
06/10 13:17, 18F
我有這樣試過,但最大的問題是: 每次執行時,都會跑出如下面第二張圖的錯誤資訊 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

06/10 15:41, 3年前 , 19F
可以的話把整個get_channel_stat回傳給saveRDS把檔案貼
06/10 15:41, 19F

06/10 15:41, 3年前 , 20F
在雲端。
06/10 15:41, 20F

06/10 15:42, 3年前 , 21F
沒辦法重現你的問題實在不方便解答
06/10 15:42, 21F

06/10 18:05, 3年前 , 22F
同意樓上大大~
06/10 18:05, 22F
感謝樓上兩位大大 請見下面連結儲存get_channel_stats的RDS檔案 https://1drv.ms/u/s!Ajmg_0PpohUJgzQrQMbckApP5PTK?e=rdPkiE ※ 編輯: iambakr (111.250.82.64 臺灣), 06/11/2020 00:48:37

06/11 09:43, 3年前 , 23F
rds讀入後叫x,用x$snippet$localized$title
06/11 09:43, 23F

06/11 09:43, 3年前 , 24F
和x$snippet$country就行了吧
06/11 09:43, 24F

06/11 09:48, 3年前 , 25F
x$snippet[[1]]等同x$snippet[1][[1]]但不同於
06/11 09:48, 25F

06/11 09:48, 3年前 , 26F
x$snippet[1],這大概是你卡關的關鍵
06/11 09:48, 26F

06/11 09:55, 3年前 , 27F
下次你不確定成不成的時候,可先檢查要取出的一個字串
06/11 09:55, 27F

06/11 09:56, 3年前 , 28F
是不是長度為1的character vector就可以避免了。
06/11 09:56, 28F

06/12 00:14, 3年前 , 29F
還有我發現可能還有一個地方有問題:大大你 youtube <- dat
06/12 00:14, 29F

06/12 00:14, 3年前 , 30F
a.frame() 只是宣告了一個空的dataframe沒有告訴他有多少筆
06/12 00:14, 30F

06/12 00:14, 3年前 , 31F
資料,這樣後面 youtube$country[i]可能找不到東西,後面錯
06/12 00:14, 31F

06/12 00:14, 3年前 , 32F
誤訊息應該是在指這件事。如果要用for迴圈的話請一開始就宣
06/12 00:14, 32F

06/12 00:14, 3年前 , 33F
告好list或dataframe的大小,不然就用 list <- c(list, ele
06/12 00:14, 33F

06/12 00:14, 3年前 , 34F
ment)的方式append
06/12 00:14, 34F
文章代碼(AID): #1UtxnAit (R_Language)
文章代碼(AID): #1UtxnAit (R_Language)