はんもんBOTへの機能追加について
About
PHPにもなんとなく慣れてきたことだし、もうちょっと細かく動作を指定したり新しく機能を追加したい!……と、既存の仕様では少しずつ物足りなく感じるようになることがあります。
そう思ってあれこれ調べてみたはいいものの、実際にどういう処理を組み込めばいいの!
そんな方のために作ったページです。かくいう私自身も今回はじめてPHPに触れたため、コードがスマートではない部分も多々あります。あくまで「私はこうしてますよー」的なものなので、参考程度にでもなればと思います。「とりあえず動けばそれでいい」という方は、ご自由に使っていただいて構いません。ただし、個人の責任のもとでお願いします。
最後に、分からない事が出てきたらまず調べてみてください。そうすると理解が深まります。私自身もPHPを深く理解しているわけではありませんが、可能な範囲で相談に乗ります。
Function List
[鍵付き相手フォロー時のリクエストとお礼リプライを制御する]
鍵付きの相手をフォローしないようにしてしまえば問題は解決するのですが、鍵付き相手もフォロー返ししたい場合にはもう少し改造が必要になってきます。そこで、リクエストを送信した相手のIDを「送信済みリスト」に記憶しておくことにより、2度目以降送信させないようにしてみました。
あと、空っぽで構いませんので"Logflw.txt"というファイルを用意してサーバにアップロードしてください。
※文字コード"UTF-8"、改行コード"LF"、パーミッション"666"
EasyBotter.php内
※赤文字⇒追加部分
※青文字⇒削除部分
//自動フォロー返し
function autoFollow(){
$response = $this->getFollowers();
$followList = array();
//***blackcatchick***//鍵付きの相手に対してリクエストおよびお礼リプを1回だけ送信する
$filenamec = "Logflw.txt";//フォローリクエスト送信済みの相手のIDを記録しているファイル
$followreqdata = file_get_contents($filenamec);//上記ファイルを読み込む
$followreqdata2 = $followreqdata;//文字列の状態で保持しておく
$followreqdata3 = $followreqdata;//文字列の状態で保持しておく(比較用)
$followreqdata = explode(",",$followreqdata);//","区切りで配列にする
foreach($response as $user){
$follow = (string)$user->following;
if($follow == "false"){
$followList[] = (string)$user->screen_name;
}
//フォロワーのIDを取得する
$flw_name = (string)$user->screen_name;
//未フォローかつリクエストを送っていない場合にのみ送信対象とする
if($follow == "false" && !(in_array($flw_name,$followreqdata))){
$followList[] = $flw_name;
//送信対象に入れた相手のIDを、送信済みリストに加える
$followreqdata2 = $flw_name.",".$followreqdata2;
}
//送信済みリストを整理する
if($follow == "true" && in_array($flw_name,$followreqdata)){
//フォロー済みの相手を送信済みリストから削除する
$followreqdata2 = str_replace($flw_name.",","",$followreqdata2);
}
}
//送信済みリストを更新する
if($followreqdata2 != $followreqdata3){
file_put_contents($filenamec,$followreqdata2);
}
foreach($followList as $screen_name){
$response = $this->followUser($screen_name);
}
}
//■■フォローした時にリプライを送る■■
foreach($followList as $rscreen_name){
$value = array("status"=>"@{$rscreen_name} フォロー完了しました!");
$response = $this->setUpdate($value);
$result = $this->showResult($response);
$results[] = $result;
}
ちなみに、フォロー済みのフォロワー(=相互フォロー状態の相手)が送信済みリストに存在する場合はリストからIDを削除するようにしています。このタイミングでリプライを返すようにしてあげれば、リクエストが許可された時点でリプライを返す……のではないかと思います。(未検証)