R軟體擷取分析臉書Facebook粉絲專頁資料

大數據方法應用於社會科學研究正方興未艾,尤其社群媒體應用普及,產生大量的訊息與行為,猶如資料大海,更讓眾多研究者想透過資料擷取一探究竟。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 的頁面,點選「開始註冊」、「建立應用程式編號」。

facebook_developer_02

 


Step 2 

在空格處填入自行設定的應用程式名稱,以及連繫用的信箱(通常預設為臉書登記用的信箱,亦可更換),再點選「建立應用程式編號」。

facebook_developer_03

 


Step 3

通過安全驗證後,進入個人應用程式的主頁面,再點選右上角「我的應用程式」選單,下拉至「新增應用程式」。

facebook_developer_03-1

 

facebook_developer_05

 


Step 4 

點選「網站」圖示,進入個人應用程式「主控板」,上面會顯示「應用程式編號」(ID)、「應用程式密鑰」(Secret),「應用程式密鑰」預設為不可視,請點選旁邊的「顯示」按鈕即可出現密碼。旁邊的ID與Secret的密碼,建議複製貼上到記事本檔案,因為在後面的程序,必須將此兩者貼在R語法當中,才能執行認證的工作。

 

facebook_developer_08

 

facebook_developer_06

 


三、安裝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變數當中,語法如下:

facebook_developer_003

 

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】。

facebook_developer_11

 

facebook_developer_19

 

facebook_developer_09

 


3、請回到R-Studio操作視窗,依據指示按下任意鍵,認證過程與完成後將會出現以下字樣:

Waiting for authentication in browser…
Press Esc/Ctrl + C to abort
Authentication complete.
Authentication successful.

facebook_developer_10

 

4、完成認證後,會自動跳出認證完成可關閉此頁的一個視窗,僅需直接關閉即可,如下圖:

facebook_developer_14


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。

facebook_developer_20

 

facebook_developer_12

 

facebook_developer_13

 


(二)擷取粉絲專頁資料:

1、此處預計擷取「玄大新聞」臉書粉絲專頁最新10篇貼文,語法如下:

page.id <- "1738563996468413" 
page <- getPage(page.id, token=fb.oauth, n = 10)
str(page)

2、擷取完成後,請點選右上方Global Evvironment視窗Data項後方的格狀圖案,即可在左上方Source視窗檢視所擷取下來的資料。

facebook_developer_21

 

(三)儲存與轉換資料:

1、透過Rfacebook擷取下來的「玄大新聞」臉書粉絲專頁最新10篇貼文,必須再加以設定儲存路徑,將RStudio上方的Session選單下拉,進入Set Working Directory → Choose Directory,再選擇檔案存取的位置。

facebook_developer_18

 

2、若以手動鍵入,語法如下:

setwd("~/R")         #""引號內的位置可依個人需要自行設定

3、將所擷取的「玄大新聞」臉書粉絲專頁最新10篇貼文轉存成.csv檔案,語法如下:

write.csv(page,"page.csv",row.names = FALSE)  #""引號內的檔名可自行設定

4、轉存成csv檔案後,可使用Excel打開,再加以調整欄列,大功告成!

facebook_developer_15

 

facebook_developer_16

 


看到這裡,您可能感覺有些複雜,臉書做為世界數一數二的社群媒體龍頭,在個人隱私、個資保護、資料存取的認證等,確實多了許多手續。然而,臉書上面仍有相當多元類型的資料可供研究運用,限於篇幅,後續將逐次介紹。

參考資料 & 延伸閱讀

GTW的「使用R分析Facebook社群網路教學」。

Data Man的資料視覺化筆記」。

