毎日書いているブログを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に与える影響が分かってきたらそれもレポートしたいと思います。
0 件のコメント:
コメントを投稿