前回の記事
この記事は「WordPressにプログラムを埋め込む方法~ワードクラウドサイト制作①~」の続きです。
前回の記事を読んでない方は下記リンクを活用ください。

この記事で紹介するワードクラウドサイト
この記事ではツイート内容をワードクラウドしてくれるサイトの制作方法を解説しています。
実際のサイトは下記リンクにあるので、是非ご覧ください!

WordPressからRプログラムを呼び出す際の注意点
前回の記事では、WordPressからPHP経由でRプログラムを呼び出す方法について解説しました。
PHP側で注意すべき点は前回の記事で解説したので、今回はR側で注意すべき点について解説します。
R側でも重要になってくるのがユーザー権限です。
ubuntuでRプログラムを実行する際はubuntuのユーザーで作成・実行されますが、
WordPressから実行する際はWordPressのユーザーとして設定されているwww-dataで実行されます。
そのため、プログラムやプログラムから出力するファイルはWordPress以下のディレクトリに保存することをお勧めします。
また1番注意していただきたいのは、Rプログラム内で使用するライブラリのインストール先です。
私は初めubuntuのローカルユーザーでプログラムを作成していたため、ライブラリもubuntuのローカルユーザーのディレクトリにインストールしていました。
しかし、この場合だとWordPressのユーザーであるwww-dataはubuntuのローカルユーザーのディレクトリにアクセスできないため、ライブラリの読み込み時にエラーがでます。
対策としては、スパーユーザーでライブラリをインストールする方法をお勧めします。
スパーユーザーでインストールすることでwww-dataからでもライブラリが読み込めるようになります。
以下コマンドを記載します。
スーパーユーザーでRを起動
sudo R
パッケージのインストール
install.packages("ライブラリ名")
Rプログラム:ワードクラウド
プログラム全体の構成
プログラムの全体構成は下のようになっており、HTMLの入力フォームからツイッターアカウント情報を取得後、PHPを介してワードクラウド用のRプログラムを呼びだす仕組みになっています。
- HTMLー
- 入力フォーム
- PHPー
- アカウント情報をテキストファイルに書き込み
- Rプログラムの呼び出し
- 画像データの表示
- Rプログラムー
- テキストファイルの読み込み
- ツイート情報の収集
- ワードクラウド
- 画像データの作成
その内、R部分のソースコードを下記に示します。
Rソースコード
# ライブラリの読み込み
library(tm)
library(twitteR)
library(RMeCab)
library(dplyr)
library(purrr)
library(stringr)
library(wordcloud)
library(wordcloud2)
library(tidyverse)
library(webshot)
library(htmlwidgets)
# アクセストーンの設定
ak <- "API Keyを入力"
ask <- "API Secret Keyを入力"
at = "Access Tokenを入力"
ats = "Access Token Secretを入力"
# アクセストークンを発行
setup_twitter_oauth(ak, ask, at, ats)
# ディレクトリの移動
setwd("アカウント情報を保存したテキストファイルのディレクトリ")
# ツイッターアカウントを取得
account <- read.table("filestream.txt")
account <- as.character(account[1,1])
account <- gsub(" ", "", paste("from:@", account))
# ツイッターからツイートを検索&収集
tweets <- twListToDF(searchTwitter(account, lang="ja", n=300))
# 取得したツイートから\\p{ASCII}を除去
tweets = str_replace_all(tweets$text, "\\p{ASCII}", "")
# ツイートを一つのテキストに結合
tweets_all = ""
for (i in 1:length((tweets))){
tweets_all = paste(tweets_all, tweets[i], seq = "")
}
# テキスト出力
write.table(tweets_all, "tweets_all300.txt")
# RMeCabによる携帯要素解析(名詞や形容詞を抽出し、出現回数をカウント)
docDF_tweets = docDF("tweets_all300.txt", type = 1)
# 名詞(noun) and 非自立 (non-autonomous)を抽出
docDF_tweets2 = docDF_tweets %>% filter(POS1 %in% c("名詞","形容詞"), POS2 != c("非自立"))
# ワードクラウドを作成&画像生成
png("wordcloud.png", width = 400, height = 400)
wordcloud(docDF_tweets2$TERM,docDF_tweets2$tweets_all300.txt, min.freq= 1, scale=c(4.0, 1.0),
colors = brewer.pal(8,"Dark2"))
dev.off()
コメント