使用 R 分析 Facebook 社群網路教學

這裡介紹 R 的 Rfacebook 套件使用方式,並提供各種 Facebook 社群網路資料分析的參考範例。

Facebook 是全球知名的社群網站,上面有非常大量的社群網路資料,當然也蘊藏了龐大的商機,如何分析 facebook 的資料、從中萃取有用的資訊,已經成為現在很熱門的領域之一。

分析 facebook 的資料,除了一般的統計工具之外,還需要結合 Facebook Graph API 來擷取資料,很慶幸的是 R 官方收錄的 Rfacebook 已經將這些功能都已經整合好了,以下我們將介紹如何安裝以及使用這個套件,分析出各種有用的社群資訊。

取得 Facebook 權限認證

在使用 Facebook Graph API 之前,我們必須先取得 facebook 的權限認證,經過認證之後,才能從 facebook 網站上擷取資料。

facebook 提供的認證方式有兩種,一種是使用 facebook app 的方式,另一種則是直接產生一個暫時的存取權杖(token),不管使用那一種都可以。

建立 Facebook App

以下是建立一個 facebook app 的操作步驟。
Step 1
開啟 facebook for developers 的網頁,點選「新增應用程式」。

facebook-social-media-mining-with-r-1

新增應用程式

Step 2
選擇「網站」這個平台。

facebook-social-media-mining-with-r-2

選擇「網站」

Step 3
輸入 App 的名稱,這裡任意取一個名稱即可。

facebook-social-media-mining-with-r-3

輸入 App 的名稱

Step 4
輸入聯絡用的電子郵件信箱。

facebook-social-media-mining-with-r-4

輸入電子郵件信箱

Step 5
點選右上角的「Skip Quick Start」。

facebook-social-media-mining-with-r-5

點選右上角的「Skip Quick Start」

Step 6
點選應用程式密鑰的「顯示」按鈕。

facebook-social-media-mining-with-r-6

點選應用程式密鑰「顯示」按鈕

Step 7
複製應用程式的編號與密鑰。

facebook-social-media-mining-with-r-7

應用程式編號與密鑰

有了應用程式的編號與密鑰,我們就可以使用 Rfacebook 套件透過 Facebook Graph API 來取的 facebook 上的資料了。

取得 Facebook 存取權杖(Token)

除了使用應用程式的編號與密鑰之外,還有另外一種認證方式就是使用 facebook 存取權杖(token),這種方式就不需要建立 facebook app,只要從網頁上產生存取權杖代碼即可使用,不過他的時效只有兩小時,過期後就要重新產生。

Step 1
點選「Get User Access Token」。

facebook-social-media-mining-with-r-8

點選「Get User Access Token」

Step 2
選擇要開放的權限。

facebook-social-media-mining-with-r-9

選擇要開放的權限

Step 3
複製產生的存取權杖代碼。

facebook-social-media-mining-with-r-10

複製產生的存取權杖代碼

安裝 Rfacebook 套件

R 的 Rfacebook 套件安裝方式有兩種,最簡單的方式就是跟一般套件一樣從 R 官方的套件庫下載安裝,不過這種方式所安裝的版本有時候比較舊,若要安裝最新的版本,可以改用直接從 Rfacebook 的 GitHub 網站上下載最新的版本來安裝。

從 CRAN 安裝

若要從 R 官方的 CRAN 網站安裝,就執行:

install.packages("Rfacebook")

從 GitHub 安裝

若要從 GitHub 下載最新版的 Rfacebook,首先需要先安裝 devtools

install.packages("devtools")
library(devtools)

接著使用 install_github 安裝 Rfacebook

install_github("Rfacebook", "pablobarbera", subdir="Rfacebook")
library(Rfacebook)

Rfacebook 認證設定

使用 Facebook 存取權杖(Token)

從 facebook 的 Graph API 測試工具的網頁上產生一個存取權杖(token),將其複製之後,放在 R 的 token 變數中:

token <- "EAACEdEose0cBANAjh3xCYmHWoQPi9MZBZCuIyLBOvsCtH71vTnndd5NsIeSvy5UU1DSSxCYjX8pWIOvRBid6lWOwYwhAxDzZA3dnsbRadtj3FZCaHfpBndc8ae911Wp0pR5GPoq3ZAa5AWooIe34aYkVmkvBHRFt1n44kbWJNywZDZD"

有了存取權杖之後,就可以使用 Rfacebook 來擷取 facebook 網站上的資料了:

me <- getUsers("me", token, private_info = TRUE)
me$name
[1] "Guo-Zhao Wang"

使用 Facebook 應用程式編號與密鑰

使用 fbOAuth 函數,配合上面複製的應用程式編號與密鑰,即可獲取可長期使用的 OAuth 授權 token:

require("Rfacebook")
fb.oauth <- fbOAuth(
  app_id="1675426256053176",
  app_secret="216739d2688d42b4d1d1d901fa4cbbc4",
  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 app 的網頁,在「設定」頁面中,點選「新增平台」。

facebook-social-media-mining-with-r-12

facebook app 設定

選擇「網站」。

facebook-social-media-mining-with-r-13

選擇「網站」

將剛剛複製的網址貼在「網站網址」欄位中。

facebook-social-media-mining-with-r-14

貼上網站網址

按下任意鍵,等待瀏覽器進行認證:

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

認證完成後,測試是否可以正常擷取資料:

me <- getUsers("me",token=fb.oauth)
me$name
[1] "Guo-Zhao Wang"

將這個 token 儲存起來,以備未來使用:

save(fb.oauth, file="fb_oauth")

未來在使用前,只要使用 load 載入這個 token 就可以直接使用:

load("fb_oauth")
R

6 留言

  1. CCY

    你好
    想請問設定完畢後,上面那些指令都是KEY在R語言上嗎?
    感恩

  2. jun

    你好,請問如果想抓某一個時間片段裡的粉專內容
    該怎麼寫比較好?
    謝謝

  3. 簡嘉宏

    你好,請問一下為何我會找不到 metric
    我跑aggregate.metric<-function(metric){m<-aggregate(page[[paste0(metric,"_count")]], list(month=page$month), mean)} 這部分沒有錯誤
    可是沒有出現 m ,R找不到她
    於是我單獨跑
    m<-aggregate(page[[paste0(metric,"_count")]], list(month=page$month), mean)
    出現metric
    非常謝謝您的教學,非常有用

  4. Ken

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

  5. CN

    請問:在 R STUDIO輸入完金鑰後,進行瀏覽器認證,但是出現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.
    我看了很多資料,都沒看懂如何解決,您能幫忙說明嗎?謝謝

Comments are Closed