WordPress

Hi, I detected your main language is not Japanese. I have an english version of about me, so please try it!

この投稿は3年半前の記事です。 情報が古くなっている可能性があるので、その点ご了承ください。
2014 年 9 月 29 日 1,165日前)
2,972文字 (読了時間7分)

SPONSORED LINK

さて、先ほど拙作WordPressプラグインGianismを2.2にアップデートいたしました。バグフィックスはなしで、新機能追加です。その新機能はTwitterボット作成機能!

設定 > Gianism設定からこの機能をオンにすると、Twitterボットという新しい投稿タイプが表示されます。このボットは次のような機能を持ちます。

  1. Gianismで利用しているTwitterアプリ用アカウントで
  2. 指定した時間と曜日に
  3. 指定した内容を呟き
  4. 指定した日時が訪れると終了する

定期的に同じような内容を呟くなら、各種のボット作成サービスというのがあるのでそれを使えばいいのですが、WordPressで管理しているコンテンツについて何らかのつぶやきをしたい場合なんかに使えるかと。

そもそもこの機能を作ったのは、あなたが読めなくなった作家を教えてくださいのようなキャンペーンのためなんですけどね。

モンゴル皇帝時報botを作ってみる

ぼくがtwiterのタイムラインでたまに目にする「モンゴル皇帝時報bot」みたいなのを作ってみましょう。特定の時間が来ると、「◯ジ・ハーン」と呟くヤツですね。

さて、まずは新規twitterボットを作成して、こんな感じで投稿を作ります。twitterボットの場合、同じことを何度も呟くだけでは面白くないので、時間帯によってつぶやく内容を変えたりしたいですよね。

投稿編集画面で時間帯とつぶやきを指定
投稿編集画面で時間帯とつぶやきを指定

基本は時間帯を追加して曜日ごとにオン/オフを切り替えていく感じです。「毎時n分」とかそういう設定をできるようにしようと思ったのですが、めんどくさかったので今回はやっていません。

動的な部分に関してはショートコードを使います。デフォルトでは特定の日付まで「あと◯日」と表示するgianism_limitというショートコードを用意してあるのですが、今回はnanji_hanという独自ショートコードを作ります。テーマのfunctions.phpとかに書いておきます。

// ショートコードを追加

