Category Archives: SNS

coreserverでツイッター(Twitter)のボット(bot)を動かす

Twitterには、自動投稿用のボットのウエブサービスもあるようですが、自分のサーバーから自分のアプリケーション名でツイートを行いと思い、設定をしてみました。

ボット1)まず、「プログラミングができなくても作れるTwitter botの作り方(別ウインドー)」からPHPのスクリプトセットをダウンロードします。

ダウンロードしたzipフィルを解凍すると、図のようなファイル構成になっています。

  • 設定が必要なファイル
  • bot.php:botの動作のパターンを書くファイル。CRONで実行するファイル。
  • data.txt:自動投稿用原稿
  • reply_pattern.php:自動リプライ用原稿
  • 設定の必要が無いファイル
  • EasyBotter.php:botを動かすためのメインのスクリプト。
  • log.dat:返信履歴を記録するためのファイル。
  • /PEAR(フォルダ):botを動かすためのライブラリ。
  • setting.php:botにアクセスするためのキーを書き込む設定ファイル


2)Twitter APIの登録

(1) Twitter developers(別ウインドー)にアクセスし、自分のTwitterアカウントでログインします。

ボット2

(2)「Create a new aplication」をクリック

ボット3

(3)情報を記入します。

ボット5Name:ツイートしたときに表示されるAPI名(だと思います)

Description:適当に説明を入れます

WebSite:NameをクリックしたときにジャンプするURL

(4)変な文字を写し取り、「Create〜」をクリック!

ボット6

(5)表示された「Consumer key」と「Consumer secret」をどこかに写し取っておきます。

ボット7

(6)「セッティング」タブをクリック

ボット8

(7)「Application Icon」でツイート時に表示されるアイコンのファイルを選択します。私は「Kappa_2.jpg」というファイルですね。

ボット8

(8)さらに「Application Type」を「Read and Write」に変更

ボット10

(9)「Organization」にもそれなりの名前とURLを入れてあげます。そして「Update〜」をクリックo(^0^)o

ボット11

(10)「Detail」タブをクリックすると…

ボット12

おお!アイコンが「エルモカッパ」に変わっていました。

ボット13

(11)ページ一番下の「Create my access Token」をクリック

ボット14

(12)表示された「Access token」と「Access token secret」をどこかに写し取っておきます。

ボット15

3)「bot.php」をカスタマイズします。

やりたいアクションの文頭の//を削除します。

今回は「自動投稿」と「自動リプライ」なので、7行目と9行目の文頭の//を削除しました。

//=============================
//botの動作をここに書いてください
//先頭に//がある行はコメント扱いなので実行しません。実行したい行の頭の//を削除してください。
//=============================
//$response = $eb->autoFollow();
//$response = $eb->postRandom("data.txt");
$response = $eb->postRotation("data.txt");
//$response = $eb->reply(10,"data.txt","reply_pattern.php");
$response = $eb->replyTimeline(2,"reply_pattern.php");

(1)自動投稿

$response = $eb->postRotation(“data.txt”);

data.txt(設定は後述)から発言データを読み込んで、書き込んだ順にツイートします。

(2)自動リプライ

$response = $eb->replyTimeline(10,”reply_pattern.php”);

ここでCRONの実行間隔は10分ごとです。

※サーバーのCRONの間隔と同じにして下さい。

※この時間が長いと、取りこぼしが増えます。サーバーやTwitterの状態にもよりますが、10分程度なら大丈夫のようです。

タイムラインのツイートがreply_pattern.phpに用意したパターンに当てはまる場合は、設定した台詞をツイートします。

4)「data.txt」の設定。

自動投稿するツイート原稿を改行で区切って入力します。

  • 必ず複数行(2件以上)にしてください。
  • 最後の行は改行はいりません。
  • 各行は140文字以内。
  • UTF-8とLFで保存します。

例:

モカの腹が12時をお知らせします。ランチですo(^0^)o
モカの腹が12時をお知らせします。お腹減った。
モカの腹が12時をお知らせします。今日のお弁当は?。

