696_botについて

Twitter内で現在テスト稼動している696_botの説明書です。
以下、botフォロー前に読んでおいて頂きたいことを中心に書いておかなければならない事をなるべく簡潔にまとめますのでお付き合いください。
(正式稼動後は、更新時にTwitter内にて告知します。)

1/10 定時・TL・リプライの全スクリプトをOAuth認証に切り替えました。

◇はじめに
696_botはREBORNに登場する「六道骸」の非公式キャラクターbotです。原作者さまおよび関連企業様とは一切関係がございません。
公式引用の発言は本誌発売日・アニリボ放送日準拠のネタバレ仕様です。現代/未来の区別は特にしていません。
定時発言・リプライは自動で行いますが、告知などソースがAPIでないものは手動発言になります。
根っこは俺得仕様なのでキャラ感・CP感の相違に関する異議や苦情は聞き入れません。合わないなぁと感じたらブロックを推奨します。
リプライはあくまで自動返答ですので会話を繋げるのは難しいと思いますが、これに関しては随時調整していきますのでどんどん話しかけてあげてください。ランダム返答は仕込んでいないので反応ワードが無ければ容赦なくスルーします。(*-Δ-)ごめんなさい…
12/8 他botさんとの会話無限ループを防ぐために連続リプライ回数の制限を設けました。返答が途切れた場合は数分おいてから再度話しかけてみてください。お願いします。

◇製作者への連絡
696_botへのDMかこちらの記事へのコメント投稿という形でお願いします。

◇フォロー・リムーブ・ブロックについて
botのリプライ機能は696_botが相手をフォローしている状態で動作します。鍵つきアカウントの方は696_botからリクエストを送信しますので許可をお願いします。現在リクエスト許可・フォロー返しは手動で行っているため少々お時間を頂くことになりますがご了承ください。
上記の仕様のため、696_botは自分が相手をフォローしている限り696_botをリムーブした方にも引き続きリプライを送信してしまいます
これを防ぐ手段としてはリムーブではなくブロックをしていただくのが一番確実かつ手軽で早いです。
自動フォロー機能の導入を試みつつ基本的にフォローにはフォローを、リムーブにはリムーブを手作業で返す形でやっていこうと思いますが、『696_botからの(またはbotへの)フォロー片思い状態が都合がいいんです』という方がいらっしゃいましたら696_botへDMでその旨お伝えください。

◇基本仕様
定期post(発言内容はコミックス/アニメ/ゲームからほぼそのまま引用)
挨拶など、TLの一部単語への反応(公式引用に若干の改変をしたもの、イタリア語の挨拶等)
@696_bot への一部単語反応(リプライへのリプライ)
・挨拶などへの返答(公式引用を含め、違和感の薄そうな言葉を選んであります)
・占い(信憑性など一切無いお遊び要素です)
 「占って」や元ネタに関する単語いくつかに反応して占いをしてくれます。
 リプライの最後についているURLはwikipediaの該当ページへのリンクです。興味があればどうぞ。
 (なんといってもwikipediaなのでそのうちページ削除されるかもしれません。)