add_shortcode('nanji_han', function($atts = array()){
     // 現在時を取得
     $now = current_time('mysql’);
     // 月日を取得
     $date = mysql2date('m-d', $now);
     // 時間を取得。ちなみに、WordPressのdate_i18nは
     // Gが使えない(GMTとして解釈)します。
     $hour = intval(mysql2date('H', $now));
     switch( $hour ){
          case 15:
               // 15時台だったらおやつ食べる
               return 'オヤツ・アーン';
               break;
          default:
               // クリスマスイブの16時以降なら……
               if( '12-24' == $date && 16 < $hour ){
                    return 'アンアン・アーン';
                    break;
               }
               // 大晦日なら鐘が鳴る
               if( '12-31' == $date && 22 < $hour ){
                    return 'ジョヤノカネ・ゴーン';
                    break;
               }
               // それ以外は時報
               $time_str = '';
               $hour_str = array('レイ', 'イチ', 'ニ', 'サン', 'ヨ', 'ゴ', 'ロク', 'シチ', 'ハチ', 'キュウ', 'ジュウ', 'ジュウイチ', 'ジュウニ');
               if( isset($hour_str[$hour]) ){
                    $time_str = $hour_str[$hour];
               }elseif( isset($hour_str[$hour - 12]) ){
                    $time_str = $hour_str[$hour - 12];
               }
               if( $time_str ){
                    return $time_str.'ジ・ハーン';
               }else{
                    return '';
               }
               break;
     }
});

で、試しにやってみたところ動きました。

こんな使い方があるよ

この機能は定期的に何かを呟くだけならあまり意味がない(ボット作成サービスの方が楽)のですが、なにか動的な要素と組み合せると価値があるんじゃないでしょうか。

ちなみに、Gianismにはupdate_twitter_statusという関数があり、設定をきちんとすませておけばtwitterで自動で呟くことができます。この関数、我ながらとても便利だと思うのですが、誰にも褒められたことがありません。使ってる人いるんですかね。

思いつく利用方法としては、以前紹介したGoogle Analyticsの Real Time Reporting API などを利用して、「現在人気急上昇のコンテンツ」を自動で告知するなどがあるんですが。

あとは他のイベントを検知して呟くようなプル型の告知方法があると便利かもしれませんね。終わり。

誰でもできるTwitter Botの作り方―人気キャラにつぶやかせる

誰でもできるTwitter Botの作り方―人気キャラにつぶやかせる書籍

クリエーター鏑家経済研究所

発行イーグルパブリシング

発売日2010 年 7 月 23 日

カテゴリー単行本(ソフトカバー)

ページ数192

ISBN486146188X

Supported by amazon Product Advertising API

 

SPONSORED LINK

この記事について

この記事はが2014 年 9 月 29 日にプログラミングの記事として公開しました。

フォローしてください

ここで会ったのもなにかの縁。
高橋文樹.comの最新情報を見逃さないためにもフォローをお願いします。
めったに送らないメルマガもあります。

  • Pingback: 2014年9月30日 本日の気になる記事まとめ | No:1372 |()

  • Pingback: WordPressで自動返信するtwitterボット作れるの知ってた? | 高橋文樹.com()

  • ぴーかっぷ

    何故かSNSログインができません。ログインボタンを押すとエラー画面に移ってしまいます。他の方は通常通りログインできているのでしょうか。

    ちなみに、こちらのツールは何度か取り入れていまして、今回のアップグレードからうまくいかなくなりましたので、デベロッパーの設定などには間違いはないと思います。

    お手数ですがご確認よろしくお願いします。、

    • どのSNSでしょうか? twitterですか?

      • ぴーかっぷ

        はい、ツイッターです。

        • 私が管理するサイトでは問題なく動いています。他にそういうメッセージがあるかどうかはわかりません。
          エラー画面というのは、どういう画面でしょうか。メッセージが表示される場合、その内容、もし可能であればスクリーンショットなどいただけると修正が早いかもしれません。

  • 匿名希望

    先日WardPressを設置したばかりの初心者ですがご教授頂きたくコメントした次第です。

    WardPress設置後、Gianismをインポートして
    Twitterボットの投稿テストをしているのですがツイートがうまく投稿されません。

    サーバーはXdomainを利用しています。
    プラグインのサポートフォーラムを参考に
    ・パーマリンク設定=日付と投稿名
    ・Twitter DevelopersでのコールバックURL
    ・ツイート記事の終了日=2014-12-31
    に設定しています。

    Gianismを追加し、一番最初に設定したツイートの一番最初の予約時間のみ投稿されましたが
    その後はツイートが投稿されません。設定不足でしょうか?

    • つぶやきの内容は時間とともに変化するものですか? Twitter APIはまったく同じ内容のツイートが連続することを許可していないんですよ。書き忘れていましたが。

      もしくは、そのサイトのアクセスが少ない場合も考えられます。
      この機能はWP-Cronというのを使っているので、少なくとも1時間に1回ぐらいはアクセスがないと機能しません。

      上記、ご参考の上、どうだったか教えていただけると嬉しいです。

      • 匿名希望

        迅速な返答ありがとうございます。

        同一内容のツイートが投稿されないのは知っていたので
        ツイート記事を2種類用意し、交互に呟くタイミングで投稿予約を設定していました。
        アクセス数の件は初めて知りましたので
        投稿予約時間の10分前ほどに別端末からWardPressのページにアクセスしたのですが(念のためTwitterの投稿も連投とならないように違うツイートをTwitterのwebページからツイートしておきました。)やはりツイートされませんでした。

        ご返答の内容に対する検証の方法はあっているでしょうか?

        • アクセスするのは予約時間の後じゃないとダメですね。

          • 匿名希望

            自分の勘違いであれば大変にお恥ずかしいのですが、つまり投稿予約時間は目安であって必ずこの時間に投稿される訳ではない(アクセスされるタイミングによって前後する)ということでしょうか?

          • WordPressのWP-Cronは擬似的な機能なので、少なくとも1秒に1回のアクセスがないと秒単位での正確性は出ません。

            http://www.sandalot.com/wpの予約投稿失敗の原因究明のためwpcronphpを読んでみた/

            もし投稿時間を1分1秒違わずにやりたい場合は、以下の方法を試してください。

            http://qiita.com/blogger323/items/6aed3bad7046f5769c7f

            CrontTabの設定方法はお使いのレンタルサーバによって違います。(できない場合もあります)

            僕のサーバでは同じ方法で正確に呟くようになっています。

          • 匿名希望

            調べてみたところ、使っているサーバーではcornの設定ができないようです、詳しく教えて頂きありがとうございました。

            別の質問になるのですが、現在Twitterアカウントからのみログインできる簡単な会員制サイトを作成しています。Giansmで最初にログイン(ユーザー登録)する際に、そのユーザーのTwitterアイコンをそのままWordプレスのプロフィール画像として登録することは出来るのでしょうか?とっかかりだけでもわかればと思い質問させていただきます。

          • Crontabが設定できないサーバのためのWebサービスがありますよ。

            http://dblog.hrgrweb.com/archives/723

            twitterアイコンの画像取得方法なのですが、ここに書いてあります。

            https://dev.twitter.com/overview/general/user-profile-images-and-banners

            で、要望が多そうなこの機能をなぜ実装していないかというと、

            – 画像は変わることがありえるし、遅いので、保存しないといけない。これが大変。
            – gravatarのサイズ指定はけっこうよくできており、それと同じ仕組みを作るのはちょっと大変。

            という理由です。ご参考までに。