WP-CLIを使って記事を自動投稿させてみる

[blogcard url=”https://wakabatimes.com/2018/10/10/891/”]

[blogcard url=”https://wakabatimes.com/2018/10/10/888/”]

[blogcard url=”https://wakabatimes.com/2018/10/09/874/”]

[blogcard url=”https://wakabatimes.com/2018/10/08/837/”]

こういった記事を配信していますが、こちらはWP-CLIと呼ばれるWordPressをコマンドから管理出来るツールを使って定期的に自動投稿させています。今日はその方法を書いていきます。

WP-CLIをインストール

[blogcard url=”http://wp-cli.org/”]

にある通り

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

自動投稿するシェルを作成する

自動投稿は「wp post create」というコマンドでできます。

[blogcard url=”https://developer.wordpress.org/cli/commands/post/create/#examples”]

ひとまずgoogleトレンドAPIを拾ってきて記事化してみましょう。
処理の流れとしては以下です。

①Google Trend APIでjsonデータを取得

②記事の本文を作成

③WP-CLIで記事を投稿

④アイキャッチ用の画像を登録

①Google Trend APIでjsonデータを取得

# ①Google Trend APIでjsonデータを取得
BASE_PATH=/var/hogehoge/google_trend/
DATE_CODE=`date +%Y%m%d`
JAR_NAME=google_trend_api_batch-v1.0.jar
SAVE_DIR=/var/hogehoge/json/google_trend/
SAVE_FILE="google-trend-"${DATE}".json"

java -jar ${BASE_PATH}${JAR_NAME} JP ${DATE_CODE} ${SAVE_DIR} ${SAVE_FILE}

googleトレンドAPIはこちらの方法で取得

[blogcard url=”https://wakabatimes.com/2018/10/01/612/”]

②記事の本文を作成

# ②記事の本文を作成
DATE=`date "+%Y%m%d%H"`
TEXT_DIR="/hogehoge/saved_text/" # 本文の書かれたテキストファイルの場所
TEXT_FILE="hoge" # ファイル名(拡張子を除く)
TEXT_EXTENSION="txt" # 拡張子
JSON_WP_PATH="/hogehoge/json/google_trend/" # 本文で読み込む際のjsonのパス
FIRST=`cat ${SAVE_DIR}${SAVE_FILE} | jq -r '.default.trendingSearchesDays[0].trendingSearches[0].title.query'` # 一位の単語を抜き出し
SECOND=`cat ${SAVE_DIR}${SAVE_FILE} | jq -r '.default.trendingSearchesDays[0].trendingSearches[1].title.query'` # 二位の単語を抜き出し
CONTENT_DATE=`date "+%Y年%m月%d日%H時"` 

# ファイルへ書き出し
cat < ${TEXT_DIR}${TEXT_FILE}_${DATE}.${TEXT_EXTENSION}
${CONTENT_DATE}時点のGoogle トレンドワードワードを拾ってきたよ。
1位は「${FIRST}」で2位は「${SECOND}」。
このランキングは特定の時間帯のものだからリアルタイムなものが知りたかったらGoogle トレンドで調べてみてね。
<div class="json-load-content" data-type="google_trend" data-path="${JSON_WP_PATH}${SAVE_FILE}" data-title="Google トレンドワードまとめ【${CONTENT_DATE}】">Google >トレンドワードまとめ【${CONTENT_DATE}】</div>
EOF

一位と二位の単語を抜き出すにあたってjqコマンドを使っています。

jqコマンドはこちらを参考

[blogcard url=”https://qiita.com/takeshinoda@github/items/2dec7a72930ec1f658af”]

③WP-CLIで記事を投稿

# ③WP-CLIで記事を投稿
WP_DIR="/hogehoge/wordpress/" # ワードプレスのパス
TITLE="[${FIRST}][${SECOND}]Googleトレンドワードまとめ【${CONTENT_DATE}】"
CATEGORY=1 # カテゴリーID
USER=hoge # ユーザー名
TAG=googletrend # タグ
STATUS=publish # 投稿時のステータス
URL=google-trend-ranking-${DATE} # 投稿時のURL

CREATE=`cd ${WP_DIR} && /usr/local/bin/wp post create ${TEXT_DIR}${TEXT_FILE}_${DATE}.${TEXT_EXTENSION} --post_title="${TITLE}" --post_category=${CATEGORY} --user=${USER} --tags_input=${TAG} --post_status=${STATUS} --post_name="${URL}"`
POST_NO=`echo ${CREATE} | awk '{print substr($0, 23, 30)}' |  sed -e 's/[^0-9]//g'`

echo ${POST_NO}

細かく見ると

wp post create ${TEXT_DIR}${TEXT_FILE}_${DATE}.${TEXT_EXTENSION}

こちらで本文となるテキストファイルのパスを指定して

–post_title=”${TITLE}”

タイトルを指定

–post_category=${CATEGORY}

カテゴリーを指定

–user=${USER}

ユーザーを指定

–tags_input=${TAG}

タグを指定

–post_status=${STATUS}

投稿時のステータスを指定

–post_name=”${URL}”

投稿時のURLを指定

④アイキャッチ用の画像を登録

# ④アイキャッチ用の画像を登録
IMG_PATH="/var/hogehoge/images/hogehoge.jpg" // アイキャッチ画像にしたい画像のパス

cd ${WP_DIR} && /usr/local/bin/wp media import ${IMG_PATH} --post_id=${POST_NO} --title=${TITLE} --featured_image

③の処理が成功すると投稿Noを返してくれます。このNoを拾ってwp mediaコマンドを使ってアイキャッチ画像を登録します。

完成

#!/bin/sh

# ①Google Trend APIでjsonデータを取得
BASE_PATH=/var/hogehoge/google_trend/
DATE_CODE=`date +%Y%m%d`
JAR_NAME=google_trend_api_batch-v1.0.jar
SAVE_DIR=/var/hogehoge/json/google_trend/
SAVE_FILE="google-trend-"${DATE}".json"

java -jar ${BASE_PATH}${JAR_NAME} JP ${DATE_CODE} ${SAVE_DIR} ${SAVE_FILE}

# ②記事の本文を作成
DATE=`date "+%Y%m%d%H"`
TEXT_DIR="/hogehoge/saved_text/" # 本文の書かれたテキストファイルの場所
TEXT_FILE="hoge" # ファイル名(拡張子を除く)
TEXT_EXTENSION="txt" # 拡張子
JSON_WP_PATH="/hogehoge/json/google_trend/" # 本文で読み込む際のjsonのパス
FIRST=`cat ${SAVE_DIR}${SAVE_FILE} | jq -r '.default.trendingSearchesDays[0].trendingSearches[0].title.query'` # 一位の単語を抜き出し
SECOND=`cat ${SAVE_DIR}${SAVE_FILE} | jq -r '.default.trendingSearchesDays[0].trendingSearches[1].title.query'` # 二位の単語を抜き出し
CONTENT_DATE=`date "+%Y年%m月%d日%H時"` 

# ファイルへ書き出し
cat < ${TEXT_DIR}${TEXT_FILE}_${DATE}.${TEXT_EXTENSION}
${CONTENT_DATE}時点のGoogle トレンドワードワードを拾ってきたよ。
1位は「${FIRST}」で2位は「${SECOND}」。
このランキングは特定の時間帯のものだからリアルタイムなものが知りたかったらGoogle トレンドで調べてみてね。
<div class="json-load-content" data-type="google_trend" data-path="${JSON_WP_PATH}${SAVE_FILE}" data-title="Google トレンドワードまとめ【${CONTENT_DATE}】">Google >トレンドワードまとめ【${CONTENT_DATE}】</div>
EOF

# ③WP-CLIで記事を投稿 
WP_DIR="/hogehoge/wordpress/" # ワードプレスのパス
TITLE="[${FIRST}][${SECOND}]Googleトレンドワードまとめ【${CONTENT_DATE}】"
CATEGORY=1 # カテゴリーID 
USER=hoge # ユーザー名
TAG=googletrend # タグ
STATUS=publish # 投稿時のステータス
URL=google-trend-ranking-${DATE} # 投稿時のURL

CREATE=`cd ${WP_DIR} && /usr/local/bin/wp post create ${TEXT_DIR}${TEXT_FILE}_${DATE}.${TEXT_EXTENSION} --post_title="${TITLE}" --post_category=${CATEGORY} --user=${USER} --tags_input=${TAG} --post_status=${STATUS} --post_name="${URL}"` 
POST_NO=`echo ${CREATE} | awk '{print substr($0, 23, 30)}' | sed -e 's/[^0-9]//g'` echo ${POST_NO}

# ④アイキャッチ用の画像を登録
IMG_PATH="/var/hogehoge/images/hogehoge.jpg" # アイキャッチ画像にしたい画像のパス
cd ${WP_DIR} && /usr/local/bin/wp media import ${IMG_PATH} --post_id=${POST_NO} --title=${TITLE} --featured_image

こちらをcronで定期的に実行すれば自動で投稿してくれます。
他にもツイッターとかYoutubeとかAmazonのAPIなど応用できます。

[blogcard url=”https://wakabatimes.com/2018/10/02/683/”]

[blogcard url=”https://wakabatimes.com/2018/10/06/788/”]

[blogcard url=”https://wakabatimes.com/2018/09/25/249/”]

最後に

記事といっても「これが一位でこれが二位です」みたいな何にも中身がない記事です。もっといい感じの記事が自動で投稿できるようになればいいなぁと思う昨今です。こちらからは以上です。