大數據方法應用於社會科學研究正方興未艾,尤其社群媒體應用普及,產生大量的訊息與行為,猶如資料大海,更讓眾多研究者想透過資料擷取一探究竟。Facebook目前仍是台灣地區民眾使用率最高的社群媒體,而可同時處理資料擷取、存取、分析的軟體或應用程式當中,R語言免費、下載安裝容易的特性,近來似乎人氣最高。本文即以Facebook的粉絲專頁(fanpage)為例,簡單介紹透過R語言套件(packages)擷取資料的步驟與方法。
一、安裝R軟體與R編輯器(RStudio)
R的執行除了常見的圖形使用者介面(Graphical User Interface, GUI)外,近來免費版本的R編輯器(RStudio),整合了R在控制、編輯、執行等功能,讓使用更加便利。有關R與RStudio的安裝,請參閱前文:R軟體_RStudio編輯器安裝設定:基本操作說明。
二、取得Facebook權限
臉書的【開發人員支援】(facebook for developer)頁面,顧名思義,就是提供給各種網路與程式相關開發人員作業的區域,只要擁有個人臉書帳號,可以透過特定的權限,執行有限度的指令。想擷取臉書的資料,必須透過Facebook Graph API,API是【應用程式介面】(Application Programming Interface)的簡稱,是一種約定的程式碼,用來銜接軟體系統不同的部分,減少軟體開發所需的人力、物力與時間。但是在使用Facebook Graph API之前,亦須通過臉書的申請認證,區分兩種:
(一)臨時存取權杖(Token):此處的Token(Access Token)即指用戶權限的安全憑證,透過Token的取得才可以進行後續的指令。臉書Token的申請認證方法,請參閱前文:臉書facebook可以說的秘密_社群大數據_網路爬文_social Big data_crawler。請注意:Token的效力只有兩小時,過期必須重新載入來產生新的Token。
(二)Facebook APP:Facebook APP的APP ID與APP Secret就是長期可以使用的認證碼(除非臉書大幅更換API版本)。取得APP ID與APP Secret的方式如下:
Step 1
以個人帳號登入臉書,前往 facebook for developers 的頁面,點選「開始註冊」、「建立應用程式編號」。
Step 2
在空格處填入自行設定的應用程式名稱,以及連繫用的信箱(通常預設為臉書登記用的信箱,亦可更換),再點選「建立應用程式編號」。
Step 3
通過安全驗證後,進入個人應用程式的主頁面,再點選右上角「我的應用程式」選單,下拉至「新增應用程式」。
Step 4
點選「網站」圖示,進入個人應用程式「主控板」,上面會顯示「應用程式編號」(ID)、「應用程式密鑰」(Secret),「應用程式密鑰」預設為不可視,請點選旁邊的「顯示」按鈕即可出現密碼。旁邊的ID與Secret的密碼,建議複製貼上到記事本檔案,因為在後面的程序,必須將此兩者貼在R語法當中,才能執行認證的工作。
三、安裝Rfacebook套件
除了在R的官網可下載Rfacebook以外,亦可至Rfacebook在GitHub的載點下載(版本更新速度較快)。請開啟RStudio,RStudio作業視窗區分四個區域(一般會預設成三個區域),以下的語法,請鍵入(或複製貼上)於左側(四個區域時則為左下方)的Console作業區。
(一)從R官網CRAN安裝,語法如下:
install.packages("Rfacebook")
(二)從GitHub的載點安裝:
1、首先要安裝”devtools”這個套件,語法如下:
install.packages("devtools")
library(devtools)
2、透過GitHub下載Rfacebook,語法如下:
install_github("Rfacebook", "pablobarbera", subdir="Rfacebook")
library(Rfacebook)
四、Rfacebook認證
(一)使用存取權杖(Token):
1、前往 Graph API 測試工具頁面,會自動產生一個存取權杖(Token),複製貼到R語法token變數當中,語法如下:
token <- "ZAQ1XSW2*****************" #請複製貼上您的Token
2、測試存取權杖Token認證情形,語法如下:
me <- getUsers("me", token, private_info = TRUE)
me$name
[1] “XXX” #認證成功會出現您的臉書帳號
(二)使用Facebook應用程式:
1、使用fbOAuth函數,輸入應用程式編號(ID)和應用程式密鑰(Secret)後執行,可得到長效期的存取權杖,亦可存檔後長期重複使用,語法如下:
require("Rfacebook")
fb.oauth <- fbOAuth(
app_id="*************", #請複製貼上應用程式編號(ID數字)
app_secret="***********************", #請複製貼上應用程式密鑰(Secret數字)
extended_permissions = TRUE)
執行後RStudio會出現以下字樣:
Copy and paste into Site URL on Facebook App Settings: http://localhost:1410/
When done, press any key to continue…
2、把http://localhost:1410/複製起來,回到facebook for developers 的頁面,在右上方「我的應用程式」拉下選單,點選進入剛才已設定好的應用程式主畫面,點選左側的「設定」,按下「新增平台」,選擇「網站」,再將剛才複製起來的http://localhost:1410/,貼在「網站網址」的空白處,接著請按下【變更儲存】、【立即開始】。隨後,畫面會轉跳至【Quick Star for 網站】,請往下瀏覽,找到【Tell us about your website】,您將看見【Site URL】底下空白欄位,請貼上:http://localhost:1410/,再按下【next】。
3、請回到R-Studio操作視窗,依據指示按下任意鍵,認證過程與完成後將會出現以下字樣:
Waiting for authentication in browser…
Press Esc/Ctrl + C to abort
Authentication complete.
Authentication successful.
4、完成認證後,會自動跳出認證完成可關閉此頁的一個視窗,僅需直接關閉即可,如下圖:
3、測試認證結果:認證完成後可測試能否抓到您自己的臉書帳號,語法如下:
me <- getUsers("me",token=fb.oauth)
me$name
[1] “XXX” #認證成功會出現您的臉書帳號
4、若可出現您的臉書帳號,表示功能正常,將此Token儲存起來,語法如下:
save(fb.oauth, file="fb_oauth")
5、若需使用此Token,僅需叫出檔案即可,語法如下:
load("fb_oauth")
五、使用Rfacebook擷取粉絲專頁資料
(一)查詢臉書粉絲專頁ID:使用Rfacebook擷取臉書任何資料均需使用臉書帳號的ID,查詢方法為前往 facebook for developers 的頁面,點選最上方的「工具及支援」,進入後點選「圖形API測試工具」,再找到您想擷取資料的粉絲專頁網址,以「玄大新聞」為例,其網址為:
https://www.facebook.com/hcunews/,把其中的hcunews複製起來,覆蓋貼在?fields之前,再按下「提交」,即可看到所欲查詢的臉書粉絲專頁名稱與帳號ID。
(二)擷取粉絲專頁資料:
1、此處預計擷取「玄大新聞」臉書粉絲專頁最新10篇貼文,語法如下:
page.id <- "1738563996468413"
page <- getPage(page.id, token=fb.oauth, n = 10)
str(page)
2、擷取完成後,請點選右上方Global Evvironment視窗Data項後方的格狀圖案,即可在左上方Source視窗檢視所擷取下來的資料。
(三)儲存與轉換資料:
1、透過Rfacebook擷取下來的「玄大新聞」臉書粉絲專頁最新10篇貼文,必須再加以設定儲存路徑,將RStudio上方的Session選單下拉,進入Set Working Directory → Choose Directory,再選擇檔案存取的位置。
2、若以手動鍵入,語法如下:
setwd("~/R") #""引號內的位置可依個人需要自行設定
3、將所擷取的「玄大新聞」臉書粉絲專頁最新10篇貼文轉存成.csv檔案,語法如下:
write.csv(page,"page.csv",row.names = FALSE) #""引號內的檔名可自行設定
4、轉存成csv檔案後,可使用Excel打開,再加以調整欄列,大功告成!
看到這裡,您可能感覺有些複雜,臉書做為世界數一數二的社群媒體龍頭,在個人隱私、個資保護、資料存取的認證等,確實多了許多手續。然而,臉書上面仍有相當多元類型的資料可供研究運用,限於篇幅,後續將逐次介紹。
參考資料 & 延伸閱讀
GTW的「使用R分析Facebook社群網路教學」。
在〈R軟體擷取分析臉書Facebook粉絲專頁資料〉中有 35 則留言
跑測試認證結果的時候出現下列錯誤
callAPI(url = url, token = token) :
An access token is required to request this resource.
請問是哪個步驟有錯誤呢?
哈囉!懶人,臉書API認證語法:
require(“Rfacebook”)
fb.oauth <- fbOAuth(
app_id="此處請複製貼上應用程式編號(ID的數字)",
app_secret="此處請複製貼上應用程式密鑰(Secret數字)",
extended_permissions = TRUE)
請檢查一下您是否有地方貼錯,特別是" "引號絕不可少,且引號內的ID和Secret的數字必須填寫正確,再請您仔細核對,謝謝您!
哈囉,康老師,什麼時候回母系跟我們傳授一下大數據心法呢?
哈囉!謝老師,小弟這一招半式雕蟲小技怎好意思班門弄斧,只能與大家閒聊一下而已啦~
你還有一招半式,像我們只能旁邊喊燒。不管以前學什麼,遇到大數據都先把自己歸零,重新出發。下一個十年,就看你們啦。
哈囉!謝老師,我認為text mining很適合運用在批判論述分析(CDA),正好是您的專長,希望有機會能與您多多交流。
不好意思我想請問一下 ,是自己的管理的社團才能分析嗎 ?別人未公開的社團是否也可以分析呢 ?
哈囉!Ken:Rfacebook套件必須透過facebook的臨時權杖(token)或APPSecret的連結,才能抓取到資料。目前facebook對於token與APPSecret的存取資料權限開放程度,除了自己的帳號以外,只要是【公開】的頁面,例如粉絲團(一定是公開性質)、公開的社團,都可以抓取資料;但【非公開】的頁面,例如非公開社團(只有會員才看得到內容),就無法抓取資料;此外,別人的帳號,目前也已無法透過程式抓取資料了(以前可以),提供您參考。
你好Stanley老師,想請教你「四、Rfacebook認證」的相關問題。我在「使用fbOAuth函數,輸入應用程式編號(ID)和應用程式密鑰(Secret)後執行」,且「把http://localhost:1410/複製起來,回到facebook for developers 的頁面」後,卻是出現:
「Waiting for authentication in browser…
Press Esc/Ctrl + C to abort
Authentication complete.
Error in oauth2.0_access_token(endpoint, app, code = code, user_params = user_params, :
Bad Request (HTTP 400). Failed to get an access token.」
不太了解,為何沒有出現「Authentication successful.」,但是瀏覽器的頁面,一開始是跳出「錯誤」視窗,但接續也出現了「Authentication complete. Please close this page and return to R.」的字句,甚至也認證成功會出現我的臉書帳號了。
在此卡關了一整天,希望Stanley老師協助說明,感謝你!
哈囉!璇您好,按照您的描述,感覺好像是可以獲得臉書授權,而後又忽然失去連線的狀態。您能否再試試同樣的程序,同時檢查一下網路連線是否不穩定,以及確認一下您是否仍然在臉書登入的狀況,感謝您回應。
哈囉!璇您好,解決方法請參閱我的最新文章:【Rfacebook的授權失敗問題解決方式】https://kangliping.wordpress.com/2017/12/05/r_facebook_fboauth/
再請您試試看了,感謝您的回應!
你好,在取得(object_link_connection_like)为何只是显示table,如何更改为统计点赞人数?谢谢!
哈囉!ik您好:您問的應該是Microsoft Power Query或Power BI抓取臉書資料時,object_link_connection_like資料欄位只有顯示table是吧?這table的意思是:還有資料沒有展開,那是因為您抓取下來的臉書資料,還在查詢編輯器的階段時,沒有將資料欄位點開,如何點開?請參考圖:
https://kangliping.files.wordpress.com/2015/08/05_e4be9de785a7e99c80e6b182e9bb9ee981b8e5b195e9968be59c96e7a4bae5b195e9968be99ab1e8978fe79a84e8a1a8e6a0bc.png
或是,您到我另外一篇文章去看:
https://kangliping.wordpress.com/2015/08/25/power_query_for_facebook/
感謝您的回應!
没错,是Power BI的问题! 感谢您的答复,已经成功了!
您好,非常感謝您的分享,看了您的文章後也嘗試利用R將fb資料抓下來,但過程中發現了ㄧ些問題,爬下來內容中文無法正常呈現,但好像也不是亂碼,而是出現類似「#…」的內容(下附有錯誤畫面聯結),上網爬文還沒找到答案,試著改變encoding但也沒有用..請問您知道問題可能出在哪裡,以及該如何解決嗎?非常謝謝您!!
【錯誤畫面聯結】
https://drive.google.com/file/d/0BxTcBeT0awRGNmZiRzhDbjZwVEk/view?usp=sharing
哈囉!jiajia您好:您的狀況應該是R-Studio的資料編碼問題,請您打開R-Studio以後,
一、點選最上面Tools選單,進入最下面Global Options選項,
二、進入後,點選左側的Code,接著會出現Editing、Display、Saving、Completion、Diagnostics等五個選單,請點選【Saving】進入,
三、進入後,最下方的Default text encoding,預設是[Ask],請按下右側Change…,
四、按下後,出現Choose Encoding選單,請點選UTF-8,按下OK,回上一層,再按下OK。
如圖:
https://kangliping.files.wordpress.com/2017/10/e89ea2e5b995e688aae59c96-2017-10-21-02-27-14.png
感謝您的回應!
補充說明,各位在Rstudio向臉書申請授權時,進行到:
> require(“Rfacebook”)
> fb.oauth <- fbOAuth(
+ app_id="111*****************18",
+ app_secret="f8c2**************700041",
+ extended_permissions = TRUE)
Copy and paste into Site URL on Facebook App Settings: http://localhost:1410/
When done, press any key to continue…
若您已將:http://localhost:1410/複製起來,貼上facebook for developers的「我的應用程式」→設定→新增平台→網站→網站網址,
前述均已完成後,此時,請記得按下【變更儲存】、【立即開始】,畫面會轉跳至【tell us about your website】,請再次貼上http://localhost:1410/,再按下【next】。
隨後回到RStudio操作視窗,依指示按下任意建,您的瀏覽器才會另外跳出新視窗,裡面只有寫著:
Authentication complete. Please close this page and return to R.
再次強調,上面這串字不是出現在Rstudio當中,是出現在瀏覽器跳出的新視窗裡。
這樣才算是向臉書申請授權完成,將http://localhost:1410/ 複製起來貼在
facebook for developer才有作用,Rfacebook才能運作抓取資料,如果不按下任意鍵,
Authentication complete. Please close this page and return to R是不會自動出現的。
祝大家操作順利!
你好Stanley老師,我也遇到跟搂上 璇 一樣的問題
他先跳出錯誤的視窗:
「無法載入網址: 這個網址的網域未包含在應用程式的網域中。若要載入這個網址,請在應用程式設定的「應用程式網域」欄位中新增應用程式的所有的網域及子網域。」
然後按下確定後跳出 Authentication complete. Please close this page and return to R.
還請Stanley老師協助說明,謝謝您
哈囉!同學c您好:首先,請檢查電腦語法當中的” “引號,必須是英數形式,不可使用中文形式的“ ”引號,差異很大,且會造成語法無法執行。你在複製貼上任何電腦程式語言,一定要檢查這個部份。
第二,你再試試當Rstudio停留在press any key…的時候,先複製http://localhost:1410到Facebook for developers去,記得要按下底下的next完成app連接,再按下任何鍵,看看能否授權成功。
祝順利成功!
哈囉!同學C,解決方法請參閱我的最新文章:【Rfacebook的授權失敗問題解決方式】https://kangliping.wordpress.com/2017/12/05/r_facebook_fboauth/
再請您試試看了,感謝您的回應!
Stanley老師您好:
延續樓上的同學
「無法載入網址: 這個網址的網域未包含在應用程式的網域中。若要載入這個網址,請在應用程式設定的「應用程式網域」欄位中新增應用程式的所有的網域及子網域。」
然後按下確定後跳出 Authentication complete. Please close this page and return to R.
再回到R是出現以下訊息
Authentication complete.
Error in oauth2.0_access_token(endpoint, app, code = code, user_params = user_params, :
Bad Request (HTTP 400). Failed to get an access token.
In addition: Warning message:
In strsplit(rawToChar(raw), “\r?\n”) :
input string 1 is invalid in this locale
> me me$name
[1] “XXX”
貌似是
access token卡住
*目前是最新版本,英文版,過程沒有參雜中文
哈囉!林同學,我再次試過相同程序取得臉書token與app授權,目前都沒問題。
一、您所提到的問題感覺像是授權失敗,能夠寄給我您的R語法螢幕截圖嗎?另外再請提供您的電腦作業系統與R下載的版本。
二、如果您擔心直接複製網頁語法貼上R-Studio可能會有疏漏,建議您可下載一個簡單小程式【Notepad++】:官網下載:https://notepad-plus-plus.org/zh/,您可將所有程式碼複製後貼在上面,它會協助你找到語法錯誤之處。
哈囉!林同學,解決方法請參閱我的最新文章:【Rfacebook的授權失敗問題解決方式】https://kangliping.wordpress.com/2017/12/05/r_facebook_fboauth/
再請您試試看了,感謝您的回應!
謝謝您 太感謝了 經過您的方法終於成功抓到資料了 讚
您好,我也遇到上述兩位同學的問題…
> me me$name
[1] “XXX”
這部分是有抓到資料 但Copy and paste into Site URL on Facebook App Settings: http://localhost:1410/
When done, press any key to continue…之後按下enter就會跳出如同樓上林同學的error
哈囉!wei您好,解決方法請參閱我的最新文章:【Rfacebook的授權失敗問題解決方式】https://kangliping.wordpress.com/2017/12/05/r_facebook_fboauth/
再請您試試看了,感謝您的回應!
Stanley老師 您好,
我也遇到上述兩位同學的問題…
出現以下資訊:
「無法載入網址: 這個網址的網域未包含在應用程式的網域中。若要載入這個網址,請在應用程式設定的「應用程式網域」欄位中新增應用程式的所有的網域及子網域。」
Authentication complete.
Error in oauth2.0_access_token(endpoint, app, code = code, user_params = user_params, :
Bad Request (HTTP 400). Failed to get an access token.
In addition: Warning message:
In strsplit(rawToChar(raw), “\r?\n”) :
input string 1 is invalid in this locale
瀏覽器的頁面,一開始是跳出「錯誤」視窗,但接續也出現了「Authentication complete. Please close this page and return to R.」的字句,甚至也認證成功會出現我的臉書帳號了
save(fb.oauth, file = “fb_oauth”)
Error in save(fb.oauth, file = “fb_oauth”) : object ‘fb.oauth’ not found
請老師協助,謝謝
哈囉!吳先生您好,解決方法請參閱我的最新文章:【Rfacebook的授權失敗問題解決方式】https://kangliping.wordpress.com/2017/12/05/r_facebook_fboauth/
再請您試試看了,感謝您的回應!
您好!我getPage一般粉絲頁都沒有問題,但抓取自己的帳號資料就顯示沒有po文,是為什麼呢?謝謝!
哈囉!Joy您好:因為Rfacebook當中的getPage、getPost都是針對public帳號與內容所寫的,粉絲團的帳號可以抓貼文,自己的帳號就沒辦法抓了,但getReactions、getShares卻也可以統計自己帳號的反應(like、haha、wow、angry…)與分享(share)情形,相關說明如下:
https://github.com/pablobarbera/Rfacebook
https://rdrr.io/cran/Rfacebook/man/
如果您想抓自己帳號的貼文,請參閱我的另一篇文章:使用Microsoft Power BI分析Facebook臉書
https://kangliping.wordpress.com/2017/06/04/microsoft-power-bi_facebook/
感謝您的回應!
您好,想請教一下,如何透過R facebook抓取特定粉絲專頁中每篇貼文底下的留言呢?
謝謝
R facebook抓回文
似乎是這個
https://github.com/yanturgeon/R_Script/blob/master/getCommentReplies_dev.R
哈囉!wei您好,看來我要檢查一下我的回應通知了…Rfacebook抓取某一特定貼文,包括該貼文的按讚、留言、分享的語法為getPost,可參考以下的頁面比較清楚:
https://www.rdocumentation.org/packages/Rfacebook/versions/0.6.15/topics/getPost
至於您貼出來的Github連結,是另一個語法getCommentReplies,用來抓取對於某一特定留言(comment)的回覆(reply)。謝謝您的意見與分享。
您好,想請問一下,R facebook有沒有辦法爬取”特定關鍵字”的所有搜尋結果呢?
如圖: https://imgur.com/98q5mE4
因為不知facebook developers那邊要怎麼弄
謝謝
你好請問臉書只要展開大量留言就會變成緩慢是為什麼?