phpとOpera widgetでtwitter自作クライアントをつくる3
前回、phpとOpera widgetでtwitter自作クライアントをつくる2 - 付箋的メモ帳の続き。
今回はwidgetの動作を決めるjavascriptを書いていきます。
jQuery使用を前提としていきます。
やりたいこと
- 発言
- メンションの自動取得(1分おき)
- @を返す(ID手打ちなし)
- アクセストークン、アクセストークンキーの保存
- メンション自動取得のON・OFF切り替え
- 手動メンション取得
- メンション欄の表示非表示
$(function(){ var ResizeFlg = true; var m_viewFlg = true; var url = "phpを設置したURL"; var mantion = false; var mantion_clear = 0; var mentionsTimer = null; var getmantion = (function(){ var accT = String(widget.preferenceForKey("access_token")); var accTs = String(widget.preferenceForKey("access_token_secret")); $("#repstat").text("@取得なう"+new Date()); var timerId = setTimeout('$("#repstat").text("")',20000); var req = new XMLHttpRequest(); req.open( 'POST', url, false); req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); var last_id = widget.preferenceForKey("last_id"); var param = 'job=mention&AT='+accT+'&AS='+accTs+'&last_id='+last_id; req.send(param); if (req.readyState == 4 && req.status==200) { var data = eval("("+req.responseText+")"); widget.setPreferenceForKey(String(data[0].id[0]),"last_id"); var reps = ""; if(data!=null && data!=""){ jQuery.each(data,function(){ reps += "<div><span class='rep'>"+this.screen_name[0]+"</span>" +"<span>:"+this.text[0]+"</span></div>"; mantion_clear++; if(mantion_clear>30){ $("#mentions").empty(); mantion_clear = 0; } }); //$("#textbox").val(req.responseText); $("#repstat").text("@取得しました"+new Date()); clearTimeout(timerId); setTimeout('$("#repstat").text("")',3000); $("#mentions").prepend(reps); //$(".rep").unbind("click"); $(".rep").bind("click",function(){ var txt = String($("#textbox").val()); $("#textbox").val("@" + $(this).text() + " " + txt); }); } }else{ clearTimeout(timerId); $("#repstat").text("@取得できませんでした"+new Date()); setTimeout('$("#repstat").text(mainstatus)',3000); } }); //widgetロード処理 $(window).load(function(){ $("#settingform").css("display","none"); if (!window.widget) return; var AT = String(widget.preferenceForKey("access_token")); var ATS = String(widget.preferenceForKey("access_token_secret")); if(AT==null){ $("#AT").val("初起動です。設定してから使ってください。"); $("#settingform").css("display","block"); }else if(AT==""){ $("#AT").val("設定されていません"); }else{ $("#AT").val(AT); } if(ATS==null){ $("#ATS").val("初起動です。設定してから使ってください。"); $("#settingform").css("display","block"); }else if(ATS==""){ $("#ATS").val("設定されていません"); }else{ $("#ATS").val(ATS); } //mentionをはじめは20件取得する。 widget.setPreferenceForKey("","last_id"); //mentionを取得するかどうか mention = Boolean(String(widget.preferenceForKey("mantion_view"))); if(mention){ $("input[name=mention]").filter(function(){ return ($(this).val() == "true") }).attr("checked", true); window.resizeTo(200,380); getmantion(); mentionsTimer = setInterval(getmantion,90000); m_viewFlg = false; }else{ $("input[name=mention]").filter(function(){ return ($(this).val() != "true") }).attr("checked", true); $("#mentions").css("display","none"); } }); //windowを閉じた $(window).unload(function(){ clearInterval(mentionsTimer); widget.setPreferenceForKey("","last_id"); }); $("#setting").click(function(){ if(ResizeFlg){ $("#settingform").css("display","block"); window.resizeBy(0,100); ResizeFlg = false; }else{ $("#settingform").css("display","none"); window.resizeBy(0,-100); ResizeFlg = true; } }); $("#save").click(function(){ var AT = String($("#AT").val()); var ATS = String($("#ATS").val()); widget.setPreferenceForKey(AT,"access_token"); widget.setPreferenceForKey(ATS,"access_token_secret"); }); $("#tweetbutton").click(function(){ var tweet = $("#textbox").val(); var accT = String(widget.preferenceForKey("access_token")); var accTs = String(widget.preferenceForKey("access_token_secret")); var req = new XMLHttpRequest(); req.open( 'POST', url, false); req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); var param = 'job=update&message='+tweet+'&AT='+accT+'&AS='+accTs; req.send(param); if (req.readyState == 4 && req.status==200) { var data = eval("("+req.responseText+")"); var text = data.status[0]; $("#status").text(text); $("#textbox").val(""); }else{ $("#status").text("通信に失敗しました:"+req.status); } //getmantion(); }); $("input[name=mention]").click(function(){ mantion = Boolean($("input[name=mention]:checked").val()); if(mantion){ $("#status").text("取得します"); widget.setPreferenceForKey(String(mantion),"mantion_view"); mentionsTimer = setInterval(getmantion,90000); m_viewFlg = false; }else{ $("#status").text(""); widget.setPreferenceForKey("","mantion_view"); $("#mentions").css("display","none"); clearInterval(mentionsTimer); m_viewFlg = true; } }); $("#view").click(function(){ if(m_viewFlg){ $("#mentions").css("display","block"); m_viewFlg = false; }else{ $("#mentions").css("display","none"); m_viewFlg = true; } }); $("#repv").click(function(){ getmantion(); }); })
ざっくり解説
Opera widgetはクッキーに似たような変数を保持できるので、アプリを閉じても保持しておきたい情報はpreferenceForKeyを使います
メンション取得は起動時は@最新20件を取得しておきたいので、指定のためのIDは空にしておきます。
以降は最新IDを記憶して新しいメンションを取得します。
ON・OFFでメンション自動取得を切り替えてられるようにしておきます。
このON/OFFは設定値としてwidgetに記憶させておきて、次回起動時にもその設定を引き継ぐようにしておきます。
メンション取得がうまくいっているかどうかを見るために、取得開始時にメッセージを出します。
今のところ、新しいものがないと戻り値がないので、20秒程度で表示を消すように…。
取得後は結果を表示して3秒後にメッセージを消します。
実行してみる
widgetを表示させてctrl+Rで再表示させて、きちんと取得できていれば成功です。
phpとOpera widgetでtwitter自作クライアントをつくる2
前回、phpとOpera widgetでtwitter自作クライアントをつくる1 - 付箋的メモ帳の続き。
今回はwidget側です。
Opera11を前提に作ります。動けばいいのでオペラ推奨の見た目は無視します。
Opera widgetの構造
widgetは実はwebサイトの構成とあんまり変わりません。
index.htmlの見た目をjavascriptで制御して色々しているだけです。
この構成の通りにファイルを用意していきます。
config.xmlを用意する
http://ja.opera-wiki.com/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E4%BD%9C%E3%82%8A
ここを参考に以下のxmlを記述します。
<?xml version="1.0" encoding="utf-8"?> <widget defaultmode="widget" version="1.0" dockable="yes" network="public"> <widgetname>アプリケーション名</widgetname> <id> <host>作ったところ</host> <name>作ったところの名前</name> <revised>いつリリースしたか</revised> </id> <author> <name>作った人</name> <email>連絡先</email> <link>サイトとか</link> </author> <icon>アイコン</icon> <security> <access> <protocol>http</protocol> <protocol>https</protocol> <host>アクセス先</host> <port>80,8080</port> </access> </security> <width>横</width> <height>縦</height> </widget>
これがwidgetの基本的な設定ファイルです。正直authorとかwidth、heightだけでもいいです。
index.htmlを用意する
widgetの画面です。
見た目はスタイルシートで整えたり、スクリプトで表示を切り替えていくので、表示させたいものを全部用意しておきます。
<!DOCTYPE html> <html> <head> <title>アプリケーション名</title> <script type="text/javascript" src="script/jquery-1.5.1.min.js"></script> <script type="text/javascript" src="script/main.js"></script> <link href="style/style.css" rel="stylesheet" type="text/css" media="screen" /> </head> <body> <!--<div id="header" class="fc"> <input type="button" id="flipbutton" class="tweetbox" value="X"> <button id="btnMinimise" data-not-chrome-content="true" class="tweetbox">Minimise</button> <input type="button" id="closebutton" class="tweetbox" value="X"> </div>--> <div id="twetform" class="fc"> <span class="">tweet:</span><span id="status"></span><br> <input type="text" id="textbox" class="tweetbox tb" maxlength="140"><br> <input type="button" id="tweetbutton" class="tweetbox" value="tweet"> <input type="button" id="setting" class="tweetbox" value="setting"> <input type="button" id="view" class="tweetbox" value="view"> <input type="button" id="repv" class="tweetbox" value="@"><br> <span class="supplement">status:</span><span id="repstat"></span> </div> <div id="settingform" class="fc"> setting<br> access_token: <input type="text" id="AT" class="tweetbox tb"><br> access_token_secret: <input type="text" id="ATS" class="tweetbox tb"><br> <input type="button" id="save" value="SAVE" class="tweetbox"> <input type="button" id="clear" value="CLEAR" class="tweetbox"><br> mention view:<br> <input type="radio" name="mention" value="true">yes / <input type="radio" name="mention" value="">no </div> <div id="mentions" class="fc"> mentions: </div> </body> </html>
javascriptのライブラリが使えるので今回はjQueryをチョイス。
主だった処理をするファイルはmain.jsと命名しておきます。
CSSを用意する
見た目を整えるスタイルシートを用意します。
*{ padding: 0px; margin: 0px; } .box{ width: 30px; } .tb{ width: 140px; } .tweetbox{ background-color:white; border: solid 1px gray; /*opacity:0.3;*/ } .fc{ opacity:0.3; } #status,#mentions{ font-size: small; } .rep:hover{ background-color:white; } #repstat , .supplement{ font-size: x-small; }
見た目を確認してみる
階層通りに用意したら、まとめてzipにしたあと拡張子をwgtにしてダブルクリックし、Operaにインストールします。
ここで、zipする前のフォルダを選ぶと自動的に上書きされるので、準備OKです。
後は実行しながらjsを書いていきます。
次回
widgetの動作を決めるjavascriptを作ります。
phpとOpera widgetでtwitter自作クライアントをつくる1
デスクトップアプリの自作クライアントはハードルが高いけど、でも自作クライアントで遊んでみたい。
という人向けの簡易自作クライアント。
機能は
- 発言できる。
- メンションを見られる。
の2つに絞って作っていきます。
クライアントを登録する
bot制作者には毎度おなじみhttp://dev.twitter.com/appsで自分のクライアントを登録しておきます。
項目は大体適当でいいです。
OAuth用にライブラリを用意する
GitHub - abraham/twitteroauth: The most popular PHP library for use with the Twitter OAuth REST API.でライブラリ(twitteroauth)をDLしておきます。
phpでサーバー側をつくる
今回はAOuthを利用した簡易クライアントなので、widget⇔php⇔twitterAPIといった手法をとります。
処理の流れ
- POSTされてきたデータの'job'でやりたい処理を判別します。
- updateなら発言
- mentionならメンション取得
- メンション取得なら…
ざっとこんな感じです。
ソース
<?php require_once("twitterOAuth.php"); // Consumer keyの値 $consumer_key = "コンシューマーキー"; // Consumer secretの値 $consumer_secret = "コンシューマーシークレット"; // Access Tokenの値 $access_token = ""; // Access Token Secretの値 $access_token_secret = ""; //logfile $filename = "log.txt"; $logFlg = false; $job=""; $job=$_POST['job'];//処理を判断する if($logFlg) toLog("----------START--------".$job."----"); if (is_array($job)) return ''; $access_token = $_POST['AT']; $access_token_secret = $_POST['AS']; if(preg_match("/update/u",$job)){ $message = ""; $message = $_POST['message']; if($logFlg) toLog($access_token); if($logFlg) toLog($access_token_secret); if($logFlg) toLog($message); update($message); }else if(preg_match("/mention/u",$job)){ $last_id = $_POST['last_id']; mention($last_id); } /* ポストする */ function update($message){ // Consumer keyの値 global $consumer_key; // Consumer secretの値 global $consumer_secret; // Access Tokenの値 global $access_token; // Access Token Secretの値 global $access_token_secret; //logfilen global $filename; global $logFlg; if($logFlg) toLog("update"); $oauth = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $content = $oauth->OAuthRequest("https://twitter.com/statuses/update.xml", "POST", array("status"=>$message)); $xml = simplexml_load_string($content); if($logFlg) toLog($content); $status = $xml->text; if($status==null || $status==""){ $status = $xml->error; } if($logFlg) toLog($status); $token_array = array( 'status' => $status ); $json_value = json_encode( $token_array ); echo $json_value; if($logFlg) toLog("update"); } /* メンション取得 */ function mention($last_id){ // Consumer keyの値 global $consumer_key; // Consumer secretの値 global $consumer_secret; // Access Tokenの値 global $access_token; // Access Token Secretの値 global $access_token_secret; //logfilen global $filename; global $logFlg; $content = ""; $oauth = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); if($last_id!="" && $last_id!=null){ $content = $oauth->OAuthRequest("http://api.twitter.com/1/statuses/mentions.xml", "GET", array("since_id"=>$last_id)); }else{ $content = $oauth->OAuthRequest("http://api.twitter.com/1/statuses/mentions.xml", "GET", array("page"=>1)); } $xml = simplexml_load_string($content); if($logFlg) toLog($content); $token_array = array(); foreach ($xml->status as $value ){ $str = $value->text; //発言内容 $screen_name = $value->user->screen_name; //発言者のtwitterID $name = $value->user->name; $id = $value->id; $token = array( 'name' => $name, 'screen_name' => $screen_name, 'text' => $str, 'id' => $id ); array_push($token_array,$token); } $json_value = json_encode( $token_array ); header( 'Content-Type: text/javascript; charset=utf-8' ); echo $json_value; if($logFlg) toLog("mention"); } function toLog($txt){ global $filename; $fo = fopen($filename,"a"); fputs($fo,$txt." ".date('c')."\n"); fclose($fo); } ?>
発言とメンション取得をしたいので、2つ関数を用意しておきます。
コンシューマーキーとコンシューマーシークレットはソースでもっておき、
アクセストークンとアクセストークンシークレットはwidget側で保存しておきます。
widgetからPOSTされてくるデータ
今回は結果をjson形式でwidgetに返すので、XMLを取得したのち、
必要最低限のデータだけを取り出して変数にセット・json形式に変換しています。
次回
次回はwidget側を作っていきます。
OAuthを使用したPHPでのbotの作り方8
前々回、http://d.hatena.ne.jp/tatsumipoid/20110425/1303707752の続きです。
いよいよbotを自動で動かしていきます。
前々回のソースにcronからアクセスするように設定します。
借りるパターンと自前で用意するパターンがありますが、借りることを前提にします。
設定すること
- アクセス先URL
- アクセス間隔(何分おき)
- アクセスする時間帯
大体どこのcronサービスもこんな感じの設定項目があると思います。
- アクセス先URLはbotのソースにします。
- アクセス間隔は2〜10分程度がいいと思います。そんなにリプライが多くないbotなら5分10分あたりで十分です。
- アクセスする時間帯は、botを動かして置きたい時間帯にしてください。
設定してしばらくして、botがpostしていれば成功です。
OAuthを使用したPHPでのbotの作り方まとめ
PHPでのbotの作り方をざっくりとまとめたものです。
わりと放置していた記事をまとめたので、ほんとにざっくりした内容です。
用語とか関数はググるといいと思います。
導入編
OAuthを使用したPHPでのbotの作り方 - 付箋的メモ帳
導入編(クライアントを登録する)
OAuthを使用したPHPでのbotの作り方2 - 付箋的メモ帳
導入編(コンシューマキーの考え方)
OAuthを使用したPHPでのbotの作り方3 - 付箋的メモ帳
基礎部分編(API利用)
OAuthを使用したPHPでのbotの作り方4 - 付箋的メモ帳
基礎部分編(ざっくり解説)
http://d.hatena.ne.jp/tatsumipoid/20110425/1303700032
bot本体編
OAuthを使用したPHPでのbotの作り方6 - 付箋的メモ帳
bot本体編(ざっくり解説)
OAuthを使用したPHPでのbotの作り方7 - 付箋的メモ帳
cron設定編
OAuthを使用したPHPでのbotの作り方8 - 付箋的メモ帳
おまけ
よくわかんない時はlogを残してみよう - 付箋的メモ帳
この記事をまとめるにあたって、いろいろなところを参考にさせていただきました。
ありがとうございます。
OAuth - Wikipedia
http://http//www.atmarkit.co.jp/fsecurity/special/106oauth/oauth01.html
http://1tb.me/report/02
第1回 OAuthとは?―OAuthの概念とOAuthでできること:ゼロから学ぶOAuth|gihyo.jp … 技術評論社
twitterのbotなどで OAuthを使う方法(PHPバージョン2) | 星光のつれづれ日記
PHP+OAuthでTwitter - SDN Project
http://d.hatena.ne.jp/xmalloc/20100504/1272950102
Oauth認証できるRuby製TwitterBotプログラムの設置方法 - しふーのブログ
http://pavane.rdy.jp/archives/144
OAuthを使用したPHPでのbotの作り方7
前回OAuthを使用したPHPでのbotの作り方6 - 付箋的メモ帳のソースの解説です。
極めてざっくりとした解説です。
下準備
include("前回の解説ソース")で
OAuthを使用したPHPでのbotの作り方4 - 付箋的メモ帳のソースを読み込んでおきます。
<?php // Access Tokenの値 $access_token = "アクセストークン"; // Access Token Secretの値 $access_token_secret = "アクセストークンシークレット"; ?>
リプライに対する処理を行う
<?php //xmlが帰ってくる $xml = access($access_token,$access_token_secret); $filename = "Rep-timestamp.txt"; $since = timestamp($filename); ?>
最初にリプライを取得し、リプライを取得した時刻をタイムスタンプとして保存します。
リプライがあった場合、リプライの件数分、それぞれに返事を返していきます。
<?php //リプライがある if($xml != null){ if($traceFlg){ toLog("リプライ"); } //リプライ件数分処理 foreach ($xml->status as $value ){ //$status_number = $value->id; //個別発言のステータスナンバー $str = $value->text; //発言内容 $screen_name = $value->user->screen_name; //発言者のtwitterID $name = $value->user->name; $time = strtotime($since); $linetime = strtotime($value->created_at); if($screen_name != "botのアカウント"){ if($linetime > $time){ $message = rep($name,$str); $message = shufullMsg($message); if($message != ""){ $message = "@".$screen_name." ".$message;//リプライ用メッセージ作成 toLog("\n".$str." ■ ".$message."\n"); post($access_token,$access_token_secret,$message); $retcnt++; } } } } toLog("処理終了\n"); } ?>
発言内容、発言者のID、名前を取得しておきます。
if($screen_name != "botのアカウント")で自分自身の発言ではない場合、その内容にあう返事をつくります。
$message = rep($name,$str)で返事のセットを作り、
$message = shufullMsg($message)でランダムに抜き出しています。
メッセージが空でなければ、リプライとしてpostし、次のリプライの処理をします。
通常ポストをする
1時間に1回、通常ポストをする場合です。
<?php toLog("通常ポスト"); $filename = "TL-timestamp.txt"; $since=""; if(file_exists($filename)){//存在チェック $fp = fopen($filename,"r"); $since=fgets($fp); fclose($fp); } $since = strtotime($since); $h = strtotime("- 1 hours"); if($h > $since){ if($traceFlg){ toLog("\n時間比較 一時間前:前回のポスト時刻 ".$h.":".$since."\n"); } timestamp($filename); $msg = nomal(); $message = shufullMsg($msg); post($access_token,$access_token_secret,$message); if($traceFlg){ toLog("通常メッセージ:".$message."\n"); } } toLog("メソッド終了\n"); ?>
保存してあるファイルから、前回ポストした時刻を取得します。
現在の時刻と比べて一時間以上経っていれば、今の時刻を保存し、パターンからメッセージを一つを選んでポストします。
通常ポストのパターンを作る。
通常パターン+時刻別パターンでメッセージのセットを作ります。
<?php function nomal(){ $message= array(//基本のセット "セリフ1", "セリフ2" ); $now = getdate(); if(($now["wday"]==0) | ($now["wday"]==6)){//日曜か土曜日 if($now["hours"] == 12){ array_push($message, "セリフ1", "セリフ2" ); }else if($now["hours"] == 15){ array_push($message, "セリフ1", "セリフ2" ); } }else{ if($now["hours"] == 6){ array_push($message, "セリフ1", "セリフ2" ); }else if($now["hours"] == 12){ array_push($message, "セリフ1", "セリフ2" ); }else if($now["hours"] == 15){ array_push($message, "セリフ1", "セリフ2" ); }else if($now["hours"] == 21){ array_push($message, "セリフ1", "セリフ2" ); } } return $message; } ?>
最初のifで日曜か土曜の場合の処理をわけます。
if($now["hours"] == 12)で時刻別に処理を分けていきます。
array_push($message,"セリフ1","セリフ2");で通常パターンにセリフ1・2を足しました。
呼び出し元に返して終了です。
リプライに対する返事のパターンを作る
「おいしいですよね」等の同意を求められた場合に対する返事を考えます。
<?php function rep($name,$str){ $message = ""; /*パターンマッチスタート*/ if(preg_match("/美味しい(ね|ですね|ですよね)/u",$str) |preg_match("/おいしいしい(ね|ですね|ですよね)/u",$str) |preg_match("/うまかった(ね|ですね|ですよね)/u",$str) ){ $message = array( "セリフ1", $name."セリフ2" ); } return $message; } ?>
if(preg_match("/美味しい(ね|ですね|ですよね)/u",$str)で/〜/の間にある文字列と一致するか調べることができます。
(ね|ですね|ですよね)は「美味しい」のあとに「ね」「ですね」「ですよね」のどれかが続いた場合ということを指します。
$name."セリフ2"で、返事する相手の名前を文中に入れることができます。
メッセージのセットを返して終了です。
OAuthを使用したPHPでのbotの作り方6
前々回OAuthを使用したPHPでのbotの作り方4 - 付箋的メモ帳の続き
いよいよbotの動作の中核にです。
まずは中身のソース
<?php include("前回の解説ソース"); // Access Tokenの値 $access_token = "アクセストークン"; // Access Token Secretの値 $access_token_secret = "アクセストークンシークレット"; $traceFlg = false; if($traceFlg){ toLog("---------------\n"); } //xmlが帰ってくる $xml = access($access_token,$access_token_secret); $filename = "Rep-timestamp.txt"; $since = timestamp($filename); //リプライがある if($xml != null){ if($traceFlg){ toLog("リプライ"); } //リプライ件数分処理 foreach ($xml->status as $value ){ //$status_number = $value->id; //個別発言のステータスナンバー $str = $value->text; //発言内容 $screen_name = $value->user->screen_name; //発言者のtwitterID $name = $value->user->name; $time = strtotime($since); $linetime = strtotime($value->created_at); if($screen_name != "botのアカウント"){ if($linetime > $time){ $message = rep($name,$str); $message = shufullMsg($message); if($message != ""){ $message = "@".$screen_name." ".$message;//リプライ用メッセージ作成 toLog("\n".$str." ■ ".$message."\n"); post($access_token,$access_token_secret,$message); $retcnt++; } } } } toLog("処理終了\n"); } toLog("通常ポスト"); $filename = "TL-timestamp.txt"; $since=""; if(file_exists($filename)){//存在チェック $fp = fopen($filename,"r"); $since=fgets($fp); fclose($fp); } $since = strtotime($since); $h = strtotime("- 1 hours"); if($h > $since){ if($traceFlg){ toLog("\n時間比較 一時間前:前回のポスト時刻 ".$h.":".$since."\n"); } timestamp($filename); $msg = nomal(); $message = shufullMsg($msg); post($access_token,$access_token_secret,$message); if($traceFlg){ toLog("通常メッセージ:".$message."\n"); } } toLog("メソッド終了\n"); //通常 function nomal(){ $message= array(//基本のセット "セリフ1", "セリフ2" ); $now = getdate(); if(($now["wday"]==0) | ($now["wday"]==6)){//日曜か土曜日 if($now["hours"] == 12){ array_push($message, "セリフ1", "セリフ2" ); }else if($now["hours"] == 15){ array_push($message, "セリフ1", "セリフ2" ); } }else{ if($now["hours"] == 6){ array_push($message, "セリフ1", "セリフ2" ); }else if($now["hours"] == 12){ array_push($message, "セリフ1", "セリフ2" ); }else if($now["hours"] == 15){ array_push($message, "セリフ1", "セリフ2" ); }else if($now["hours"] == 21){ array_push($message, "セリフ1", "セリフ2" ); } } return $message; } //リプライ用 function rep($name,$str){ $message = ""; /*パターンマッチスタート*/ if(preg_match("/美味しい(ね|ですね|ですよね)/u",$str) |preg_match("/おいしいしい(ね|ですね|ですよね)/u",$str) |preg_match("/うまかった(ね|ですね|ですよね)/u",$str) ){ $message = array( "セリフ1", "セリフ2" ); } return $message; } ?>
botの中核の処理はこれだけです。
最初にリプライを取得し、リプライに対して反応語句を選んでポスト。
次に通常ポストを選んでポストするだけです。
詳しい解説はまた次回。