ホーム > 技術情報 > TwitterBot「ナボット-NABOT-」

TwitterBot「ナボット-NABOT-」

投稿日 : 2018年07月15日   更新日 : 2019年10月12日
カテゴリー : PHP/javascript/CSS / Wordpress / 技術情報 / SNS
TwitterBot「ナボット-NABOT-」の画像

こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
私はPHPエンジニアとして6年~の経験があります。WordPressは2年~の経験があります。その他、jQuery、HTML、CSSも使用します。
ここでは主に過去に納品した案件や自サイト運営(エンジニア婦人ノート)で遭遇したことについて書いています。

NABOTは、自分の名前から取りました、はい。洒落てるでしょう(←?)

更新情報通知に投稿されている記事の中からランダム選出して、一日一回つぶやいたら面白いかなーと思った次第です。過去の埋もれていた記事が目に触れる機会が増える見込みです。

今回はTwitterbot、ナボットの作成方法について記述します。

仕様

  1. このサイト(Wordpress)に既に投稿されている記事をランダムに取得し、Twitterに投稿するbot
  2. 通常投稿とカスタム投稿を含む(固定ページは除外)
  3. ライブラリは「abraham / twitteroauth」を使用
  4. botなので自動実行する設定を組み込む(サーバー設定)

開発時間:3時間弱

作り方

TwitterAPIを使えるようにしておく(2019年10月追記)

開発前に、TwitterAPIを使えるようにしておいてください。
以前はそんなに厳しくなかったのですが、現在(2019年10月時点)は「APIをどのように使うのか」といったことを書かなければなりません。

とはいえ審査が厳しいというわけではないので、ありのままの事実を英語で記述すれば大丈夫です。

申請はこちらから行えます。

WordPress関数を外から使えるようにする

// WordPress関数を使えるようにする
require_once( dirname( __FILE__ ) . '/../wp/wp-load.php' );

読み込み先のパスはbot設置場所などの環境に合わせてください。

データベースに直接アクセスするロジックを書いて、とも思ったのですが、リンクを生成するにあたってパーマリンク生成が面倒なので、今回はこちらの方法を使用しました。

このbot自体が、そこまで重い処理でもないのでネックにはならないかと…

Twitterライブラリを読み込む

// Twitterライブラリ
require ( dirname( __FILE__ ) . '/twitteroauth/autoload.php');
use Abraham\TwitterOAuth\TwitterOAuth;

先ほどダウンロードしてきたライブラリを読み込みます。パスは環境に合わせてください。

Twitter認証情報を設定

// Twitter認証情報4つ
$consumerKey = "コンシュマーキー";
$consumerSecret = "コンシュマーキーシークレット";
$accessToken = "アクセストークン";
$accessTokenSecret = "アクセストークンシークレット";

botを作動させたいTwitterアカウントのAPIキーです。

取得方法はこちらを参照してください。

WordPressから情報を取得する

投稿タイプにカスタム投稿を追加し、その中からランダムに1件取得します。

取得した情報から、botに投稿させたい内容を編集します。

URLはそのまま記述してもただのテキストになってしまうので、Twitter短縮リンクを生成してそれを載せるようにします。

// カスタム投稿タイプを取得
$args = array(
    'public' => true,
    '_builtin' => false
);
$postTypes = get_post_types($args);
// 通常投稿タイプを追加
$postTypes['post'] = 'post';

// Twitter短縮リンクを生成する
$url = get_permalink($posts[0]->ID);
$api_url  = "http://tinyurl.com/api-create.php?url=";
$resultUrl = @file_get_contents( $api_url.$url );

// 投稿する文章を設定
// $post[0]->post_title などで必要なものを取得可能
$string = "投稿したい取得した文章を記述";

Twitterに投稿する

編集した文章をTwitterに投稿します。

140文字以上になっていると投稿エラーで投稿できないので、注意してください。

$api_url  = "http://tinyurl.com/api-create.php?url=";
$resultUrl = @file_get_contents( $api_url.$url );

//接続
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

//ツイート 投稿させたい文章をstatusに設定
$res = $connection->post("statuses/update", ["status" => $string]);

投稿例

Twitter動作するとこんな感じになります。

TwitterをCron設定する

botですから、自動投稿してくれないと意味がないですよね。

私はさくらのレンタルサーバーを使用しているので、そこの説明通りに設定しました。

公式サイトもですが、Cron設定方法の解説はこちらがわかりやすいです。

セキュリティ:サーバーからしか実行できないようにする←大切ですよ!

現状のままでは、誰かがURLを踏んでしまうと、ツイートされてしまいます。

これを防ぐためには、「サーバーからしか実行できないようにする」仕組みが必要です。

ここではプログラムで判定させることにしました。

プログラムの頭に

if(!isset($_SERVER['SHELL'])) {
    exit;
}

を入れて、シェルでなければ実行させないようにしています。

余談:こういう自動実行系やただの処理系は、クローラーが悪さをするかもしれない

前に経験した話ですが、こういった自動実行プログラムや、「これが実行されたら+1する」的なものを置いていたときに、予想外のツイートや処理が実行されたことがあります。

このときの犯人はクローラーでした。

クローラーがアクセスしに来たので処理が実行されてしまい、予想外のツイートやカウント数になってしまったことが…

なので、URLを踏まれたら実行するようなCronや処理系のプログラムは

  • 「クローラーには実行させない」
  • 「サーバーからのアクセス以外には実行させない」

仕組みが必要です。

悩んだ、ハマったところ

悩んだ、ハマったポイント1-改行反映されないよ-

投稿文章内の改行がなかなかうまく反映されず、ハマりました。

調べた結果、「改行文字コードを可変にしてあげればいい」とのことでした。

改行がある場合は改行を「\\n」で登録しておいて、最後に「PHP_EOL」で置換しています。

$string = str_replace("\\n", PHP_EOL, $string);

悩んだ、ハマったポイント2-リンクがただのテキストになっちゃうよ-

リンクは表示されるのですが、ただのテキストです。クリックできない。

これ、クリックされないよねー…どうしたらいいんだろう、とあれこれ試行錯誤した結果、短縮URLを使えばいいらしい!ということがわかりました。

ということで、上にもありますが、URLは短縮URLを生成して載せています。

$api_url  = "http://tinyurl.com/api-create.php?url=";
$resultUrl = @file_get_contents( $api_url.$url );

悩んだ、ハマったポイント3-画像が表示されないよ-

Twitterの画像が表示されたリンクは「Twitterカード」というようです。

このカードですが、以前はTwitterに申請して許可が下りてからだったようですが、現在(2018/7/14現在)はmetaタグが入っていれば問題ないようです。

WordPressであれば、All in One SEOで設定してしまうのが早そうです。

そうでなければheader.phpなどにmetaタグを直接出力する仕組みを記述する方法を取ります。

これらのタグが出ていれば問題ないようです。

All in One SEOで設定する場合はこちらを参照してください。

以上、TwitterBot、ナボット-NABOT-の作り方でした。

これ、ソース書くの面倒、又は書けないからそのまま欲しい!っていう需要はあるんでしょうか?あるなら配布を考えなくもない…

参考元

楽しい物造りを

NaoLight

自分のブログやサイトを、楽しく作ってもらえたら。

プログラムを使って望み通りに、拡張しやすく、自分の思うように。

できたときに、すごく楽しい!と思ったら。

控えめに言って、「最高です」。

NaoLight -NAOT-(なおらいと、なおと、と呼んでください)はそんな思いをカタチにする、WordPressのテーマです。

ご購入はこちらからお願いします(BOOTHへ移動します)。

Nao Light-NAOT-公式サイト