EasyBotterの改造◆特定のフォロワーへ返信しない動作を簡潔にする方法

このQ&Aのポイント
  • EasyBotterの改造方法として、外部ファイルを使用して特定のフォロワーへの返信を除外する方法を考えています。
  • 具体的には、外部ファイル(txt形式)に除外するフォロワーのIDを書き込み、EasyBotterに読み込ませることで実現できます。
  • 外部ファイルの内容を書き換えるためのフォームを作成し、都度変更できるように設計することも一つの手段です。
回答を見る
  • ベストアンサー

EasyBotterの改造◆特定のフォロワーへ返信しない動作を簡潔にす

EasyBotterの改造◆特定のフォロワーへ返信しない動作を簡潔にする方法。 →→Pha様のEasyBotterを使用させていただき、bot運営をしております。現在順調に動いております。改造の質問になります。本家サイトの掲示板にてヒントはいただき調べてはいるのですが、こちらでもう少しヒントをいただきたく質問させていただきます。 「特定のフォロワーからのリプライに対し、返信をしない」の動作に関してなのですが、 この動作自体は非公式wikiの"特定の人を除外"で出来る事は分かっているのですが、 これをいちいちEasyBotter.phpをいじらず簡潔に、都度変更出来るようにしたいと思っております。 改造方法としては… ■1 上記"特定の人を除外"のソース↓ ------- $bottername = array("abcd","efgh"); if($this->_screen_name == $replyName || in_array($replyName, $bottername)){ ------- ↑の$bottername部分を、外部ファイル(txt…?)で別途用意し、読み込ませるようにする。 ■2 外部ファイルのtxtの中身を書き換えられるフォームを作る。 と、考えてしまっているのですが、改造の手段として根本的に違っていますでしょうか… フォームに入力した内容をテキストに書き出す、というphpのソースは 色々検索していたら出てきたのですが、そもそも外部で呼び出すファイルがテキストで良いのか テキストファイルで良い場合は、どのように記述するのかもあやふやで…。 ------- $bottername = "notreplyid.txt"; if($this->_screen_name == $replyName || in_array($replyName, $bottername)){ ------- に書き換えて、notreplyid.txtにリプライしないフォロワーのIDを書けば 出来るなんて簡単な話ではないですよね…。 そふぃ様のPHP入門のページを読んではいるのですが まだ1つずつ理解をしているので時間がかかってしまっています。 まだまだ勉強しはじめたばかりで不相応な事をしているのは承知しておりますが、 行き詰ってしまったために、何かきっかけをいただきたく質問させていただきました。 ちょっとしたことでも結構ですので、何かヒント(特にPHPのここを勉強すると理解できる、 このソースを改造すれば出来るかも、お叱りの言葉等々…)いただけないでしょうか。 何卒、宜しくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 notreplyid.txtの中身が、1行に1個ずつ該当のスクリーン名が書かれているとして $bottername = file("notreplyid.txt", FILE_IGNORE_NEW_LINES); で、中身が配列に読み込まれます。  ただし、比較するたびにいちいちファイルを読み込む必要はありませんから、起動直後の処理で読み込ませた方が良いのですが、変数スコープとかの問題とかあるので、そのへんはソース全体を見ないとなんとも言えません。

twinkie-link
質問者

お礼

ソースを書いてくださって本当にありがとうございます…。 非常に心強いです!

twinkie-link
質問者

補足

書いてくださったソースで、txtの中身を配列に読み込んでくれる事になるのですね。 元々のソースですと、 $bottername = array("abcd","efgh"); というように、ユーザー名が複数いる場合"",で区切っていると思いますが、 今回教えてくださったように外部txtに一行に1人のIDを記述する場合、 そのtxtに"",などの記述は必要ないのでしょうか…? また、ソース全体が非常に長いためこちらで書き込むことが出来ませんが 変数スコープ、というものなども勉強しないとダメみたいですね。 まだまだPHPに関しては基本的な事すら頭に全く入っていない事を実感しました…。

その他の回答 (1)

回答No.2

> 元々のソースですと、 > $bottername = array("abcd","efgh"); > というように、ユーザー名が複数いる場合"",で区切っていると思いますが、 > 今回教えてくださったように外部txtに一行に1人のIDを記述する場合、 > そのtxtに"",などの記述は必要ないのでしょうか…?  ソース上で直に文字データを代入する場合は""で括って、それが文字列のデータであることを示します。専門用語で文字列リテラルと呼びます。括らないとプログラムの中の変数や定数等の識別子と区別できません。  ここではファイルに入っている文字列は、それをそのままデータとして扱うので""は不要です。データ形式としてはどういうデータを扱うかはプログラムによっても違うので、数値と数字の文字列を区別したいような場合は文字列を""を付けたりもしますが、それなりの読込みの処理が必要です。

twinkie-link
質問者

お礼

ああ!ありがとうございます、納得いたしました。つい先日勉強したばかりの所だったのに すっかり頭から抜けていました…。そうですよね。IDは単なる文字列ですものね…重ね重ね丁寧にお答えいただき、本当にありがとうございます。

関連するQ&A

  • twitterのbotが自動フォロー返しなくなった

    基本はEasyBotterで作ってあります 【バージョン】 Ver2.04beta 【設置鯖名】 @PAGES 【PHPのバージョン】5 【手動】 フォロー返し以外は手動も自動も正常に動いています 【実行】 GAE-Cron 【実行間隔】 2分間隔 bot.phpに $response = $eb->autoFollow(); を入れて、 EasyBotter.phpに //自動フォロー返し function autoFollow(){ $response = $this->getFollowers(); $followList = array(); foreach($response as $user){ $follow = (string)$user->following; if($follow == "false"){ $followList[] = (string)$user->screen_name; } } 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; } } を入れてあります。 最近まで動いていたのですが、 フォロワーが1000人を超えたあたりからなぜか動かなくなりました。 というのをEasyBotter初心者質問スレ3(http://jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1287944674/)で質問したところ、 「最新のAPI確認 公式でフォロー数規定確認 」 という回答をいただきました。 確認してみたのですが 公式のフォロー数規定は超えてないようです 最新のAPIというあたりから勉強不足でよくわからないのですが、 どうしたらいいのでしょうか? よろしくおねがいします

    • ベストアンサー
    • PHP
  • ツイッターbot:特定のアカウントへのリプライの事

    http://pha22.net/twitterbot/2.0/faq.php http://www26.atwiki.jp/easybotter_wiki/pages/1.html 主にこちらのサイトを参考にしてツイッターのボットを製作しています。 一応それなりに動いて稼働してはいますが、特定のアカウントに対して別のリプライパターンを読み込ませる、というところで躓いております。 上記のサイトはもちろん他のサイトも参考にしてphpを打ち込みましたが、如何せんphpへの理解がまだまだ足りておらず、どこが分からないのかもよく分かっていません。 曖昧な質問で申し訳ありませんが、こうしたらどうか?などのアドバイスをお待ちしております。 EasyBotter ver2.1.1 サーバー:@pages エディタ:Terapad FTP:FFFTP cron:My Free Web Cron Service 【】の部分を書き換えた //■■特定の人には別パターン■■ $userName = (string)$reply->user->screen_name; switch(true){ case stristr($userName, "【ユーザーID】")://【ユーザーID】と名のつくアカウント名に対して $replyPatternFile = "bot_pattern.php";//bot_pattern.phpを適用する $this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile); break; default://それ以外 $replyPatternFile = $org_repfile; //デフォルトのパターンファイル名 } と $org_repfile = $replyPatternFile; //デフォルトのファイル名を保管 は指定の場所にコピペ済みです。

  • php 外部ファイルについて

    php初心者です。 テキスト表示でランダムリンクをしたいのですが リンク先のURLとテキストを外部ファイルにしたいのです。 現在------------------------ <?php srand((double)microtime()*1000000); $ad_list1 = file("20.txt"); $ad_key1 = array_rand($ad_list1, 2); $ad1 = $ad_list1[$ad_key1[0]]; // 表示 echo "ID=$ad1"; ?> ----------------------------- ↑このphpソースを組み入れ、外部ファイル20.txtには ----------------------------- <a href="http://domain.jp/?id=111">111</a> <a href="http://domain.jp/?id=222">222</a> <a href="http://domain.jp/?id=333">333</a> ・ ・ ------------------------------ という感じでリンク先URLを1行ずつ書いています。 テキスト表示は ID=111 という感じで表示されるようにはなったのですが phpソースの中に http://domain.jp/? までを組み込んで、外部ファイルの内容を ------------------------------ 111 222 333 ・ ・ ------------------------------ とするだけで、 表示される ID=111をクリックすると http://domain.jp/?111 のページが表示されるようにするには どうすれば良いのでしょうか。 また、そういった事は可能でしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 外部テキストの一行単位での読み込み

    flashでタイピングゲームを作成しています。 問題を外部テキストファイルから一行単位で読み込み、 それを配列に保存し、ランダムで出力するという仕様です。 外部テキストファイルの読み込み方、一行単位での配列への保存がわかりません。 外部テキストファイル名 elang.txt //////////中身////////////// FOOT HAND HEAD //////////////////////////// /////////読み込みソース////////////////// i = 0; //ループ変数 elangword = new Array(); //配列 ///////////////////////////////////////// 読み込みソースはここまでしかできていません。 問題出力ソースはできています。 外部テキストファイルの中身の変更、読み込みソースの 変更をしてもかまいませんので、どなたがご教授していただけたら幸いです。 どうかよろしく御願い致します。 補足 C言語の知識はある程度あります。 /////////開発環境///////////////// windows xp sp2 Flash Mx /////////////////////////////////

  • Flashで外部ファイルの指定行のみ取り出し表示

    初心者です。 当初は、ActionScriptで外部ファイルphpを読み込み、phpの中にtxtから取り出した文字列を表示しようとしていました。 多分、これでもできると思いますが、ActionScriptからphp経由せず、直接txtから取り出せないかと思い、質問します。 ActionScriptで外部ファイル(txt)の中身の2行目だけ取り出すという方法はできるのでしょうか? <テキスト例(txt)> 花子 東京都 乙女座 このうち2行目の東京都だけ取り出すということです。 こちらの方が、phpをわざわざ挟まずにシンプルだと思いました。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • nEditというテキストエディタを改造して、自分用のテキストエディタを

    nEditというテキストエディタを改造して、自分用のテキストエディタを作ろうと考えているのですが…。 環境 OS:Windows XP 言語:C言語(bcc55) http://www.shiftup.net/ (シフトアップネット) というサイトの http://www.shiftup.jpn.org/flash/game2/ (ツクアド2) というコンテンツがあります。 子供でも簡単にブラウザ上でプログラミングができ、なお且つ簡単にゲームを公開できると言うコンテンツです。 ただ、その簡単さ故に大した機能もありません。 ファイルの分割ができない、関数と言う概念がない、マクロ定義もできない…。 そこで、ツクアド2用のテキストエディタを作成し、追加命令を作ろうと思います。 「ファイルを分割して管理し、結合する」 main.txt func0.txt , func1.txt , func2.txt という4つのファイルがあったとして、 main.txtに #include "func0.txt" (ツクアド2の言語使用ではセミコロンはコメント化なので;は使えない) #include "func1.txt" #include "func2.txt" と記述しコンパイルすると、新たにウィンドウが開いて3つのファイルを結合後のファイルを表示する。 「#enum」 #enum {A,B,C} と記述しコンパイルすると A = 0 B = 1 C = 2 に変換する などを実装したテキストエディタを作りたいです。 1からテキストエディタを作成するのにはあまりにも無知なのでオープンソースのnEditをダウンロードしてきました。 rcファイルに、コンパイル用のメニューを追加して、メッセージを受け取るところまでは作りました。 で、メッセージを受け取った後どうすればいいのかわからないんです。 正規表現を使って置換しようと思ったのですが、C言語って正規表現サポートしていないみたいです…。 そこでregex.hというライブラリを探してきて、使おうと思ったら、コンパイルエラーがでてしまいました。 どうやらstream_iteratorヘッダのtemplateという文が原因のようです。 で、よくソースを見てみるとC++のソースでしたorz .cでコンパイルできるわけもないので、.cppにファイルを変換してコンパイル…(。 したら今度はnEdit.cが驚くほど大量のエラーを履きました(C++はCの上位互換程度にしか考えてませんでしたが上手くいきませんでした。。) 流石に他人が書いたコードをcpp用にデバッグするのは厳しいです。。 なんとかする方法はないでしょうか。 他にC言語で正規表現を使えるようにする方法はありますか? それとも正規表現を使わなくても希望の動作が可能な方法はありますか?

  • PHPで複数のテキストファイルを読み込みたい

    PHPを勉強中です。 どうしても自力で解決できないので助けてください。 やりたい事は、 「複数ファイルの内容を読み込み、  それらのデータをcsvのセルに入れたい。」のです。 Aというフォルダに、複数のテキストファイルがあります。 これら各ファイルの内容をそれぞれ取得して 「○○.csv」のB列に上から順々に書き込んでいきたいのです。 Aフォルダに入っているテキストファイルは連番を想定しています。 A/ 0001.txt 0002.txt 0003.txt : フォルダに入っているテキストファイルの数はいろいろです。 3枚のフォルダもあれば100枚のフォルダもあります。 これらのファイルの内容を、それぞれ取得して 用意されているcsvファイルの特定のセルに テキストファイルの数だけ順番に入れていきたいのです。 ○○.csv A列  |  B列  |  C列  | △  |0001.txt内容|  △  | △  |0002.txt内容|  △  | △  |0003.txt内容|  △  | : : プログラムのヒントを教えていただければ嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPバージョン4.3.10で動作しない

    はじめのページでチェックボックスにチェックしてもらい、 次のページでそのチェックしたものを表示したいです。 しかし、下記のコードではPHPバージョン4.3.10ではうまく動作しませんでした。 PHPバージョン4.3.10で動作させるには、どうすればよいか教えていただけませんか? <form action="mail.php" method="post"> <input name="member[]" type="checkbox" value="AAA" checked>AAA <input name="member[]" type="checkbox" value="BBB" checked>BBB <input name="member[]" type="checkbox" value="CCC" checked>CCC <input type="submit" value="send"> </form> mail.php <?PHP if(is_array($member)){ $txt ="あなたの選んだのは"; foreach ($member as $key=>$val){ if ($key==0){ $txt .=$val; }else{ $txt .="、".$val; } } $txt.="です"; }else{ $txt="あなたは誰も選んでません"; } print $txt; ?>

    • ベストアンサー
    • PHP
  • テキストデータに関して

    お世話になっております。 PHPにてwebアプリケーションを作っており、その中でMySqlなどのDBを使用せず、保存すべきデータは、テキストファイル(.txt)を用いているのですが、URLでそのテキストファイルを直接読み込むと、当然ながらファイルの内容を読まれてしまいますが、ファイルの内容を読まれないようにする設定などはあるのでしょうか? 具体的には・・ .txtではなく、他の拡張子に変更することで、.txt同様の構造が作れるのであれば、それに越したことないが、その場合、ファイルの生成・内容書込みなどを行うPHPのソースは、単に拡張子を変更するだけで良い?また、その.txtに代わる拡張子は? .htaccessなどを用いてファイルの内容を外部から参照できなくする設定があると耳にしたことがあるが、読み書き可能としているファイル(属性606に設定)でも、.htaccessの設置は不具合はないのか? などです。これまでファイルの読み込み・書込みなどをものは作成したことが無く、お恥ずかしい質問かと思いますが、アドバイスなど頂戴できれば幸いです。 お忙しい中恐縮ですが、宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • phpでテキストファイルの特定のワードを抽出

    タイトルの通りです。 phpを使い、テキストファイルの中に書かれている文字列をhtmlに表示することはできました。 <?php //ファイルを開く //モード[r]の読み込み専用 if (! ($fp = fopen ( "list.txt", "r" ))) { echo "ファイルが開けません。"; } while (! feof ($fp)) { $load = fgets ($fp, 4096); echo $load; } ?> このような感じです。 ですが、テキストファイルの中の特定の文字(例:美しい)を抽出したいのですが、どのようにプログラムを書いて良いかわかりません。 どなたかアドバイスをお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう