約 4,767,565 件
https://w.atwiki.jp/easybotter_wiki/pages/24.html
すべて外部サイトですので、各自責任を持って利用して下さい。 PHP的な問題は、教えてgooやYahoo!知恵袋でPHP質問してみるのも良いかもしれません。 PHPマニュアル お勧めPHP解説サイト cronサービス EasyBotter関連 PHPマニュアル PHP.net マニュアル よく使いそうなリンク:date関数, パターン修飾子 お勧めPHP解説サイト PHPやるなら見ておいたほうがいいサイト PHP プログラミング言語資料簡単な説明だけですが、パッとみるにはとても見やすいサイトです。 そふぃのphp入門初心者向けに1から説明されています。 PHPエラー一覧PHPエラーについて簡単に説明されています。 正規表現一覧メタ文字について簡単に説明されています。 関数リファレンス一覧 EasyBotterで緊急時BOT停止する方法 cronサービス Twitter Bot目的外でcronサービスを利用している人も沢山います。 日本人お断り、なんてことにならないよう節度ある利用をお願いします。 設置サーバーとcronサーバーとの相性もあります。 手動では動くのに、cronでは動かないなんてことも有りますので自分に合ったcronサービスを見つけて下さい。 GAE-cron ClubGAEを使った国内のcronサービス。ソース公開もあり、自分でcronサービスを設置することも出来る。 SetCronJob 海外のcronサービス無料と有料とある。登録して1か月使用されていなければ、有料コースまたはアカウント削除する催促のメールが届く Free Web Cron Service 海外のcronサービス無料。AOL、google、Yahoo、OpenID、Blogger、WordPressのアカウントがあるか、なくてもアカウント取得して使える。~~※OpenIDでログインすると、他の人の設定も見えたり変更もできるので注意 webcron.org 海外のcronサービスフランスの有料cronサービス。1週間の試用期間がある。料金はユーロで支払方法はクレジットカードかPayPal cron-job.org 海外のcronサービス無料。サーバー名に.jpが付いている物は登録出来ない?2分間隔などにしていると削除される? Cronjob.de 海外のcronサービスcron-job.orgと同じくドイツのサービス。有料と無料コースとある。日本のISPだと制限あり? EasyBotter関連 「簡単じゃない twitter bot」の作り方メモ
https://w.atwiki.jp/easybotter_wiki/pages/21.html
まずはbot.php/setting.phpに書かれている説明と、EasyBotter公式サイト、設定手順・エラー解決編を熟読しよう。 wikiを見ても分からないところが出てきたら質問スレッドで質問しよう! bot.phpやEasyBotter.phpを編集する上で、基本使いそうなPHP制御構造等はTwitter Bot関連リンクにお勧め解説サイトをリンクしています。 ※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメントを書く」から誰かに頼んで下さい。 object(SimpleXMLElement)#10 (2) ~~エラーが出ます"Incorrect signature"エラー "Status is a duplicate."エラー Fatal error Uncaught~~エラーが出ます bot.phpを実行した時、ブラウザ側が文字化けする object(SimpleXMLElement)#10 (2) {~~エラーが出ます "Incorrect signature"エラー object(SimpleXMLElement)#10 (2) { ["request"]= string(20) "/statuses/update.xml" ["error"]= string(19) "Incorrect signature" } というエラーが出る。 setting.phpに間違いは有りませんか? OAuth認証コードが古いものだったりしませんか? OAuth設定項目のアプリケーション設定がBrowserになっていませんか?Clientにして下さい。 他には data.txt なり指定されたテキストファイルの文字コードが shift-jis ではありませんか? 文字コードがおかしいと投稿時にエラーがでます。 指定するテキストファイルは全て UTF-8 に変換してください。 "Status is a duplicate."エラー object(SimpleXMLElement)#10 (2) { ["request"]= string(20) "/statuses/update.xml" ["error"]= string(22) "Status is a duplicate." } というエラーが出る。 「duplicate」つまり重複です。Twitterでは同じ発言を繰り返し投稿できません。少なくとも10ツイートはあける必要があります。 これはランダム投稿用データが少ない時に発生します。 また、bot.phpでpostRandom()が同時に動く時も発生する可能性があります。 Fatal error Uncaught~~エラーが出ます Fatal error Uncaught table border="1" cellspacing="0" tr td colspan="3" bgcolor="#aaaaaa" align="center" b Exception trace /b /td /tr tr td align="center" bgcolor="#cccccc" width="20" b # /b /td td align="center" bgcolor="#cccccc" b Function /b /td td align="center" bgcolor="#cccccc" b Location /b /td /tr tr td align="center" 0 /td td HTTP_OAuth_Consumer_Request- send() /td td フルパス/PEAR/HTTP/OAuth/Consumer.php 250 /td /tr tr td align="center" 1 /td td HTTP_OAuth_Consumer- sendRequest( https //twitter. hellip; , Array, POST ) /td td フルパス/EasyBotter.php 517 /td /tr tr td align="center" 2 /td td EasyBotter- _setData( https //twitter. hellip; , Array) /td td フルパス/EasyBotter.php 528 /td /tr tr td align="center" 3 /td td EasyBotter- setUpdate(Array) /td td フルパス/EasyBotter.php 162 /td /tr tr td align="center" 4 /td td EasyBotter- re in フルパス/PEAR/HTTP/OAuth/Consumer/Request.php on line 214 Twitterサーバーと連繋がうまく行ってない時(重い時)よく出るエラーのようです。 ほかにも原因がある場合がありますが、よくわかっていません。 land.to鯖では反応するものがないと「*以内に受け取ったメッセージはありません」と表示はしますが、実際リプライを受け取って返そうとするとこのエラーが出ます。 curlが使えないことによるものだと思われます(ver1.42にOAuthをつけると、curlエラーが出て動かない。) Windows環境にてopensslが有効になってないと発生しました。 bot.phpを実行した時、ブラウザ側が文字化けする 例:"Status is a duplicate."エラーの時 Twitter縺ク縺ョ謚慕ィソ縺ォ螟ア謨励@縺セ縺励◆縲 繝ヲ繝シ繧カ繝シ蜷搾シ咫 id object(SimpleXMLElement)#10 (2) { ["error"]= string(22) "Status is a duplicate." ["request"]= string(22) "/1/statuses/update.xml" } EasyBotter.php rep.php reply_pattern.php setting.php bot.php data.txt の文字コードがUTF-8で保存してあるか確認してください。 備考:配布されているデフォルトのソースファイルではUTF-8N(UTF-8のBOMなし)になっています。
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/20.html
まずはbot.phpに書かれている説明と公式サイトの"基本の設定"解説を熟読しよう。 wikiを見ても分からないところが出てきたら質問スレッドで質問しよう! bot.phpやEasyBotter.phpを編集する上で、基本使いそうなPHP制御構造等はTwitter Bot関連リンクにお勧め解説サイトをリンクしています。 ※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメントを書く」から誰かに頼んで下さい。 最初はきちんとPOST投稿されていたのに、Twitterへ投稿反映されなくなった!(bot.phpで「投稿しました」表示は出る) 最初はきちんとPOST投稿されていたのに、Twitterへ投稿しなくなった!(bot.phpへアクセスしても真っ白) POSTを○分おきにしたくてif(***)を使っているのですが、リプライまで○分おきになっちゃう! 会話終了機能が機能しないその1 その2 最初はきちんとPOST投稿されていたのに、Twitterへ投稿反映されなくなった!(bot.phpで「投稿しました」表示は出る) 発言パターンが少ないのではありませんか? 現在Twitterでは同一発言投稿が出来なくなりました(ある条件で解除されます。) 新しい発言を10つ位用意して、もう一度動かしてみましょう。 最初はきちんとPOST投稿されていたのに、Twitterへ投稿しなくなった!(bot.phpへアクセスしても真っ白) EasyBotterでは1つの発言(TL、リプライ)に対して、1度しか返信しません。 もう一度反応させたい場合は、違う発言を行って反応させてみましょう。 POSTを○分おきにしたくてif(***){}を使っているのですが、リプライまで○分おきになっちゃう! {}を閉じ忘れていませんか? リプライの記述まで{}内に入っていませんか? 一度bot.phpの中身を ?php //============================= //EasyBotterを呼び出します //============================= require_once("EasyBotter.php"); $eb = new EasyBotter(); $response = $eb- reply(2,"data.txt","reply_pattern.php"); ? とリプライ反応だけにしてみて、一つずつ追加して行きましょう。 会話終了機能が機能しない 場合によっては機能しないことがあるようです?応急処置。 その1 EasyBotter.php内 if(empty($status) || $status == "[[END]]"){ を if(empty($status) || stristr($status,"[[END]]")){ と変更する。 その2 EasyBotter.php内 //リプライを作る function makeReplyTweets($replies, $replyFile, $replyPatternFile){ (略) $replyTweets[] = $re; とある部分の $replyTweets[] = $re; を if(!stristr($status,"[[END]]")){$replyTweets[] = $re;} と変更する。
https://w.atwiki.jp/easybotter_wiki/pages/14.html
cronは後回し、まずは手動でOAuth認証のためのAccess TokenとAccess Token Secretを取得する setting.phpをテキストエディタで編集しよう bot.phpをテキストエディタで編集しよう ファイルをサーバーにアップロードしようver1.42から引き継ぎの場合 bot.phpにアクセスしよう botアカウント(例:aaa_bot)へ話しかけてみよう補足 ランダムPOSTもしてみよう補足 自動フォロー返しを機能させよう TL反応をさせてみよう 最後に… 番外:cronで自動的に動かす cronは後回し、まずは手動で EasyBotter2.04beta.zipをDLしてきたらそれを解凍。 EasyBotter2.04betaフォルダの中に、いくつかファイルがあると思う。 最初はファイル名など一切変えず、簡易的に、最小限の機能を動作させてみる。 OAuth認証のためのAccess TokenとAccess Token Secretを取得する ※Twitterにはbotアカウントでログインしておくこと!! setting.phpの編集をよく見て、"このサイトでOAuth認証のキーを取得する"の通りにやってみる。 setting.phpをテキストエディタで編集しよう ここで一番大事なのは文字コードに注意して編集、保存する。 $screen_name = ""; //botのid名$access_token = ""; // Access Tokenの値$access_token_secret = ""; // Access Token Secretの値 を自分に合わせて編集するだけでOK。 編集し終わったら保存を忘れずに。 bot.phpをテキストエディタで編集しよう こちらも文字コードには気をつけて編集する。 bot.phpの中身は ?php//=============================//EasyBotterを呼び出します//=============================require_once("EasyBotter.php");$eb = new EasyBotter();$response = $eb- reply(2,"data.txt","reply_pattern.php");? だけにして保存しよう。 (この設定では、2分間のリプライに対して追リプライをするようになります。) ファイルをサーバーにアップロードしよう PHP5が使えるサーバーで、PHPが使えるフォルダ以下に適当な名前のフォルダ(例:twitbot)を作る。 使用するファイルすべてをフォルダへアップロードしましょう。 twitbot┣ PEARフォルダ(中身も全部)┣ bot.php┣ data.txt┣ EasyBotter.php┣ log.dat┣ reply_pattern.php┗ setting.php アップした.phpファイルと.datファイル(ログファイル)は、サーバーによってはパーミッションを変更(属性変更)しなければなりません。 パーミッション値は各サーバーのFAQ等に載っているはずですので、確認して下さい。 大抵はlog.datのパーミッションを変更するだけでOKです。 ref(http //image02.wiki.livedoor.jp/e/i/easybotter_wiki/f88d16c9813c1397.png, 600) (アップロードの例。もちろん細部はレンタルサーバで異なる) 「ファイルをサーバーにアップロードしよう」項目はPHP以前にホームページ作成の基本知識です。~~これが分からなければEasyBotter設置は難しいです。ホームページ作成の知識から学びましょう。~~それが出来ないのであれば、厳しく言うと諦めた方が吉(プログラムの暴走などはサーバーへの負担、他のユーザーへ迷惑を掛ける原因になりえます。)~~簡易的にTwitter Botを作れるtwitter bot GENERATORを利用することをお勧めします。 ver1.42から引き継ぎの場合 一部のファイルは引き継ぎ可能です。 2.0と違う所はServicesフォルダとreply_random.phpは不要になるので、削除しても構わない。 OAuth認証が済んでいる人は、setting.phpの4つのキーはすでに取得したものを記入する。 リプライ(パターン外の反応)を使うならtw.txtをdata.txtにファイル名を変えるか、bot.php内のdata.txtになっているところのファイル名をtw.txtに変える。 TLリプライを使うときは、reply_pattern.phpをコピーして使えますが、ファイル名を変えることを忘れずに! 詳しくは下のTL反応させてみようの注意にて。 ※reply_pattern.php内の$reply_patternを、$dataに変更しておく必要があります。 任意のフォルダ名┣ PEARフォルダ(中身も全部)┣ bot.php┣ data.txt(tw.txtにあたるもの)┣ EasyBotter.php┣ log.dat┣ reply_pattern.php(リプライ用ファイル)┣ reply_pattern.phpのファイル名を変えたもの(TLリプライを使う場合) 例 tl_pattern.php┗ setting.php となります。■色のものは1.42から引き継いで使えるもの bot.phpにアクセスしよう サーバーへアップロードしたbot.phpにアクセスしてみよう(例:http //~/twitbot/bot.php) 真っ白なページに「2分以内に受け取った@はないようです。」と表示されれば準備は整いました! 英語で何やら文字が並んでいる場合は、PHPエラーが発生しています。 OAuth認証コードに間違いはないか、パーミッション値が合っているか、setting.phpやbot.phpでどこかおかしな記述をしていないかチェックし直そう。 botアカウント(例:aaa_bot)へ話しかけてみよう @aaa_bot おはよう!@aaa_bot 今日の運勢教えて! のどれかを、自分の本アカウントから発言し、botへリプライしてる。 その後、サーバーへアップしたbot.php(例:http //~/twitbot/bot.php)へアクセスする。 Twitterへの投稿に成功しました。~~@aaa_botに投稿したメッセージ:@本アカウント名 Good morning, master. http //twitter.com/aaa_bot/status/******** か Twitterへの投稿に成功しました。~~@aaa_botに投稿したメッセージ:@本アカウント名 おはようございます、御主人様 http //twitter.com/aaa_bot/status/******** のいずれかが表示されれば、botのリプライ機能は成功です! http //twitter.com/aaa_bot/へアクセスし、投稿されているかチェックしてみよう。 補足 初期のままでは 「おはよ」「今日の運勢」「こんにちは」「こんにちわ」「こんちは」「こんちわ」「◯◯は好き?」「会話終了」 という言葉を含まないリプライへは、data.txtの中のどれか1行を追リプライします。 ランダムPOSTもしてみよう bot.phpの中身を ?php//=============================//EasyBotterを呼び出します//=============================require_once("EasyBotter.php");$eb = new EasyBotter();$response = $eb- reply(2,"data.txt","reply_pattern.php");$response = $eb- postRandom("data.txt"); ? にして保存しよう。再度bot.phpをサーバーへアップロードする。 $response = $eb- postRandom("data.txt"); を追加することにより、bot.phpへアクセスした際data.txtの中のどれか1行を発言するようになります。 その後、サーバーへアップしたbot.php(例:http //~/twitbot/bot.php)へアクセスする。 Twitterへの投稿に成功しました。~~@aaa_botに投稿したメッセージ:コメント http //twitter.com/aaa_bot/status/******** と表示されればランダムPOSTは成功です! "コメント"は いろはにほへと ちりぬるをわかよたれそ つねならむうゐのおくやま けふこえてあさきゆめみし ゑひもせすん のいずれか。 補足 $response = $eb- postRandom("data.txt"); ではなく $response = $eb- postRotation("data.txt"); を追加した場合、data.txtの中の1行目を発言します。 2回目にアクセスした時は2行目を発言します。 !実際はすべて1行目を発言している。 1行目を発言した際、1行目にあった文章を一番下の行へ移動させ、2行目だったものが1行目になり、txtが改変保存される。 次回アクセス時に1行目(その本来2行目だったもの)をまた発言する。 ※注意※~~この機能を利用する場合はdata.txtのパーミッションを、ログファイル用パーミッション値へ変更すること!!(例:666) 自動フォロー返しを機能させよう 自分の本アカウントと、aaa_bot互いにフォロー/フォロワー関係を解除して下さい。 Twitterの仕様変更により、フォロー返しは最新APIへの変更をしないと動作しません。 bot.phpの中身を ?php//=============================//EasyBotterを呼び出します//=============================require_once("EasyBotter.php");$eb = new EasyBotter();$response = $eb- reply(2,"data.txt","reply_pattern.php");$response = $eb- postRandom("data.txt");$response = $eb- autoFollow();? にして保存しよう。再度bot.phpをサーバーへアップロードする。 $response = $eb- autoFollow(); を追加することにより、bot.phpへアクセスした際、botアカウントをフォローしている人つまりフォロワーを自動でフォローするようになります。 本アカウントでTwitterにログインし、botアカウントをフォローする(この時、まだbotアカウントで本アカウントをフォローしない!) その後、サーバーへアップしたbot.php(例:http //~/twitbot/bot.php)へアクセスする。 (リプライ、POSTと違って自動フォロー返し云々のメッセージは表示されません。) http //twitter.com/にアクセスし、botアカウントが本アカウントをフォローしていれば自動フォロー返しは成功です! TL反応をさせてみよう bot.phpの中身を ?php//=============================//EasyBotterを呼び出します//=============================require_once("EasyBotter.php");$eb = new EasyBotter();$response = $eb- reply(2,"data.txt","reply_pattern.php");$response = $eb- postRandom("data.txt");$response = $eb- autoFollow();$response = $eb- replyTimeline(2,"reply_pattern.php");? にして保存しよう。再度bot.phpをサーバーへアップロードする。 $response = $eb- replyTimeline(2,"reply_pattern.php"); を追加することにより、bot.phpへアクセスした際、TL上の反応語句に反応し対象へリプライするようになります。 本アカウントとbotアカウントがフォロー/フォロワーの状態で こんにちは と、本アカウントで発言する。 その後、サーバーへアップしたbot.php(例:http //~/twitbot/bot.php)へアクセスする。 Twitterへの投稿に成功しました。~~@aaa_botに投稿したメッセージ:こんにちはこんにちは! http //twitter.com/aaa_bot/status/******** と表示されればTL反応は成功です! !!注意!!~~botを実際運用する時は、TL用のパターンファイルを別に用意して下さい。(例:tl_pattern.php)~~リプライのパターンファイル(reply_pattern.php)をTL反応と共有してしまうと、多様な言葉に反応しスパムbot化してしまいます!! 最後に… このページでは一通り最低限の機能を動作させる為に、なるべく初期設定のままで解説を行いました。 が、実際に稼動させる際について注意したいのがdata.txtの扱い方です。 通常POSTとリプライで共有している状態かと思いますが、通常POST用とリプライ用で別にファイルを作ることをおすすめします。 例:通常POST用→data.txt リプライ用→replydata.txt data.txtをコピーして改名するか、新規テキストファイルを作り(※文字コード等に注意)編集しましょう。 これでEasyBotterで出来る機能すべてを使いました。 あとはPHPを学び、EasyBotter.phpやreply_pattern.phpを編集することで色々な機能を自分なりにつけていこう。 番外:cronで自動的に動かす 「cronは後回し!まずは手動で動かそう!」の項目すべてが問題なく終了したら、次はcronを使って自動化してみよう。 ここで使うcron(クーロン、クローン、クロン)とは定期的に自動でファイルにアクセスしてくれるものです。 毎回手動でアクセスしていては疲れますね。 それを時間設定してプログラムで自動的にファイルにアクセスしてくれるもの(叩くという言い方するところもあり)と考えてくれればいいです。 手動で1分毎、2分毎にアクセスしていれば疲れるように、自動プログラムとはいえcronの間隔が短ければ短いほどサーバーの負担は大きくなります。 それをよく考えて、適度な時間に設定しましょう cronサービスは自分の環境に合ったものを探そう設置サーバーとcronのサーバーの相性が悪くて、うまく作動しないこともあります。~~無料サーバー+無料cronの組み合わせは精度が低い場合が多いです。気になるようでしたら~~有料サーバー+有料cronにするか、自宅サーバー化して動かすかにしましょう。~~精度が低くて話にならないとクレーム付けるのはお門違いです。 有料サーバーが提供しているcronを使用する場合は、各レンタル元の注意はちゃんと読みましょう~~レンタル元から最短でも何分間隔でと書かれています。設置解説を公開している所もありますが、意味が分からなければ~~まずその単語を理解してからにしましょう。解説サイトや掲示板でレンタル元が指定した時間より短い間隔で○分で~~動かしていると言っているところもありますが、乗せられないように。 ~~間違った設定はレンタル元も監視しているとはいえ、一時的に他ユーザーを巻き込んで停止処分されてしまいます。~~すでにいくつかのレンタルサーバーで、巻き添えを食らって一時停止を食らった人達もいます。注意しましょう。~~無理だと思ったら削除して、他で提供しているcronに変えた方がいいです cronの間隔は最低でも2分以上にしようあまり間隔が短いと、サーバーに負荷が掛かる&うまく動作しないことがあります。
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/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/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/35.html
?php //============================= //EasyBotterを呼び出します //============================= require_once("EasyBotter.php"); $eb = new EasyBotter(); //$response = $eb- reply(2,"data.txt","reply_pattern.php"); //$response = $eb- postRandom("data.txt"); $response = $eb- autoFollow(); ?
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を実行すれば治ります。