在〈R軟體擷取分析臉書Facebook粉絲專頁資料〉中有 0 則留言

  1. 跑測試認證結果的時候出現下列錯誤
    callAPI(url = url, token = token) :
    An access token is required to request this resource.

    請問是哪個步驟有錯誤呢?

    1. 哈囉!懶人,臉書API認證語法:
      require(“Rfacebook”)
      fb.oauth <- fbOAuth(
      app_id="此處請複製貼上應用程式編號(ID的數字)",
      app_secret="此處請複製貼上應用程式密鑰(Secret數字)",
      extended_permissions = TRUE)
      請檢查一下您是否有地方貼錯,特別是" "引號絕不可少,且引號內的ID和Secret的數字必須填寫正確,再請您仔細核對,謝謝您!

  2. 哈囉,康老師,什麼時候回母系跟我們傳授一下大數據心法呢?

      1. 你還有一招半式,像我們只能旁邊喊燒。不管以前學什麼,遇到大數據都先把自己歸零,重新出發。下一個十年,就看你們啦。

      2. 哈囉!謝老師,我認為text mining很適合運用在批判論述分析(CDA),正好是您的專長,希望有機會能與您多多交流。

  3. 不好意思我想請問一下 ,是自己的管理的社團才能分析嗎 ?別人未公開的社團是否也可以分析呢 ?

    1. 哈囉!Ken:Rfacebook套件必須透過facebook的臨時權杖(token)或APPSecret的連結,才能抓取到資料。目前facebook對於token與APPSecret的存取資料權限開放程度,除了自己的帳號以外,只要是【公開】的頁面,例如粉絲團(一定是公開性質)、公開的社團,都可以抓取資料;但【非公開】的頁面,例如非公開社團(只有會員才看得到內容),就無法抓取資料;此外,別人的帳號,目前也已無法透過程式抓取資料了(以前可以),提供您參考。

  4. 你好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老師協助說明,感謝你!

    1. 哈囉!璇您好,按照您的描述,感覺好像是可以獲得臉書授權,而後又忽然失去連線的狀態。您能否再試試同樣的程序,同時檢查一下網路連線是否不穩定,以及確認一下您是否仍然在臉書登入的狀況,感謝您回應。

  5. 你好,在取得(object_link_connection_like)为何只是显示table,如何更改为统计点赞人数?谢谢!

    1. 哈囉!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/
      感謝您的回應!

      1. 没错,是Power BI的问题! 感谢您的答复,已经成功了!

  6. 您好,非常感謝您的分享,看了您的文章後也嘗試利用R將fb資料抓下來,但過程中發現了ㄧ些問題,爬下來內容中文無法正常呈現,但好像也不是亂碼,而是出現類似「#…」的內容(下附有錯誤畫面聯結),上網爬文還沒找到答案,試著改變encoding但也沒有用..請問您知道問題可能出在哪裡,以及該如何解決嗎?非常謝謝您!!

    【錯誤畫面聯結】
    https://drive.google.com/file/d/0BxTcBeT0awRGNmZiRzhDbjZwVEk/view?usp=sharing

    1. 哈囉!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

      感謝您的回應!

  7. 補充說明,各位在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是不會自動出現的。
    祝大家操作順利!

  8. 你好Stanley老師,我也遇到跟搂上 璇 一樣的問題
    他先跳出錯誤的視窗:
    「無法載入網址: 這個網址的網域未包含在應用程式的網域中。若要載入這個網址,請在應用程式設定的「應用程式網域」欄位中新增應用程式的所有的網域及子網域。」
    然後按下確定後跳出 Authentication complete. Please close this page and return to R.

    還請Stanley老師協助說明,謝謝您

    1. 哈囉!同學c您好:首先,請檢查電腦語法當中的” “引號,必須是英數形式,不可使用中文形式的“ ”引號,差異很大,且會造成語法無法執行。你在複製貼上任何電腦程式語言,一定要檢查這個部份。

      第二,你再試試當Rstudio停留在press any key…的時候,先複製http://localhost:1410到Facebook for developers去,記得要按下底下的next完成app連接,再按下任何鍵,看看能否授權成功。

      祝順利成功!

  9. 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卡住
    *目前是最新版本,英文版,過程沒有參雜中文

    1. 哈囉!林同學,我再次試過相同程序取得臉書token與app授權,目前都沒問題。
      一、您所提到的問題感覺像是授權失敗,能夠寄給我您的R語法螢幕截圖嗎?另外再請提供您的電腦作業系統與R下載的版本。
      二、如果您擔心直接複製網頁語法貼上R-Studio可能會有疏漏,建議您可下載一個簡單小程式【Notepad++】:官網下載:https://notepad-plus-plus.org/zh/,您可將所有程式碼複製後貼在上面,它會協助你找到語法錯誤之處。

      1. 謝謝您 太感謝了 經過您的方法終於成功抓到資料了 讚

  10. 您好,我也遇到上述兩位同學的問題…

    > 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

  11. 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

    請老師協助,謝謝

  12. 您好!我getPage一般粉絲頁都沒有問題,但抓取自己的帳號資料就顯示沒有po文,是為什麼呢?謝謝!

    1. 哈囉!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/

      感謝您的回應!

  13. 您好,想請教一下,如何透過R facebook抓取特定粉絲專頁中每篇貼文底下的留言呢?
    謝謝

      1. 哈囉!wei您好,看來我要檢查一下我的回應通知了…Rfacebook抓取某一特定貼文,包括該貼文的按讚、留言、分享的語法為getPost,可參考以下的頁面比較清楚:
        https://www.rdocumentation.org/packages/Rfacebook/versions/0.6.15/topics/getPost
        至於您貼出來的Github連結,是另一個語法getCommentReplies,用來抓取對於某一特定留言(comment)的回覆(reply)。謝謝您的意見與分享。

  14. 您好,想請問一下,R facebook有沒有辦法爬取”特定關鍵字”的所有搜尋結果呢?
    如圖: https://imgur.com/98q5mE4
    因為不知facebook developers那邊要怎麼弄
    謝謝

  15. 你好請問臉書只要展開大量留言就會變成緩慢是為什麼?

發表迴響