5)「reply_pattern.php」の設定

タイムライン上で反応させるキーワードと、それに対するリプライを書きます。

  • 1行でも大丈夫です。
  • 最後の行は改行はいりません。
  • 各行は140文字以内。
  • UTF-8とLFで保存します。

例1———————————————-

「おはよ」という文字がタイムライン上に出たら、それにリプライします。

「おはようござい!」「おはよーー」などに反応します。

「おはようございます、今日も一日元気で。」「朝です!今日も良いことがありますように。」「朝ご飯食べてね(^_^)」がランダムにリプライされます。

<?php
$data = array(
"おはよ"=> array(
"おはようございます、今日も一日元気で。",
"朝です!今日も良いことがありますように。",
"朝ご飯食べてね(^_^)",
),
);

例2———————————————-

例1に加えて、「おやすみ」という文字がタイムライン上に出たら、それにリプライします。

「おやすみ!」「おやすみなさい」などに反応します。

「おやすみなさい、良い夢を。」「グッドナイト〜(^_^)」「一日お疲れ様でした。」がランダムにリプライされます。

<?php
$data = array(
"おはよ"=> array(
"おはようございます、今日も一日元気で。",
"朝です!今日も良いことがありますように。",
"朝ご飯食べてね(^_^)",
),
"おやすみ"=> array(
"おやすみなさい、良い夢を。",
"グッドナイト〜(^_^)",
"一日お疲れ様でした。",
),
);

例3———————————————-

キーワードには正規表現も使えます。

「こんにちは」「こんにちわ」「こんちは」「こんちわ」の全てに反応するようにするには、

"こん(に)?ち[はわ]"=> array(
"はい、こんにちは。",
),

6)「setting.php」の設定

ファイルを開き、上でメモした値を入力します。

$screen_name = "mocamoca"; //botのid名
$consumer_key = "xxxxxxxxxxxxxxxxxxxxxxx"; // Consumer keyの値
$consumer_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // Consumer secretの値
$access_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // Access Tokenの値
$access_token_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // Access Token Secretの値

7)全てのファイルをサーバーにアップします。

例えば「cgi/kappa」というディレクトリにアップします。

「txtファイル」「reply_pattern.php」「log.dat」のパーミッションを「666」に設定。

さらに

http://mocamoca.com/cgi/kappa/bot.php

にアクセスすると、下記のようなページ表示になりました。

ボット14

さらにツイッターのタイムラインにもツイートが!

ボット17

すかさず、「なんで今ランチなの?」という感じの突っ込みが入ります。

ボット18

すみません。

8)シェルスクリプトを作成します。

#!/bin/sh

#PHP
/usr/local/bin/php(半角スペース)/virtual/[ユーザー名]/public_html/cgi/kappa/bot.php
exit

このようなスクリプトを作成し「.sh」という拡張子で保存(LF)(ファイル名は任意)。

サーバーのpublic_htmlと同じ階層にアップしてパーミッションを705にします。

ボット8)coreserverの管理画面で「CRONジョブ」を選択し、CRONジョブを動かす時間を設定します。

10分ごとにCRONジョブを動かしたいのですが、coreserverは一つのCRONジョブを1時間間隔でしか動かせません。

そこで、ここでは同じ内容のシェルスクリプトを6つ作り(ファイル名は別々)、それを10分ごとに動かすことにしました。

これで10分おきに先に設定したツイートファイルを順番に無限ループでツイートし、タイムライン上のキーワードを含むツイートにリプライします。

自動投稿は1時間おき、自動リプライは10分おきにするような場合は、それぞれのbot.phpを作り、別々に動かせば大丈夫です。

  • 自動ツイート用:cron1.shでbot1.phpを設定→1時間ごとにCRONジョブで実行
  • 自動リプライ用:cron2.shでbot2.phpを設定→10分ごとにCRONジョブで実行

bot_21.gif

以上でおしまいです。