約 4,188,681 件
https://w.atwiki.jp/easybotter_wiki/pages/18.html
まずはbot.phpに書かれている説明と公式サイトの"基本の設定"解説を熟読しよう。 wikiを見ても分からないところが出てきたら質問スレッドで質問しよう! bot.phpやEasyBotter.phpを編集する上で、基本使いそうなPHP制御構造等はTwitter Bot関連リンクにお勧め解説サイトをリンクしています。 ※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメントを書く」から誰かに頼んで下さい。 フッターが追加されません(ver.2.04) bot.phpを編集する時に注意!reply_pattern.php内の反応単語に該当しなかった場合、返信させたくないので"data.txt"を外したのですが動きません。 reply_pattern.php内の反応単語に該当しなかった場合、reply_pattern2.phpをチェックさせたいのですが動きません。 超初心者向けFAQdata.txtやlog.datが見あたらないのですが フッターが追加されません(ver.2.04) 現在、フッターが正常に機能していません。 {tweet}等{}を使用した文章時のみ追加される仕様になっています。 不具合一覧にてひとまず解決法を解説していますので、そちらを参考に。 bot.phpを編集する時に注意! 質問スレでよく見かける注意したいことをまとめます。 reply_pattern.php内の反応単語に該当しなかった場合、返信させたくないので"data.txt"を外したのですが動きません。 $response = $eb- reply(2,"reply_pattern.php"); というのを見かけました。 勝手に判断して必要部分を削除しないで下さい cron間隔,"",""と記入することで動作します。 反応単語に該当しなかった時返信させたくない場合は $response = $eb- reply(2,"","reply_pattern.php"); と記入しましょう。 reply_pattern.php内の反応単語に該当しなかった場合、reply_pattern2.phpをチェックさせたいのですが動きません。 $response = $eb- reply(2,"data.txt","reply_pattern2.php","reply_pattern.php"); というのを見かけました。 勝手に判断して記述を増やさないで下さい reply_pattern2.phpをチェックさせるには改造が必要です。 超初心者向けFAQ data.txtやlog.datが見あたらないのですが 下のページを見て拡張子を表示させましょう。 ファイルの拡張子を表示するには?
https://w.atwiki.jp/easybotter_wiki/pages/34.html
最新APIへの変更 Twitter側の仕様変更がありましたので、EasyBotterで使用しているTwitter APIを最新のものに変更しなければなりません。 以下の解説は2011年8月12日現在の情報です。 APIとは? APIとは「Application Program Interface」または「Application Programming Interface」のことです。 参考:Wikipedia アプリケーションプログラミングインタフェース EasyBotterではリプライやタイムラインの取得、フォロー・フォロワーのIDや名前を取得、などの際にTwitterAPIを使用しています。 古いTwitter APIを使用し続けていると、挙動がおかしくなったり、全く機能しなくなるおそれがありまです。 今後もTwitter側の仕様変更などでAPIが変更になる場合があるかも知れませんので、公式情報を定期的に確認しましょう。 API更新方法 EasyBotter.php のパーミッションを 666 に変更してから、 次のスクリプトを replace.php など適当な名前でEasyBotter.phpと同じディレクトリにアップロードして、 ブラウザなどから実行してください。 またはbot.phpの中に ?php ~~ ? の~~の部分を貼り付けて、bot.phpから実行してもかまいません。 ただしbot.phpから実行する場合、書き換え処理が終了したら、このコードは削除してください。 自動で更新するのが不安な場合は、下記の表に従って手動で書き換えても大丈夫です。 ?php $target = "EasyBotter.php"; echo file_put_contents($target,str_replace( replies.xml , mentions.xml , preg_replace("/ps? \/\/twitter.com\/([a-z\/_]+)/","p //api.twitter.com/1/$1", file_get_contents($target))))?"多分完了しました。確認して下さい" "失敗しました"; ? EasyBotter.php の下部にまとまっている API 群が、下記の通り書き換わったかを漏れ無く確認して下さい。 コピー&ペーストの際に余計な文字(スペース等)が入ったり、必要な部分を消したりしないよう注意しましょう。 https //twitter.com/statuses/update.xml ↓ http //api.twitter.com/1/statuses/update.xml http //twitter.com/statuses/friends_timeline.xml ↓ http //api.twitter.com/1/statuses/friends_timeline.xml http //twitter.com/statuses/replies.xml ↓ http //api.twitter.com/1/statuses/mentions.xml http //twitter.com/statuses/friends.xml ↓ http //api.twitter.com/1/statuses/friends.xml http //twitter.com/statuses/followers.xml ↓ http //api.twitter.com/1/statuses/followers.xml http //twitter.com/friendships/create/".$screen_name.".xml ↓ http //api.twitter.com/1/friendships/create/".$screen_name.".xml
https://w.atwiki.jp/easybotter_wiki/pages/37.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 特定のアカウントに対しては、別のリプライパターンを読み込ませたい コメント 特定のアカウントに対しては、別のリプライパターンを読み込ませたい EasyBotter.php内 function makeReplyTweets($replies, $replyFile, $replyPatternFile){ if(empty($this- _replyPatternData[$replyPatternFile]) !empty($replyPatternFile)){ $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); } (略) foreach($this- _replyPatternData[$replyPatternFile] as $pattern = $res){ 1. if(empty($this- _replyPatternData[$replyPatternFile]) !empty($replyPatternFile)){ の直後に $org_repfile = $replyPatternFile;//デフォルトのファイル名を保管 を追記する。 2. foreach($this- _replyPatternData[$replyPatternFile] as $pattern = $res){ の直前に //■■特定の人には別パターン■■ $userName = (string)$reply["user"]["screen_name"]; switch(true){ case stristr($userName, "bot") //botと名のつくアカウント名に対して $replyPatternFile = "bot_pattern.php";//bot_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); break; case $userName == "abcd" //abcdというアカウント名に対して case $userName == "efgh" //efghというアカウント名に対して $replyPatternFile = "xxx_pattern.php";//xxx_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); break; default //それ以外 $replyPatternFile = $org_repfile;//デフォルトのパターンファイル名 } または //■■特定の人には別パターン■■ $userName = (string)$reply["user"]["screen_name"]; if(stristr($userName, "bot")){//botと名のつくアカウント名に対して $replyPatternFile = "bot_pattern.php";//bot_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); }else if($userName == "abcd" || $userName == "efgh"){ $replyPatternFile = "xxx_pattern.php";//xxx_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); }else{ $replyPatternFile = $org_repfile;//デフォルトのパターンファイル名 } を追記する。 コメント 作成感謝!! -- 名無しさん (2013-02-17 16 04 35) ID除外の方を書き変えたり思考錯誤していますが上手くいかず…記載があれば助かります; -- 名無しさん (2013-02-21 16 21 23) これは複数人に対して個別のパターンにできるものでしょうかね -- 名無しさん (2013-03-12 02 08 18) 特定のIDに対して特定の月日だけと絞り込むこともできるかな・・・・・・ -- 名無しさん (2013-05-30 17 29 23) 名前 コメント
https://w.atwiki.jp/easybotter_wiki/
EasyBotter 非公式wiki wiki編集のお知らせ 新規作成や大きな変更・編集を行った際は、利用者全員が分かるようこのページ下の「コメントを書く」から告知して下さい。 削除したいページがあればこのページ下の「コメントを書く」で利用者全員が分かるよう告知をお願いします。 関連リンク すべて外部サイトですので、各自責任を持って利用して下さい。 プログラミングができなくても作れるTwitter botの作り方(EasyBotter配布サイト) このwikiは非公式です。 くれぐれもwikiの内容をphaさんに質問する等迷惑の無い様お願い致します。 Twitter Bot BBS phaさん管理のTwitter Bot掲示板です。PHP質問スレッドもあり。EasyBotter以外のTwitter BotでもOK。 Twitter コメント 無事Botの運営に成功しました。まとめていただいた皆さんに感謝を。 -- 名無しさん (2011-06-13 19 48 44) 『"EasyBotterから"のEasyBotterという部分は変えられますか?』のページ。oauth_test.php内の3行目「require_once('twitterOAuth.php');」は全部小文字に直さないとダメだな -- 名無しさん (2012-02-20 01 26 51) 不具合一覧が不具合(リンク切れ?)を起こしている。 -- 名無しさん (2012-03-16 01 46 00) 自分で直しておきました。 -- 名無しさん (2012-03-29 15 10 07) 関連リンクにある、•EasyBotterで緊急時BOT停止する方法 のページが見られないようになってしまっています。是非導入したいので、また閲覧できるようになればうれしいのですが・・・ -- 名無しさん (2012-05-16 01 31 57) ツイートエラーで400件ほど表示されません。 -- 都 (2012-05-26 19 45 32) 緊急時BOT停止する方法 のページを閲覧するには、主の人に閲覧許可を貰う必要があります。 -- 名無しさん (2012-05-26 23 21 57) 2012年 10/11 早朝に、旧APIの稼動が止まったようです。新APIに移行したら再稼動しましたので、その日を境に動かなくなった場合は、APIを最新に変更してみてください。 -- ryuru (2012-10-12 11 03 46) 新APIへの移行方法はこのページに書かれている旧式の方法で大丈夫でしょうか?素人質問ですみません。 -- 舞流 (2012-10-13 03 12 41) botが止まってましたが「最新APIへの変更」ページのreplace.php実行で再稼働しました -- ねお (2012-10-13 18 51 53) 2012/10/14 APIの変更を怠っていたら、3日ほど前から動かなくなってました。API変更はちゃんと行いましょう。 -- ruka (2012-10-14 08 52 12) "page dose not exist"というようなエラーが出ます。APIを修正するとOKです。 -- ruka (2012-10-14 08 53 09) phaです。お世話になっております。APIについて変更したものを配布しようと思います。 -- pha (2012-10-14 18 40 24) 私も、replace.phpを実行したらエラーが消えました。 http //www26.atwiki.jp/easybotter_wiki/pages/34.html -- kabuki (2012-10-15 10 06 41) このwikiではVer2.1版のページを新規に作った方がいいですか?前バージョンとソースがちょっと違いますし…… -- 名無しさん (2012-11-08 18 26 20) Vre.2.1版のページ、作っていただけると非常に助かります。きっと悩んでる人がいっぱいいると思われますので… -- 名無しさん (2012-11-08 21 45 32) 11/9にPHPが5.4に移行しました。これにともない、時間や分を指定する関数date()は、intval()で囲まないと動かなくなったようです。 例:if (intval(date("G")) == 16) {…} -- ryuru (2012-11-10 20 21 32) 同じくVer.2.1版のページお願いします。差し替えただけなのですが動かなくなってしまいました… -- 名無しさん (2012-11-12 22 11 48) 2.1バージョン+さくらcronで動かなくなった方いますか? -- 名無しさん (2012-11-15 20 15 45) 自分も2.1版ページ欲しいです。追加機能が自力ではなんかうまく行かなくて…他力本願で恐縮ですが; -- 名無しさん (2013-01-07 21 35 51) 2.1版の【特定のアカウントに対しては、別のリプライパターンを読み込ませたい】を追加しました。 -- 名無しさん (2013-01-14 21 40 11) 私も2.1バージョン+さくらcronで動きません。手動では問題ないのですが。 -- 名無しさん (2013-01-21 05 33 10) どなたか2.1版「特定のアカウントとのリプライ回数制限」を教えてくれませんか…? 自分で書き換えて試したらうまく動きませんでした>< -- 名無しさん (2013-01-27 15 17 00) 2.1verで停止コマンドが動作しなくなってしまいました。lolipopでcornもサーバもまかなっています。どうしたらいいでしょう……。 -- 名無しさん (2013-03-12 02 02 50) 2.1.2版にバージョンアップしてから、タイムラインへのリプライが動かなくなってしまいました。@リプライとTLリプライのファイルを分けていたのですが、タイムライン用(TLリプライ)だけ動きません。reply_patternのファイル名なら動くのですが、@リプライと混在してスパム化するのは嫌なので、何か改善方法はありませんか? -- 名無し (2013-04-01 04 39 27) 「地震で自動停止させる」ページを作成しました。 -- 名無しさん (2013-04-17 03 52 27) ページ作成ありがとうございます。他サイト様の改造ソースがほぼそのままのように見受けられますが、転載許可はいただいたでしょうか?もしまだでしたら元ネタのお二人に連絡したほうがよろしいかなと……余計なお世話だったらすみません -- 名無しさんへ (2013-04-27 15 59 43) 地震で自動停止ってやつ、PHP5.3のサーバだと使えないんだね…(´・ω・`) 使いたかった… -- 名無しさん (2013-06-16 12 04 17) オートフォロー機能が既にフォローしているアカウントへも延々とフォローしているようなのですがこの動作で大丈夫でしょうか……API消費しているような気がするのですが -- 名無しさん (2013-06-21 00 19 20) ニックネーム機能は2.0版でしかできない、というような記事を読んだことがあるのですが2.1版ではむりなのでしょうか?もしも可能ならヒントだけでもいいので教えて欲しいです。 -- 名無しさん (2013-07-02 23 56 46) 申し訳ないのですが、「自動フォロー返しした時にリプライで知らせたい」の2.1.2版をどなたかお願いいたします… -- 名無しさん (2013-07-04 00 21 43) 最新のAPIに変更が前のAPI記述のままになっているような気がするのですが……。今ってjsonじゃなかったですっけ? -- 名無しさん (2013-07-17 14 29 51) 随分前から改行を入れてつぶやきができるようになりましたが -- 名無しさん (2013-08-04 10 44 39) ↑の続き EasyBotterで改行付きでつぶやかせる方法ってありますか?検索しても「改行コード」ばかりヒットして方法が見つからないです。。 -- 名無しさん (2013-08-04 10 45 53) ニックネーム機能は2.0~のコメンを書き込んだ者ですが2.1版でも可能でしたしやり方を紹介してくださっているサイト様を見つけました。お騒がせしましたm(_ _)m -- 名無しさん (2013-08-07 13 49 56) ↑で -- 名無しさん (2013-08-14 05 25 42) ↑申し訳ないミスりました…。ニックネーム機能を2.1版での導入おめでとうございます。私も探しているのですが見つけることが出来ずにいます。紹介してくださっているサイト様(タイトルかURL)を是非教えていただけませんでしょうか?先方のサイト様がリンク不可のようでしたら、発見時の検索ワードとかでもいいので何かヒントをいただければと思います。よろしくお願いします。 -- 名無しさん (2013-08-14 05 33 44) ↑リンクを貼っていいのかわからなかったので検索ワードを『EasyBotter 2.1 改造』で探した時に出てきました。 -- 名無しさん (2013-08-16 11 06 33) ↑ありがとうございます~!それっぽいサイトを見つけることができました!でも改造例を閲覧したら以前自分でやってみてダメだった方法でした;;こちらの今の環境では残念ながら動きませんでしたが書き換え自体は間違っていなかったことがわかったのでよかったです。別の環境に移せた時にあらためて実装してみようと思います! -- 名無しさん (2013-08-16 22 24 28) 「地震で自動停止させる」、@PAGESのPHP5.3のサーバで停止動作は確認できました。参考にしたサイトがあるのですが、リンク張って良いのかわからなかったので、「EasyBotter 地震で自動停止」で検索してみて下さい。 -- 名無しさん (2013-08-24 19 05 16) ↑み○ば…かな?明日色々試してみる、情報ありがとう!!(2013-06-16 12 04 17の人) -- 名無しさん (2013-08-25 13 13 34) 昨夜からbotが機能しなくなり、手動でうってもCould not authenticate youと表示されてしまいます...認証できないってOAuth認証が上手くいっていないのでしょうか… -- layman (2013-10-09 23 08 14) Oauth認証を自分で取り直したらやはり直りました。easybotter製作者様のアプリが何らかの原因で使えなくなったのかな...とにかくお騒がせしました! -- layman (2013-10-10 11 14 09) 改造で出てくる2.1.2のニックネーム機能は使えなかったです。どなたか他のやり方をご存じの方、いらっしゃいましたらご教示頂けると有り難いです。 -- Lime (2013-10-23 00 39 23) 以前ニックネーム機能の実装に失敗した者ですがこちらの凡ミスでした!{name}変換部分を置き換えるとこをミスっていただけでした^^; -- 名無しさん (2013-10-27 16 41 14) @PAGESは無料でbot置けなくなるようですね。 -- 名無しさん (2013-11-08 09 57 37) ↑メール着てましたね~移転先を探さないと… -- 名無しさん (2013-11-08 15 01 18) ↑「当面の間利用削除は延期します」って来てたね。どうなることやら…… -- 名無しさん (2013-11-23 23 20 11) 14/1/15 twitter社API変更。「 http //api.twitter.com へのアクセスがSSL(HTTPS)のみに 」 easybotter.php内の http //api.twitter.com/ を https //api.twitter.com/ に変更でOK(2箇所) -- ももんが (2014-01-15 12 46 48) ↑ありがとうございました!助かりました -- 名無しさん (2014-01-15 19 50 05) ↑私のとこのも1/15以降Tweetしてくれなかったのが先ほど復活出来ました。情報有り難うございました。 -- najirane_bot (2014-01-16 20 05 42) API変更対策の件、感謝です -- 名無しさん (2014-01-20 10 40 51) 60日以上未更新広告の為にコメ -- 名無しさん (2014-09-09 15 27 04) フォローを増やすため頑張りたいと思います。 -- 名無しさん (2014-09-30 13 12 23) 60日以上未更新広告の為にコメ -- 名無しさん (2014-12-29 14 34 21) 【バージョン】2.1.3 【設置鯖名】XSERVER 【PHPのバージョン】PHP5.3.3 【実行】 手動 【手動】 動く 【不明点など】前から浸かっているTwitterアカウントでは問題なく動いている。今回新しくTwitterアカウントを取りEasyBotterをセットしたところ、Twitterからの情報が取れないようで「(@)をフォローしました Twitterへの投稿に成功しました。 @に投稿したメッセージ: http //twitter.com//status/」とメッセージが出て、実際には送られていない。 -- caffe_siesta (2015-01-27 14 30 35) 【バージョン】2.1.3 【設置鯖名】XSERVER 【PHPのバージョン】PHP5.3.3 【実行】 手動 【手動】 動く 【不明点など】EasyBotter歴5年です。前から使っているTwitterアカウントでは問題なく動いている。今回新しくTwitterアカウントを取りEasyBotterをセット。手動で動かすと「(@)をフォローしました Twitterへの投稿に成功しました。 @に投稿したメッセージ: http //twitter.com//status/」となりアカウント名が入らないし、実際には投稿されていない。現在動いているEasyBotterをそのまま新しいアカウントで設定しても状況は変わらない。Twitter側の問題でしょうか?修正場所を指南いただけるとありがたいです。 -- caffe_siesta (2015-01-27 14 36 06) twitter api の権限がread only だと投稿に失敗するようです -- 名無しさん (2015-03-03 15 02 11) 【バージョン】2.1.3 【設置鯖名】ロリポップ 【PHPのバージョン】PHP5.3 【実行】 手動 【手動】 エラー 【不明点など】ずっと正常稼働していたのですが、いつの間にか function followUser でエラー161に成ってる状態が続いていまして、フォロー返しが出来なく成ってしまいました。公式twitterクライアントでの手動フォロー返しは出来ます。何が問題なのかご指南お願いします? -- 名無しさん (2015-03-25 22 20 08) 私もロリポップでbotを運営しているんですが、何故かフォローだけができない状態なんですよね。それに伴ったリプライはちゃんと返すし、同じスクリプトを使った別サーバーのbotには何も問題がない。謎です。 -- 名無しさん (2015-03-26 23 06 45) ↑ご指南ありがとうございます。別サーバーでは動くんですか!?貴重なご意見です。APIの関係とかtwitter様の仕様変更とかと思っていたら、そうではないと言う事ですね。なるほど。ありがとうございました。 -- 名無しさん (2015-03-26 23 52 01) twitter api の権限修正で動きました!ありがとうございました。感謝感謝! -- caffe_siesta (2015-05-12 17 07 01) @pages今知ったのですがが新規登録の受付停止してますね。 -- 名無しさん (2015-06-21 13 13 38) 7/7からbotが動かないのですが皆さんは異常なしですか?@pages側の問題かな -- 名無しさん (2015-07-09 23 55 08) ↑GAE-Cron使ってるならそちらの問題かと。Twitterで「BOT Cron」で調べると様子が分かると思いますよ -- 名無しさん (2015-07-14 02 32 17) ↑有難うございます。ああっ…他の性能の良い無料cronに心当たりがないので気が滅入ります(シュン -- 名無しさん (2015-07-16 02 10 53) twitter api側の変更があったのか、5分毎にTLのキーワード反応でリプライするbotが毎日書き込み制限にあいます…聞ける人がおらずこちらでの質問になり恐縮ですが、どなたか現在も稼働しているEasyBotterユーザーの方教えていただければ幸いです。 -- 名無しさん (2015-07-27 21 14 28) ↑続き ちなみにツイート内容は「キーワードを含むツイートをした人の、そのツイートの文頭に追記をしてツイートするという内容です。「A キーワード」とつぶやかれた場合、「○○さんがツイート:A キーワード」みたいに呟きなおすものです。 -- 名無しさん (2015-07-27 21 13 45) ↑もひとつ続き Twitter Supportからは具体的な返事が来ずに困っております、現在はアプリは活性化されていますがcronは止めている状態です。再度稼働に持っていきたいので、ひょっとしたらレベルでも構わないのでアドバイスいただければと思います。よろしくお願いします。 -- 名無しさん (2015-07-27 21 18 12) ↑ 症状書いてなかった。先週末突然書き込み停止>自動フォロー機能を1日1回のみに>翌日また書き込み停止という感じです。 -- 名無しさん (2015-07-27 22 51 37) 改行して呟きたいのですが"\n"を入れても改行できないので、改行方法を教えてください。 -- 名無しさん (2015-08-12 23 00 23) 4月末、7月末と2回、稼働中だった複数のbotの内いくつかが突然停止しました。しかし、全て停止したわけでなく、同じEasybotter製で、同じサーバー、同じcronを使用しているbotで停止した/停止していないが起こっているため、原因が特定できない状況です(そのため、停止したbotは停止したままになってしまっています)。原因としては何が考えられるでしょうか?また、それに対する解決案などもあればご教授頂ければ幸いです。 -- 名無しさん (2015-09-29 09 36 16) https //apps.twitter.com/ にアクセスしたところ、自分は凍結かかってました…そんなこともあるかもしれません -- 名無しさん (2015-11-10 23 46 36) 21日あたりからタイムアウトエラー?で停止状態なのですが、同じ症状の方いらっしゃいますか? -- 名無しさん (2016-02-24 06 49 50) 3月からRequest.phpファイルが原因とみられるFatal error require_onceのエラーが出ていてbotが止まっており困っております。原因分かる方いらっしゃいますでしょうか? -- 名無しさん (2016-03-15 01 01 45) ヤマトのコメントが的はずれで会話にならない! 腹が立ちます、 -- マヤ (2017-07-15 23 37 37) @pagesが終了のお知らせのようですね… -- 名無しさん (2018-01-08 05 16 16) @pagesが2/28でサービス終了との事、困りました。無料のいい所ないかしら。クロンは前のGAEが終了した後、三分間隔だったのに、google apps Sprictで5分間隔で叩いておりました。(1分間隔だと止まってしまうので)だんだんと使いづらくなる世知辛い世の中ですね。 -- ななし (2018-02-27 20 58 56) アットページーズ終了してますね… 他にどこかPHPが使える無料のサーバーがあれば教えてください -- 名無しさん (2018-03-02 00 33 01) 自分は結局他で使ってた有料のとこの容量が空いてたのでそっちに移しちゃいましたわ^^ -- 名無しさん (2018-03-23 19 20 28) API変更の影響なのかずっと動かしてたbotが止まってしまいました……みなさんはどう対応されました? -- 名無しさん (2023-08-22 20 43 28) 名前 コメント
https://w.atwiki.jp/easybotter_wiki/pages/38.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 このページはpha氏が書いたEasyBotterが勝手に動作させられる可能性とその対策の補助的なものです。 まずは、EasyBotterが勝手に動作させられる可能性とその対策をお読み下さい。 各ディレクトリにindex.htmlを置く レンタルサーバーによっては、ディレクトリ内にindex.htmlを置かないとIEなどといったブラウザで丸見えになったりします。 ロボット避けを試みる ロボット避けのMETAタグやrobots.txtはあくまで指定であり、強制力はありません。 Googleには有効ですか、他の検索エンジンに載ってしまう可能性があります。 METAタグを追加する EasyBotter.php内 //表示用HTML function printHeader(){ $header = !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http //www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" ; $header .= html xmlns="http //www.w3.org/1999/xhtml" lang="ja" xml lang="ja" ; $header .= head ; $header .= meta http-equiv="content-language" content="ja" / ; $header .= meta http-equiv="content-type" content="text/html; charset=UTF-8" / ; $header .= title EasyBotter /title ; $header .= /head ; $header .= body pre ; print $header; } を探す。 $header .= title EasyBotter /title ; の上に $header .= meta name="robots" content="noindex,nofollow,noarchive" ; を追加。 ver.2.1を改造・機能追加した場合 改造・機能追加してEasyBotter.phpの他に、*****.phpといったファイルを増やしたのなら、中にHTML表記させる記述があるか確認する事を推奨します。HTML表記があったら、 heml の下にロボット避けのMETAタグを追加しましょう。 meta name="robots" content="noindex,nofollow,noarchive" noindex…ページの登録拒否、nofollow…ページ内リンクを辿り拒否、noarchive…キャッシュ拒否 ホームページ講座のサイトなどに、ロボット避けのMETAタグについてより詳しい解説が載ってます。 robots.txtで検索エンジンのクローラーを制御 robots.txtは、最上位のディレクトリに置くこと。 ◯ http //ユーザーID.レンタルサーバー/robots.txt × http //ユーザーID.レンタルサーバー/ディレクトリ/robots.txt × http //レンタルサーバー/ユーザーID/robots.txt @pagesユーザーは、最上位のディレクトリにrobots.txtを置けないためこの方法は有効ではありません。 設置例1:サイト全体を避けさせるようにしたい / ├index.html ├robots.txt └EasyBotterを設置するディレクトリ └index.html robots.txt内には User-Agent * Disallow / 設置例2:指定したディレクトリを避けさせるようにしたい / ├index.html ├robots.txt └ワンクッションのディレクトリ ├index.html └EasyBotterを設置するディレクトリ └index.html robots.txt内には User-agent * /ディレクトリ名/ /ワンクッションのディレクトリ名/ ※※※※注意!!※※※※ robots.txtはブラウザからアクセスすれば書いてある内容が見えます。robots.txt内にEasyBotterを設置するディレクトリ(隠したいディレクトリ)を正直に書かないこと!EasyBotterを設置するディレクトリまで書いてしまうと、EasyBotterを設置したディレクトリを特定され名称変更していないファイルを探り当てられる可能性があります。参照:Robots.txtで秘密がバレる!? 他、違った指定をしたかったりrobots.txtについてもっと詳しく知りたい場合は、 以下の参考になるサイトを見たり「robots.txt」で検索してみてください。 参考になるサイト:robots.txtでロボット対策 Googleの検索結果を制御・削除したい Googleアカウントを習得してウェブマスターツールからの操作をお勧めします。 Google の検索結果からコンテンツを削除するには 動作確認 @pages……ファイル内にMETAタグを追加し、Google ウエブマスターツールで削除要請した結果、Googleに載った検索結果から消えました。 コメント 1 -- 名無しさん (2014-09-09 15 24 19) 名前 コメント
https://w.atwiki.jp/easybotter_wiki/pages/19.html
まずは公式サイトの"基本の設定"解説を、特にsetting.phpの編集を熟読しよう。 wikiを見ても分からないところが出てきたら質問スレッドで質問しよう! bot.phpやEasyBotter.phpを編集する上で、基本使いそうなPHP制御構造等はTwitter Bot関連リンクにお勧め解説サイトをリンクしています。 ※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメントを書く」から誰かに頼んで下さい。 "access_token","access_token_secret"が出てきません! "EasyBotterから"のEasyBotterという部分は変えられますか?↑で作った"xxxから"を使い回したい Description is too short (maximum 30 characters)というエラーが出ます。 途中でエラー出て進みません! "access_token","access_token_secret"が出てきません! もう一度アクセスし直してみて下さい。それでもだめなら、OAuth手順を最初からやり直して下さい。 "EasyBotterから"のEasyBotterという部分は変えられますか? phaさんが提供して下さっているOAuth認証では出来ません。独自のOAuth認証をしなければなりません。 PHP+OAuthでTwitterさんで配布されているoauth_test.txtとTwitter API Wiki / OAuth Examplesで配布されているver0.2.0以上のzipファイルをDLして下さい。~~zipは解凍して、OAuth.phpとtwitterOAuth.phpだけ使用します。~~oauth_test.txtはoauth_test.phpへ改名して下さい。~~サーバーへアップして下さい。phpが動くフォルダなら何処でも構いません。 http //twitter.com/oauth_clientsへアクセスし Register a new application »をクリックして下さい。~~ここでOAuth認証の登録をします。~~Application Name・Description・Application Website は最低限入力する必要あり。~~%%%Application Nameが"via EasyBootter"のEasyBotterの部分となります。%%%~~ひとまず上の3点の入力と、Callback URLにoauth_test.phpのアドレスを入力、Default Access typeをRead Writeにチェックし保存して下さい。 保存が成功すると、次の画面で Consumer keyとConsumer secret が発行されます。メモ帳にメモして下さい。 先ほど用意したoauth_test.phpを編集します。~~8行目$consumer_key = consumer_key ;と10行目$consumer_secret = consumer_secret ;に先ほどの Consumer keyとConsumer secret の値を入れて保存。~~再度サーバーにアップロードしましょう。~~その後、必ずbotアカウントでtwitterにログインした状態でoauth_test.phpへアクセスして下さい。 oauth_test.phpにアクセスすると Click on the link to go to twitter to authorize your accountという英文があり、下に長いURLが貼られていると思います。~~そのURLをクリックして下さい。~~An application would like to connect to your accountのページに辿り着きます。~~「許可する」を選択するとその後転送されoauth_test.phpへ戻ってきます。~~戻ってきたoauth_test.phpにはAccess TokenとAccess Token Secret が追加されていますので、またメモして下さい。 またhttp //twitter.com/oauth_clientsへアクセスし、先ほど保存したものを編集します。~~Application TypeをClientに変更して保存して下さい。~~適当なフォルダへアップしたoauth_test.phpとOAuth.php、twitterOAuth.phpはもう必要ありません。削除してもOKです。 EasyBotterのsetting.phpをテキストエディタで開き Consumer keyとConsumer secret、Access TokenとAccess Token Secret をそれぞれメモしたものを入れて下さい。~~サーバーにアップロードしましょう。~~これで準備は整いました。bot.phpをアクセスすれば直ぐランダムPOSTするような設定にし、テスト投稿させて見ましょう。 viaの反映には時間が掛かる場合があります。焦らず時間を置いてチェックしてみて下さい。 ↑で作った"xxxから"を使い回したい oauth_test.phpを編集。Consumer keyとConsumer secretの値を入れて保存。 OAuth.phpとtwitterOAuth.phpとoauth_test.phpをサーバーにアップロード。 http //twitter.com/oauth_clientsへアクセスしCallback URLにoauth_test.phpのアドレスを入力 Application TypeをWEBに、Default Access typeをRead Writeにチェックし保存。 その後、必ず使い回したい別アカウントでtwitterにログインした状態でoauth_test.phpへアクセス。 oauth_test.phpにアクセスするとClick on the link to go to twitter to authorize your accountという英文、そのURLをクリック。 「許可する」を選択する、その後転送されoauth_test.phpへ。 Access TokenとAccess Token Secretをメモ。 setting.phpに Consumer keyとConsumer secret、Access TokenとAccess Token Secret を入れ保存。 http //twitter.com/oauth_clientsへアクセスし、Application TypeをClientに変更。 Description is too short (maximum 30 characters)というエラーが出ます。 Description(説明文)を30字以上書きましょう。 途中でエラー出て進みません! phpをアップしたサーバーのPHPバージョンは5以上ですか?~~5以上でないとOAuthを動かすこと=EasyBotterを動かすことは出来ません。 land鯖では独自OAuth認証出来ないことを確認しています(curlが使えないため。)
https://w.atwiki.jp/easybotter_wiki/pages/28.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 ○月○日だけ違うファイルを読み込ませ、ランダムPOSTさせたい [#mc37f673]○月○日から△日までだけ違うファイルを読み込まる。 [#sabc59c4] ランダムPOSTで複数のファイルからランダムに発言させたい [#taae1569]人格名をフッターに追加したい場合 [#t7fb77c2] ランダムPOSTで発言を重複させない様にする [#j9bda5e7] コメント [#u24d7adf] ○月○日だけ違うファイルを読み込ませ、ランダムPOSTさせたい [#mc37f673] bot.php内 $response = $eb- postRandom("data.txt"); だと通常、data.txt内の一行をランダムにPOSTします。 これを switch(date("m.d")){ case "06.01" $postfile = "specialdata.txt"; break; default $postfile = "data.txt"; } $response = $eb- postRandom($postfile);//ランダムPOST とすることで6月1日のみspecialdata.txt内の一行をランダムPOSTします。 ○月○日から△日までだけ違うファイルを読み込まる。 [#sabc59c4] bot.php内 $response = $eb- postRandom("data.txt"); だと通常、data.txt内の一行をランダムにPOSTします。 これを switch(true){ case (date("m") == 6 date("i") 9 date("i") 16) $postfile = "specialdata.txt"; break; default $postfile = "data.txt"; } $response = $eb- postRandom($postfile);//ランダムPOST とすることで6月10日から15日の間のみspecialdata.txt内の一行をランダムPOSTします。 ランダムPOSTで複数のファイルからランダムに発言させたい [#taae1569] bot.php内 $response = $eb- postRandom("data.txt"); だと通常、data.txt内の一行をランダムにPOSTします。 これを $randfile = array("one.txt","two.txt");//ランダムPOST-ファイル名 $response = $eb- postRandom($randfile[array_rand($randfile)]);//ランダムPOST とすることでone.txtかtwo.txtをランダムに選び、更にtxt内の一行をランダムにPOSTします。 人格を分けて発言させたい場合、one.txtに1人格目・two.txtに2人格目のセリフを入れましょう。 人格名をフッターに追加したい場合 [#t7fb77c2] EasyBotter.php内 //ランダムにポスト function postRandom($datafile = "data.txt"){ (略) //idなどの変換 if(preg_match("@{.+?}@",$status) == 1){ $status = $this- convertText($status); } とある部分を探して下さい。これの直後に //■■人格名フッター追加■■ switch($datafile){ case "one.txt" $reply_pattern_name = " ▲▲▲"; $status .= $reply_pattern_name; break; case "two.txt" $reply_pattern_name = " ●●●"; $status .= $reply_pattern_name; break; } を追記する。 こうすることで例えばone.txt内の「あいうえお」と言うセリフをランダムPOSTする時、「あいうえお ▲▲▲」と言った形で発言します。 ランダムPOSTで発言を重複させない様にする [#j9bda5e7] ソースは Twitter Bot BBS http //jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1259840844/5-6 EasyBotter.php内の //発言を作る function makeTweet($file, $number = FALSE){ の直前に //■■ランダムPOST・重複チェック■■ function rento_check($file){ if(empty($this- _tweetData[$file])){ $this- _tweetData[$file] = $this- readDataFile($file); } $rento_limit = 10; // n個前まで投稿を記録し、二重投稿を回避する $twit_logfile = "twit_log.txt"; //$twit_logfileは存在するか? if(!file_exists($twit_logfile)){ touch($twit_logfile) or die( ファイル作成に失敗\n ); chmod($twit_logfile, 0606) or die( 権限変更に失敗\n );//※パーミッションは鯖によって違います } $Posttweets = file_get_contents($twit_logfile); // 読み込み $p_tw = explode("\n", $Posttweets); // 配列に格納 $status = $this- _tweetData[$file][array_rand($this- _tweetData[$file])]; while(true) { if(in_array($status, $p_tw)){ //発言にあるか?無ければ抜ける //発言をランダムに一つ選ぶ $status = $this- _tweetData[$file][array_rand($this- _tweetData[$file])]; }else{ break; } //無ければ抜ける } $p_tw2[0] = $status;//投稿ログをローテート for( $i = 1; $i $rento_limit; $i++ ){ //1から$rento_limit直前まで if($p_tw[$i-1]) { $p_tw2[$i] = $p_tw[$i-1]; //古いのを送る。例:$p_tw2[1] = $p_tw[0] }else{ break; } //投稿が少ない時は抜ける } $p_tw_output = join("\n",$p_tw2); //配列結合 $fp = fopen( twit_log.txt , w ); //ファイルオープン flock($fp, LOCK_EX); // ファイルのロック(排他制御) fwrite($fp,$p_tw_output); //ファイル書き込み fclose($fp); //ファイルクローズ return $status; //違う文を戻り値として返す } を追記する。 //ランダムにポスト function postRandom($datafile = "data.txt"){ $status = $this- makeTweet($datafile); の $status = $this- makeTweet($datafile); を $status = $this- rento_check($datafile); へ変更する。 空のtwit_log.txtを作成し、アップロードする。※ログファイル用のパーミッションに。 ※なくても自動作成するように記述はしてありますが、動かない場合もありますので自分で作成してうpするのが確実 コメント [#u24d7adf] ランダムPOSTで発言を重複させない様にする を書き込みましたが。重複するエラーが出ます。また、5回連続でランダムポストを繰り返すにはどうしたらいいですか。 -- 安井一博 (2011-01-15 20 41 51) 複数ファイルから、ランダムに1行を抜き出し、ひとつの発言として結合させてポストするにはどうすれば良いのでしょうか。 -- 小林一郎 (2011-03-04 11 47 01) 日付ではなく、曜日で発言内容の変更(特定ファイルの読み込み)は可能でしょうか -- 坂井 (2011-04-13 06 10 44) ↑ 可能 -- 名無しさん (2011-04-17 18 40 38) 人格を作って、なおかつifを使って定期的に呟かせるにはどう調節すれば可能でしょうか? -- 名無し (2013-01-14 00 18 12) このページの内容は2.1版でも特に修正無しに使えますか? -- 名無しさん (2013-02-05 14 29 08) ランダム発言を重複しないようにする、はダメでした -- 名無しさん (2013-02-17 17 54 05) ↑ごめん、大嘘ついた。 ランダム発言重複回避はそのまま使えました -- 名無しさん (2013-02-17 18 05 30) ランダム重複回避は、改行が含まれてると俺の環境ではダメだった -- 名無しさん (2014-02-03 00 39 36) 名前 コメント
https://w.atwiki.jp/easybotter_wiki/pages/16.html
PHPエラーは英語 wikiに掲載されている追加機能を追加しようと思ってEasyBotter.phpを編集したら、PHPエラーが… PHPエラーは英語 基本的に、PHPは英語でエラーを教えてくれます。 まずはその英文を翻訳して、PHPエラーが何を言っているのか自分なりに理解してみよう! 英語が分からない!苦手!英語が得意な人のほうが少ないのでは?ネット辞書や翻訳サイトを利用しましょう。 意味はわかったけど、何処?Twitter Bot関連リンクにて、PHPエラーをまとめ解説してくれているサイトをリンクしています。参考に。 他にも、よく質問スレッドで見かけるPHPエラーに関してはよくある質問にて解説しているので、こちらもチェック。 wikiに掲載されている追加機能を追加しようと思ってEasyBotter.phpを編集したら、PHPエラーが… 初心者がむやみにEasyBotter.phpを編集するのは危険です。 背伸びせず、まずPHPの基本を学んでいきましょう。 追加してみたい機能があるなら、まずPHPを学ぶことから! Twitter Bot関連リンクにて、初心者向けにPHP講座をしているサイトをリンクしています。参考に。
https://w.atwiki.jp/easybotter_wiki/pages/23.html
PHPファイルを編集する上で、基本使いそうなPHP制御構造等はTwitter Bot関連リンクにお勧め解説サイトをリンクしています。 ※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメントを書く」から誰かに頼んで下さい。 ver.1.42でOAuth認証するにはファイルの用意 Access Tokenの取得 reply_random.phpの編集 post_random.phpの編集 from.phpの編集 備考 ver.1.42でOAuth認証するには phaさんが開放して下さっているもの(EasyBotterから)を使う場合の解説です。 ファイルの用意 PHP+OAuthでTwitterさんで配布されているoauth_test.txtとTwitter API Wiki / OAuth Examplesで配布されているver0.2.0以上のzipファイルをDLして下さい。 zipは解凍して、OAuth.phpとtwitterOAuth.phpだけ使用します。~~oauth_test.txtはoauth_test.phpへ改名して下さい。 reply_random.php等を置いている同ディレクトリ内へアップロードして下さい。 Access Tokenの取得 BOTアカウントでTwitterへログインする。 こちらのページから"OAuth認証について"をクリック。 アプリケーションを許可するか聞かれる→許可をクリック。 その後、転送されたページに表示されている Access Token/Access Token Secretの値2つをメモする。 reply_random.phpの編集 reply_random.php内 //各種設定 chdir(dirname(__FILE__)); require_once("Services/Twitter.php"); require_once( Services/Twitter/Jsphon/Error.php ); require_once("Services/Twitter/Jsphon/Decoder.php"); の直後へ require_once("twitterOAuth.php"); $consumer_key = "WtNt5W6js77cFHvKyVgf6Q"; // Consumer keyの値 $consumer_secret = "h3In28YiiRxtg4PTpkhPmrlJSGOCTG2oh3hslQ"; // Consumer secretの値 $access_token = ""; // Access Tokenの値 $access_token_secret = ""; // Access Token Secretの値 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $replydata = $to- OAuthRequest( http //twitter.com/statuses/replies.json , array(), GET ); を記入する。 ※↑に先ほど取得したAccess Token/Access Token Secretを記述する。 Consumer Key/Consumer Secretは弄らないで下さい。 その付近にある $st = new Services_Twitter($username, $password); $replydata = $st- getReplies(); を代わりに削除して下さい。 次に //投稿する $in_reply_to_status_id = $replies2[$i]["id"]; $result = $st- setUpdate(array( status = $message, in_reply_to_status_id = $in_reply_to_status_id)); を探し、まるまる //投稿する $in_reply_to_status_id = $replies2[$i]["id"]; $result = $to- OAuthRequest("https //twitter.com/statuses/update.xml",array("status"= $message, in_reply_to_status_id = $in_reply_to_status_id),"POST"); へ変更して下さい。 以上でreply_random.phpの編集は終わりです。 post_random.phpの編集 同じくpost_random.php内 //各種設定 chdir(dirname(__FILE__)); require_once("Services/Twitter.php"); require_once( Services/Twitter/Jsphon/Error.php ); require_once("Services/Twitter/Jsphon/Decoder.php"); の直後へ require_once("twitterOAuth.php"); $consumer_key = "WtNt5W6js77cFHvKyVgf6Q"; // Consumer keyの値 $consumer_secret = "h3In28YiiRxtg4PTpkhPmrlJSGOCTG2oh3hslQ"; // Consumer secretの値 $access_token = ""; // Access Tokenの値 $access_token_secret = ""; // Access Token Secretの値 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); を記入する。 その付近にある $st = new Services_Twitter($username, $password); を代わりに削除して下さい。 次に //twitterに投稿する $result = $st- setUpdate($message); を探し、まるまる //twitterに投稿する $result = $to- OAuthRequest("https //twitter.com/statuses/update.xml",array("status"= $message),"POST"); へ変更して下さい。 以上でpost_random.phpの編集は終わりです。 from.phpの編集 ファイルの中身すべてを削除し html head meta http-equiv="content-type" content="text/html; charset=utf-8" title Twitter手動投稿用フォーム /title /head body center p Twitter手動投稿用フォーム /p p 手動で何か投稿させたいときに使ってください。 /p form action="form.php" method="POST" 発言内容: br / textarea name="message" cols="20" rows="4" /textarea br / input type="submit" name="submit" value="post" / br / /form ?php if(isset($_POST["submit"])){ chdir(dirname(__FILE__)); require_once("Services/Twitter.php"); require_once( Services/Twitter/Jsphon/Error.php ); require_once("Services/Twitter/Jsphon/Decoder.php"); require_once("twitterOAuth.php"); $username = ""; //userid $consumer_key = "WtNt5W6js77cFHvKyVgf6Q"; // Consumer keyの値 $consumer_secret = "h3In28YiiRxtg4PTpkhPmrlJSGOCTG2oh3hslQ"; // Consumer secretの値 $access_token = ""; // Access Tokenの値 $access_token_secret = ""; // Access Token Secretの値 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $message = $_POST["message"]; $result = $to- OAuthRequest("https //twitter.com/statuses/update.xml",array("status"= $message),"POST"); if($result){ echo "Twitterへのpostに成功しました。 br / "; echo "@ a href= http //twitter.com/{$username} target= _blank {$username} /a に投稿したメッセージ:{$message}"; }else{ echo "Twitterへの投稿に失敗しました。パスワードやユーザー名をもう一度チェックしてみてください。 br / "; echo "ユーザー名:@ a href= http //twitter.com/{$username} target= _blank {$username} /a br / "; echo "投稿しようとしたメッセージ:{$message}"; } } ? /center /body /html と書き換えて下さい。 Access Token/Access Token Secretの記述も忘れずに! 備考 このままだと{id}や{timeline_name}と言ったものが使えなくなっています。 reply_random.phpとpost_random.php内 if(preg_match("@{.+?}@",$message) == 1){ //時間などを変換する require_once("Services/convert_text.php"); $message = convert_text($message); //id、名前を変換する //タイムラインからランダムに最近発言した人のデータを取る if(preg_match("@{timeline_id}@",$message) === 1){ $randomTweet = $st- getRandomTweet(20); $message = preg_replace("@{timeline_id}@u",$randomTweet["user"]["screen_name"],$message); } if(preg_match("@{timeline_name}@",$message) === 1){ $randomTweet = $st- getRandomTweet(20); $message = preg_replace("@{timeline_name}@u",$randomTweet["user"]["name"],$message); } //ランダムな一人のfollowerデータを取る if(preg_match("@{id}@",$message) === 1){ $randomFollowersData = $st- getRandomfollowersData(); $message = preg_replace("@{id}@u",$randomFollowersData["screen_name"],$message); } if(preg_match("@{name}@",$message) === 1){ $randomFollowersData = $st- getRandomfollowersData(); $message = preg_replace("@{name}@u",$randomFollowersData["name"],$message); } if(preg_match("@{follower_id}@",$message) === 1){ $randomFollowersData = $st- getRandomfollowersData(); $message = preg_replace("@{follower_id}@u",$randomFollowersData["screen_name"],$message); } if(preg_match("@{follower_name}@",$message) === 1){ $randomFollowersData = $st- getRandomfollowersData(); $message = preg_replace("@{follower_name}@u",$randomFollowersData["name"],$message); } //ランダムな一人のfollowingデータを取る if(preg_match("@{following_id}@",$message) === 1){ $randomFollowingsData = $st- getRandomFollowingsData(); $message = preg_replace("@{following_id}@u",$randomFollowingsData["screen_name"],$message); } if(preg_match("@{following_name}@",$message) === 1){ $randomFollowingsData = $st- getRandomFollowingsData(); $message = preg_replace("@{following_name}@u",$randomFollowingsData["name"],$message); } } をまるまる if(preg_match("@{.+?}@",$message) == 1){ //時間などを変換する require_once("Services/convert_text.php"); $message = convert_text($message); //id、名前を変換する //タイムラインからランダムに最近発言した人のデータを取る if(preg_match("@{timeline_id}@",$message) === 1){ $timeline_id_result = $to- OAuthRequest("http //twitter.com/statuses/user_timeline.xml?count=20",array(),"GET"); preg_match_all("/.*? screen_name (.+?) \/screen_name /is",$timeline_id_result,$timeline_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{timeline_id}@u",$timeline_id_kekka[array_rand($timeline_id_kekka)][1],$message); } if(preg_match("@{timeline_name}@",$message) === 1){ $timeline_name_result = $to- OAuthRequest("http //twitter.com/statuses/user_timeline.xml?count=20",array(),"GET"); preg_match_all("/.*? name (.+?) \/name /is",$timeline_name_result,$timeline_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{timeline_name}@u",$timeline_name_kekka[array_rand($timeline_name_kekka)][1],$message); } //ランダムな一人のfollowerデータを取る if(preg_match("@{id}@",$message) === 1){ $follower_id_result = $to- OAuthRequest("http //twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*? screen_name (.+?) \/screen_name /is",$follower_id_result,$follower_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{id}@u",$follower_id_kekka[array_rand($follower_id_kekka)][1],$message); } if(preg_match("@{name}@",$message) === 1){ $follower_name_result = $to- OAuthRequest("http //twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*? name (.+?) \/name /is",$follower_name_result,$follower_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{name}@u",$follower_name_kekka[array_rand($follower_name_kekka)][1],$message); } if(preg_match("@{follower_id}@",$message) === 1){ $follower_id_result = $to- OAuthRequest("http //twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*? screen_name (.+?) \/screen_name /is",$follower_id_result,$follower_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{follower_id}@u",$follower_id_kekka[array_rand($follower_id_kekka)][1],$message); } if(preg_match("@{follower_name}@",$message) === 1){ $follower_name_result = $to- OAuthRequest("http //twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*? name (.+?) \/name /is",$follower_name_result,$follower_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{follower_name}@u",$follower_name_kekka[array_rand($follower_name_kekka)][1],$message); } //ランダムな一人のfollowingデータを取る if(preg_match("@{following_id}@",$message) === 1){ $friends_id_result = $to- OAuthRequest("http //twitter.com/statuses/friends.xml?screen_name=",array(),"GET"); preg_match_all("/.*? screen_name (.+?) \/screen_name /is",$friends_id_result,$friends_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{following_id}@u",$friends_id_kekka[array_rand($friends_id_kekka)][1],$message); } if(preg_match("@{following_name}@",$message) === 1){ $friends_name_result = $to- OAuthRequest("http //twitter.com/statuses/friends.xml?screen_name=",array(),"GET"); preg_match_all("/.*? name (.+?) \/name /is",$friends_name_result,$friends_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{following_name}@u",$friends_name_kekka[array_rand($friends_name_kekka)][1],$message); } } へ書き換えて下さい。 これでOAuth認証への切り替えは終了です。お疲れ様でした。テストしてみましょう。 なお"EasyBotterから"の部分を変更したい場合はver.2.0のやり方と変わりませんので、wiki内をみて下さい。
https://w.atwiki.jp/easybotter_wiki/pages/39.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 このページはBOTを止めるものじゃなく、止まるものに(「簡単じゃない twitter bot」 の作り方メモ)を参考に、 EasyBotter -地震で自動停止を導入しました。-(ハーイ!ともみです!)にて紹介されたものです。 おおまかな手順 地震の震度を取得するPHPを作成する。 震度を取得した日時を記録しておくテキストファイルを作成する。 botが動作中か停止中かフラグを記録するテキストファイルを作成する。 手動で停止状態から復帰させるPHPを作成する。 bot.phpを改造する。 全部をアップロードして動作させる。 おまけ 手動で停止させるPHPを作成する。 地震の震度を取得するPHPを作成する EasyBotterOrg.phpという名前のファイルを作る。 ?php class Easy_botter_org{ function jisin(){ //============================= //地震判定プログラム //============================= /* goo 天気 地震情報RSSを読み込み、震度6以上の場合、震度を返す*/ $earthquake_pubtime_txt = earthquake_pubtime.txt ; //前回のRSS読み込み日時を調べる $last_pubtime = file_get_contents($earthquake_pubtime_txt); if ($last_pubtime == ){ $last_pubtime = date( Y-m-d H i s ,time()-300); } //$last_pubtime = 2011-03-11 14 00 00 ;//TEST $xml = file_get_contents( http //weather.goo.ne.jp/earthquake/index.rdf );//地震情報 - goo 天気 $xml_tree = simplexml_load_string($xml); if (count($xml_tree- channel- item) 0){ $ts = strtotime((string)$xml_tree- channel- item[0]- pubDate); file_put_contents($earthquake_pubtime_txt, date( Y-m-d H i s ,$ts));//読み込み済RSSの日時を保存 chmod($earthquake_pubtime_txt, 0666); } $shindo_num = ; $shindo_str = ; $shindo_pubtime = ; $shindo_text = ; $shindo_basyo = ; $result = array(); foreach($xml_tree- channel- item as $k = $v){ $text = (string)$v- title; $pubtime = date( Y-m-d H i s ,strtotime((string)$v- pubDate)); if ($pubtime = $last_pubtime){ continue; } if ($pubtime date( Y-m-d H i s ,time() - 3600)){//前回から60分(3600秒)以内なら処理しないで次へ continue;//TEST時はここをコメントアウト } //震度を取得し、指定以上ならフラグ立て、処理を終了 preg_match( /震度([0-9]+)[強弱]*/ ,$text,$matches); preg_match( /\[震源地\](.*)\[最大震度\]/ ,$text,$matches_basyo); $shindo = $matches[1]; if (is_numeric($shindo) (int)$shindo = 6){//震度6の場合 $result[ num ] = (int)$matches[1]; $result[ str ] = $matches[0]; $result[ pubtime ] = $pubtime; $result[ text ] = $text; $result[ basyo ] = trim($matches_basyo[1]," "); $result[ word ] = $shindo_str."の地震が".$shindo_basyo."で起きましたので、停止いたします。";//ツィートされます。 break; } } echo $result[ text ]." br / br / "; return $result; } } 震度を取得した日時を記録しておくテキストファイルを作成する。 earthquake_pubtime.txtという名前のテキストファイルを作る。 中身は何も書かなくてOK botが動作中か停止中かフラグを記録するテキストファイルを作成する。 flg_joutai.txtという名前のテキストファイルを作る。 中身は何も書かなくてOK 手動で停止状態から復帰させるPHPを作成する。 start.phpというファイルを作成する。 ?php //============================= //フラグファイル読み出し // 状態フラグ $joutai // [0]stop 動作停止中 //============================= $joutai_txt = file_get_contents("flg_joutai.txt"); if($joutai_txt !== ""){ $joutai = unserialize($joutai_txt); } //============================= //フラグ設定 //============================= $joutai[0] = FALSE; //============================= //フラグファイル格納。 //============================= $response = file_put_contents("flg_joutai.txt" , serialize($joutai)); ? bot.phpを改造する。 bot.php内 ?php //============================= //EasyBotterを呼び出します //============================= require_once("EasyBotter.php"); $eb = new EasyBotter(); //============================= //震度を取得します //============================= require_once("EasyBotterOrg.php"); $ebo = new Easy_botter_org(); //============================= //フラグファイル読み出し // 状態フラグ $joutai // [0]stop 動作停止中 //============================= $joutai_txt = file_get_contents("flg_joutai.txt"); if($joutai_txt !== ""){ $joutai = unserialize($joutai_txt); } //============================= //停止中なら止めてしまう。 //============================= if($joutai[0]){ die("地震で停止しています"); } //この一文は、手動でbot.phpを叩くと表示されます。ツイートはされません。 //============================= //地震判定(毎回) //============================= $shindo = $ebo- jisin(); if( $shindo[ num ] 0){ //値が返ってきてたら $joutai[0] = TRUE; //停止フラグを立てる } //============================= //フラグファイル格納。 //============================= $response = file_put_contents("flg_joutai.txt" , serialize($joutai)); //============================= //ここから下に、通常時のbotの動作を書き込みます。 //============================= ? アップロード ファイルは全て、bot.phpと同じ階層にアップしてください。 きちんと動作すると、flg_joutai.txtを開いた時以下の表示が出ます。 通常時は a 1 {i 0;b 0;} 停止中は a 1 {i 0;b 1;} 停止からまた動かす時は、手動でstart.phpを実行すれば治ります。 おまけ 手動で停止させるPHPを作成する。 ※利用上の注意 pha氏が書いたEasyBotterが勝手に動作させられる可能性とその対策と同じ理屈で、他人にbotを勝手に止められてしまいます。 EasyBotterが勝手に動作させられる可能性とその対策も併せてお読みください。 stop.phpというファイルを作成する。 ?php //============================= //フラグファイル読み出し // 状態フラグ $joutai // [0]stop 動作停止中 //============================= $joutai_txt = file_get_contents("flg_joutai.txt"); if($joutai_txt !== ""){ $joutai = unserialize($joutai_txt); } //============================= //フラグ設定 //============================= $joutai[0] = TRUE; //============================= //フラグファイル格納。 //============================= $response = file_put_contents("flg_joutai.txt" , serialize($joutai)); ? これを、これまでと同じ階層にアップする。 手動でstop.phpを実行すれば停止します。 再度動かす場合は、前述のとおり手動でstart.phpを実行すれば治ります。