・「OO」って言って と送るとOO部分をリプライしてくれます。
 (公序良俗に配慮してご利用ください。目に余る使い方に対しては該当単語スルー機能の追加やユーザーブロック処置も致します。)
 Ψ(六∀|Δ')っ]´)<私も腐っている身ですからそこまで目くじら立てたりしませんがね!
・キャラ名などへの返答(製作者の趣味に基づいた発言が多いです。若干の腐要素あり
 現在、キャラ名への返答はTwitterの不具合との兼ね合いで一部撤去しております。
 (キーワードや返答文の揺らぎ(パイン・ナッポー・パイナップルなどのバリエーション)についてはフォロワーさんとのやりとりを参考にしつつ、随時調整しております。)

・他botさんとの会話
 時々相互フォローして頂いている一部Botさんと、お互いの定時発言などをトリガーにして会話を始めます。
 (定時発言は各Botさんごとにリストからランダム選択されるもので、それぞれかなりのパターン数があると思いますが、時々アタリが出すぎて騒がしい日もあるかと…あまりに絡む頻度が高いようでしたら調整します)
 他Botさんの呟きに対してTLでつぶやいて返答することがあります。どちらも自動返答ですので中の人は入っておりません。
 詳しくは記事の続きの一番上においておきますのでそちらをご覧ください。
 (リプライワードのヒントまでは改行で間をとってあります。)


定時発言やご挨拶などフォロワーさんに広く見える部分はキャラを大事に、TLへの単語反応はうざったくならない程度に、リプライへのリプライは趣味全開…と住み分けを若干意識しています。
(一部反応単語を追記にのせておきますので、参考にしてください。)

◇PHPの知識について
作成者はPHPに関して全くの素人です。バグに関しては報告をいただければ頑張って対応しますが、知識的にどうしようもない部分がほとんどです。PHPに詳しい方がいらっしゃいましたらバグ報告と併せて対応方法などを教えていただけると非常に助かります。

◇参考サイトさま
bot作成に際してお世話になったサイトさまへのリンク(敬称略)
プログラミングができなくても作れるTwitter botの作り方
銀さんのbot 〜不完全〜
プログラミングを始める10の理由
8bitnote
oui@hatena
初心者にも出来るTwitterBot
ものおき@はてな

ついったーBOT作者にお願いしたいこと

@PAGES
cron-job.org
cronタスクの設定【Cron-job.orgの利用】
モノクロ2階調

正規表現サンプル集
PHP 正規表現の基本
PHP入門
そふぃのPHP入門
PHPマニュアル

◇最後に
botや製作者に対する無視しきれないほど非常識な言動や要求にはブロックを返させていただきます。キャラクターは二次元、botはプログラム。ですが製作者はただの人間です。ご理解の上、Twitterライフのおともに696_botを使っていただければ幸いです。

続きを読む

こちらに置いているスクリプトについて

・「OO」って言って などについて
不具合に対するアドバイスやサポートは一切しません、というより知識が無いのでできません。
改変するのも再配布するのも自由です。好きに使ってください。
広くて狭いネットの世界を巡り巡って、どなたかのbot作成の手助けになれば幸いです。

・他の方が公開されているスクリプト改変の記事について
引用元のスクリプトを初めて使う方は、まず手を加えない状態での動作確認をしてください。その状態でエラーが出るようなら引用元サイトさんのFAQやコメント欄などをじっくり読む、ぐーぐる先生のお力を借りるなどしてまずは正常に動く状態にもっていってください。
PHPのバージョンなどの問題がない限り、エラーの原因をつぶせばまず動きます。皆様そういうスクリプトを配布してくださっています。それをいじくり倒してから動かねー動かねーと配布元サイトさんに凸るようなことはやめてください。
現在使用中のスクリプトに手を加える方は、まずバックアップをとってください。

・botスクリプト製作者さま方へ
配布・公開してくださっているスクリプトをこっそりとコピペで引用させていただいている部分が多くあります。
問題があるようでしたら記事コメントまたはTwitter内のリプライ・DM等でご連絡いただければ記事を変更いたします。

おうむがえしスクリプト・追加機能

ここのスクリプトを使って下さっている方で少々お困りの様子の方がいらしたので、ちょいと拡張機能を考えてみました。



if(stristr($replies2[$i]["text"], "」って言って")){
$echo = preg_split("/「|」/",$replies2[$i]["text"],3);
$message = $echo[1];
}

このスクリプトを



if(stristr($replies2[$i]["text"], "」って言って")){
$echo = preg_split("/「|」/",$replies2[$i]["text"],3);
$message = $echo[1];
if(preg_match("/「(.*)@(.*)」って言って/",$replies2[$i]["text"])){
$message = "クフフ…僕の言葉は君だけのものです。他の誰かに聞かせようなどと考えないでもらいたいですね";
}
}

こんな風にif文を入れ子にして条件を追加してみます。

「@OOさん (言わせたい内容)」って言って

といった、第三者にもリプライを飛ばさせようとするものに対しておうむ返しをするのではなく「クフフ〜」を返します。
ですが、

@bot 「@OOさん お仕事がんばってくださいね」って言って

など、bot越しに誰かにエールを送りたいという方もいらっしゃるかもしれません。というわけで

if(stristr($replies2[$i]["text"], "」って言って")){
$echo = preg_split("/「|」/",$replies2[$i]["text"],3);
$message = $echo[1];
if(preg_match("/「(.*)(@bot1|@bot2|@bot3)(.*)」って言って/",$replies2[$i]["text"])){
$message = "クフフ…僕の言葉は君だけのものです。他の誰かに聞かせようなどと考えないでもらいたいですね";
}
}

こんな風にリプライを送られたくない相手のIDを指定する使い方もアリだと思います。私は相互フォローしている自動botのIDを片っ端から指定してはじくように設定しました。



bot機能の使い方に関しては各自節度を持って使ってもらえるなら問題ないのですが、そういう方がいる一方で可能なことなら何をしてもいいと考える方がいるのも事実です。
そしてエラーさえなければプログラムは動きます。マナーの定義なんて曖昧ですしプログラムに関しては”そういうもの”です。
黙って心を痛めているだけではbotは止まりません。意にそまぬ使い方をされるのならそうされないようにプログラムを変えてしまうのがbotに関しては最良の手段かと思います。

reply_random.phpにOAuth認証を導入する

Basic認証が6月で非推奨になるという話の影響か、最近Twitter内でもOAuth認証の導入を検討するBOT製作者さんが増えてきた印象です。
私も投稿元の名前をいじってみたくなってぼちぼち導入していますので、成功したやり方を参考までに置いておきます。

基本的なOAuthの導入方法はtwitterのbotなどでOAuthを使う方法(PHPバージョン)を参考にさせていただきましたので、まずはリンク先を参考に、OAuth認証で投稿させるところまで漕ぎつけてください。
ちなみにこの時点で、land.toサーバーをいじらずに使っている方は手詰まりになると思います。

Fatal error: Call to undefined function curl_init()〜

というエラーが出るはずです。サーバーのほうでcURLが有効になっていないのが原因のようなのですが、これを解決する方法は現状私の方では見つけられていません。ぐーぐる先生を頼りながらphp.iniを手探りでいじってはいるのですが…。
@PAGESあたりならするりと動くはずですのでこちらを借りなおすなりland.toの設定をいじるなり、自分なりの解決策を見つけていただくほかありません。

以下、OAuth認証での投稿に辿り着いたことを前提に話を進めます。
OAuth認証部分はリンク先のtoukou.php(テスト投稿用スクリプト)からのコピペが主ですが、API呼び出し部分のアドレスなどはphaさんの仕様にあわせて若干改変してあります。


私の環境でこの改変スクリプトはしっかり動いてはいますが、一応現在動かしているreply_random.phpのバックアップはとっておいてくださいね。何かあった後では遅いです。ほんとに。
OAuth認証は基本部分の設定が若干手間ですが一度やってしまえば流れはもうわかると思いますので、bot用のテストアカウントがある方は面倒くさがらずにそちらの準備もして、まずはそちらのアカウントで動作テストをしましょう。いきなり本IDでcronかませたスクリプトとすりかえるのとこっそりテストするのでは、万一エラー吐いたときの焦り度が段違いです。

下準備が出来たらreply_randomが置いてあるフォルダの中にOAuth.phpとtwitterOAuth.phpを放り込んでください。
まずはキーのコピペとAPI呼び出し部分の書き換えをしましょう。
phaさんのスクリプトのこの部分

$username = "Twitterのユーザー名"; //Twitterのユーザー名を書き込んでください
$password = "Twitterのパスワード"; //Twitterのパスワードを書き込んでください

ここの$passwordの行を削除します。$usernameも認証には使わないので削除して構わないのですが、投稿結果表示の

Twitterへの投稿に成功しました。
{$username}に投稿したメッセージ:{$message}

という部分で微妙に使っているので残しておいてもいいと思います。
次に、スクリプト45行目前後に

chdir(dirname(__FILE__));
require_once("Services/Twitter.php");
require_once('Services/Twitter/Jsphon/Error.php');
require_once("Services/Twitter/Jsphon/Decoder.php");

という部分があると思います。この真下に

$st =& new Services_Twitter($username, $password);
$replydata = $st->getReplies();

という部分があります。この2行を削除(消すのに抵抗があるなら//でコメントアウトしても構いません)してください。そうしたら、ここに

require_once("twitterOAuth.php");

//Consumer keyの値
$consumer_key = "Consumer_key";
//Consumer secretの値
$consumer_secret = "consumer_secret";
//Access Tokenの値
$access_token = "access_token";
//Access Token Secretの値
$access_token_secret = "access_token_secret";

//OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
$replydata = $to->OAuthRequest('http://twitter.com/statuses/replies.json', array(), 'GET');

までを貼り付けてください。赤字部分はそれぞれ、対応するキーに書き換えてくださいね。
ここのコピペはもしかしたらもっと上の設定部分に置いてもいいのかもしれませんが、同じ処理をするところに置き換えた方が個人的にスッキリするのでここに置きました。まぁ動けばいいんです動けば。こまけぇこたぁ(ry

これでファイル呼び出し部分の置き換えは終了です。
あとは投稿部分の書き換えです。スクリプトをぐ〜っと下にスクロールしていくと

//投稿する
$in_reply_to_status_id = $replies2[$i]["id"];
$result = $st->setUpdate(array('status'=>$message,'in_reply_to_status_id'=>$in_reply_to_status_id));

という部分があります。この$resultの行を削除(orコメントアウト)したら、ここに

$req = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$message,'in_reply_to_status_id'=>$in_reply_to_status_id),"POST");

を貼り付けます。
スクリプトの動きに関わる改変はこれでおしまいです。が、せっかく結果表示機能をつけてくださっているのでこれもちゃんと有効になるよう書き換えておきましょう。
今コピペした部分の真下に

if($result){

という行がありますので$resultを$reqに書き換えてください。または、先ほどコピペした行先頭の$reqを$resultに書き換えても大丈夫だと思います。この二つの関数が同じ名前ならオッケーです。
書き換えは以上です。あとは保存してアップロードして動作させてみてください。

うちのbotで使ってるランリプファイル

ユーザー分岐と「OO」って言って を足しただけのものです。「OO」って言ってのスクリプトで正体不明の不具合を吐いてる方がおられるようなので、該当部分の参考になれば…。

引用どころかまるあげです。追記からどうぞ。

続きを読む

プロフィール

Author:Ψ(六∀´)
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード