Wordpressのタグ情報を取得してTwitter-Botにハッシュタグを付ける方法

2017年5月25日

PHP テクノロジー プログラミング

毎日書いているブログをTwitterに配信しているのだが、ちゃんとタグ管理をしているので、SNSのハッシュタグを付けたら、どの位PVをに影響するのかを確認してみたくて、PHPでコードを書いてみた。 ブログをwordpressで運用している人で、タグ管理をしている人は、是非参考にしてみてください。

やりたい事

TwitterBotは以前書いた記事を参照してもらうとして、 Twitterのbotを作る #1「下準備編:投稿だけなら簡単にできる」 今現在の仕様は、「ブログの記事タイトル、bitlyで変換したURL、ブログ画像」をTweetしているのだが、これにハッシュタグを追加する事にする。 プログラムの手順は以下の通り。
1. ブログの記事IDを取得 2. 記事IDから、タグIDを取得(複数) 3. タグIDを文字列に変換

Before -> aAfter

↓↓↓↓↓↓ 字が小さくて分かりにくいかもしれませんが、このようにハッシュタグを挿入します。

調査

データベース構造 | Wordpress 上記のページでWordpressのDB構成を確認。 今回はタグに関する箇所なんだが、該当するテーブルは「term」と名称に入っているのがそれに当たるようだ。

SQLコマンドで実験

上記の手順をSQL文で実行してみる。 まずは、サーバーにSSHでアクセスして、mysqlにログインしておく。 次に、事前にデータベースにアクセスしておく。※wordpressの箇所はDB名 $ mysql -h %host% -u %user% -u > use wordpress ちなみに、wordpressの設置の仕方でtable名が変わっている可能性があるので、table名を確認してコマンド実行してください。

1. ブログの記事IDを取得

記事IDの取得※事前にランダムで完了(single num) / table : news_posts select ID,post_title,post_name from news_posts where post_status="publish" and post_type="post" ORDER BY RAND() limit 1 上記コマンドで投稿記事から1つランダムでピックアップされます。

2-1. タグIDを取得(複数)

記事IDから、対象のタグIDを取得(array) / table : news_term_relationships select term_taxonomy_id from news_term_relationships where object_id=%記事ID% 1番で取得した記事IDをコマンドに入れ込むと、対象のタグID一覧が取得できます。 注意点として、この場合カテゴリとタグが一緒に取得されます。

2-2.タグのみを抽出

タグID(array)から、"post_tag"のみを抽出(categoryは除外) (array)/ table : news_term_taxonomy select * from news_term_taxonomy where taxonomy='post_tag' AND term_taxonomy_id=%タグID% 2番で取得したタグIDをタグ名称に変換しています。 この時に、taxonomyカラムの値が「post_tag」となっているのがタグ部分で「category」となっているのはカテゴリです。 とりあえず、カテゴリは除外しますが、取り込みたい場合は、このwhereをなくせばいいだけです。

3. タグIDを文字列に変換

4. タグID(array)から、名称を取得(array) / table : news_terms select name from news_terms where term_id=%タグID%; タグIDと名称は別管理されているので、上記でIDを名前に変換できます。

上記を全てまとめる

上記を別々に取得してもいいんですが、せっかくSQL使っているので、記事IDからタグ名一覧の出力を一括で行なってみます。 単純にSQL文を連結するだけなんですけどね・・・ select name from news_terms where term_id IN (select term_id from news_term_taxonomy where taxonomy='post_tag' AND term_taxonomy_id IN (select term_taxonomy_id from news_term_relationships where object_id=%記事ID%))

PHPでコーディング

botコード全体は載せられないので、抜粋した箇所のみを掲載します。 $mysqli = new mysqli("%ホスト名%", "%MysqlログインID%", "%Mysqlログインパスワード%", "%データベース名%"); $mysqli->set_charset("utf8"); // 記事を1つランダムで抽出 $result = $mysqli->query('select ID,post_title,post_name from news_posts where post_status="publish" and post_type="post" ORDER BY RAND() limit 1'); $row = $result->fetch_assoc(); // タグ情報の取得 $query = "select name from news_terms where term_id "; $query.= "IN (select term_id from news_term_taxonomy where taxonomy='post_tag' AND term_taxonomy_id "; $query.= "IN (select term_taxonomy_id from news_term_relationships where object_id=".$row['ID']."))"; $result4 = $mysqli->query($query); $tags = array(); while ($row4 = $result4->fetch_assoc()) { $tags[] = "#".$row4["name"]; } BOT部分は書いていませんが、Wordpressのタグ情報取得はこのようにして実現できます。 最後のwhileでハッシュタグ化しています。 $row4をwhileで繰り返さないと複数情報が取り出せません。 ちなみに、この情報追加がPVやSEOに与える影響が分かってきたらそれもレポートしたいと思います。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。