したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

EasyBotter2.0その2

146名無しさん:2013/04/20(土) 20:01:43
【設置鯖名】 @PAGES
【PHPのバージョン】
【EasyBotterの改造】改造している(ID別リプライ、回数制限等)
【手動】 動く
【実行】 GAE
【実行間隔】 5分間隔
【不明点】
『つ【〇〇】』と物を貰った時に、『〇〇』が食べ物か食べ物以外かで反応を分ける時に
例えば『food.txt』を参照して、『〇〇』があるならリプライする、無いならリプライしないようにする方法はありますか?
リプライファイルに書き込んでいくのでは記述が長くなってしまうので
別ファイルを参照出来ればいいなあと思っています

147名無しさん:2013/05/24(金) 00:29:13
ver2.1.2での半自動フォロー・リムーブの記述方法についてご教授頂けないでしょうか。
上で他の方が質問されている点を参考にしているのですが上手く実装できず…。
現状以下のようになっていて リプでフォローお願いを貰ったら、フォローしましたと
返答しますが実際にはフォローできていません…。

//リプライを作る
function makeReplyTweets($replies, $replyFile, $replyPatternFile){
if(empty($this->_replyPatternData[$replyPatternFile]) && !empty($replyPatternFile)){
$this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile);
}
$replyTweets = array();

foreach($replies as $reply){
$status = "";
//指定されたリプライパターンと照合
if(!empty($this->_replyPatternData[$replyPatternFile])){
foreach($this->_replyPatternData[$replyPatternFile] as $pattern => $res){
if(preg_match("@".$pattern."@u",$reply["text"], $matches) === 1){
$status = $res[array_rand($res)];
for($i=1;$i <count($matches);$i++){
$p = "$".$i; //エスケープ?
$status = str_replace($p,$matches[$i],$status);
}
break;
}
}
}

//リプライパターンにあてはまらなかった場合はランダムに
if(empty($status) && !empty($replyFile)){
$status = $this->makeTweet($replyFile);
}
if(empty($status) || stristr($status,"[[END]]")){
continue;
}
//idなどを変換
$status = $this->convertText($status, $reply);
//フッターを追加
$status .= $this->_footer;

switch(true){
//半自動フォロー
case stristr($status, "[[AUTOFOLLOW]]"):
$status = str_replace("[[AUTOFOLLOW]]","",$status);
//$followreq = $this->consumer->sendRequest("http://api.twitter.com/1/friendships/create.json&quot;,array(&quot;screen_name&quot; => "$reply_name"),"POST");
$followreq = $this->consumer->sendRequest("https://api.twitter.com/1.1/friendships/create.json&quot;,array(&quot;screen_name&quot; => "$reply_name"),"POST");
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
break;
//半自動リムーブ
case stristr($status, "[[AUTOREMOVE]]"):
$status = str_replace("[[AUTOREMOVE]]","",$status);
$removereq = $this->consumer->sendRequest("http://api.twitter.com/1/friendships/destroy.json&quot;,array(&quot;screen_name&quot; => "$reply_name"),"POST");
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
break;
//その他
default:
//リプライ相手、リプライ元を付与
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
}

$re["in_reply_to_status_id"] = $reply["id_str"];

//応急処置
if(!stristr($status,"[[END]]")){
$replyTweets[] = $re;
}
}
return $replyTweets;
}

148名無しさん:2013/05/24(金) 01:18:35
>>147
わざわざfollowUserって関数あるわけだしautoFollowをいじって1人だけフォローもできるよう拡張して呼ぶか、
case stristr($status, "[[AUTOFOLLOW]]"):
$status = str_replace("[[AUTOFOLLOW]]","",$status);
$response = $this->followUser($reply["user"]["id"]);
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
break;
でいいのでは…。試してないから保証はしない

149148:2013/05/24(金) 01:27:50
あ、sendRequest中の$reply_nameが$reply["user"]["screen_name"]に直ってないのが原因かな

150147です:2013/05/24(金) 21:31:59
>>148 さま
>>149 さま
ご指摘ありがとうございます。
無事に動くようになりました、相談してよかったです。

151名無しさん:2013/05/26(日) 17:38:03
【設置鯖名】 @pages
【PHPのバージョン】5.2or5.3(不明)
【EasyBotterの改造】改造している(TL反応、名詞拾いetc)
【手動】 動く
【実行】 手動
【不明点】 via○○の部分を変更したく、wikiに従って独自のOAuth認証を試みていますが
     oauth_test.phpを呼び出して、URLに飛んでアプリ認証をしてから
     再度戻されたページでエラーを吐いており、AccessTokenが入手できません。
     そもそもリンク先には既にDLすべきファイルがなく、迂回して入手して行っている状態なのですが
     これは現在でも出来ることなのでしょうか?
     方法を教えていただきたいです。

     なお、現在出ているエラーは
     Could not authenticate you.
      /account/verify_credentials.xml?
     以降にconsumer_key,oauth_nonce,oauth_signature,oauth_signature_methodが羅列されています。
参照しているwikiのページ:
http://www26.atwiki.jp/easybotter_wiki/pages/19.html

ご助力いただければ幸いです。宜しくお願い致します。

152名無しさん:2013/05/27(月) 13:01:28
>>151
Twitter Developers(https://dev.twitter.com/apps)でのアプリ登録が済んでるなら、OAuth toolタブにあるキーを
そのままEasybotterのsetting.phpに書き込んだらできないですか?
私は特に別ファイルは使ってません。

153151:2013/05/28(火) 00:35:26
>>152
ありがとうございます。試したら普通にできました…。
wikiの手順を踏む必要はなかったんですね。お騒がせして申し訳ありません。

154名無しさん:2013/05/30(木) 18:00:41
【設置鯖名】 @pages
【PHPのバージョン】5.2か5.3
【EasyBotterの改造】改造している
【手動】 動く
【実行】 Free Web Cron Service
【実行間隔】 5分間隔
【不明点】
失礼致します。 特に不具合があるわけではなく、改良のため質問させていただきたいのですが、
既に反応済みのリプライやTLには反応させない、という方法はありますでしょうか?
重複リプライをしてしまう可能性を少しでも減らしたいと思いまして…。

ご回答をいただければ幸いに思います。

155名無しさん:2013/05/30(木) 21:29:38
【設置鯖名】 @pages
【PHPのバージョン】5.2or5.3
【EasyBotterの改造】改造している
【手動】 動く
【実行】 FreeWecCron
【実行間隔】 3分間隔(CRON等で定期的に実行している場合)
【不明点】
Wikiの「名詞拾い」を2.1.2で使えてる方はいらっしゃいますか?
特にエラーは出ないのですが、何度試してみても反応せず
「反応できる語がなかった時の返答」しか行いません。
あらゆる名詞を出して試したので、拾える語がなかっただけとは考えにくく、
エラーも出てない以上もしかして形態素解析が使えなくなった?とも思うのですが
何分知識が足らず判断が出来かねる状態です。
もし2.1.2で使えている方がいらっしゃればご教授願いたいですし、
Twitterの仕様変更で使えなくなったものならば削除しようと考えています。

宜しくお願い致します。

156名無しさん:2013/05/30(木) 23:31:05
>>155
普通に使えてる
でもそのまんまじゃだめだと思う
2.0系と2.1系だと記述に違うところがあるからよーくみてみて、そこを直せばいけるはず

157155:2013/05/31(金) 17:56:56
>>156
前後の記述とよーく見比べてみて、思しき箇所を修正したところ
無事に名詞拾いが出来るようになりました!
ありがとうございます!コピペするだけのbot作りから少し成長した気持ちです!

158名無しさん:2013/05/31(金) 20:40:13
横からおめでとうと言ってみる

159名無しさん:2013/06/05(水) 10:42:10
【設置鯖名】 @pages
【PHPのバージョン】5.2or5.3
【EasyBotterの改造】改造している
【手動】 動く
【実行】 FreeWecCron
【実行間隔】 3分間隔(CRON等で定期的に実行している場合)
【不明点】
試用段階では問題なく機能していたのですが、
一部テキストデータの文字コードがANSIのままだったことが発覚したため
それらをUTF-8に修正して以降リプライができなくなりました。

何もしていないときは正常な表示で、リプライとタイムライン双方監視しているかに見えるのですが
リプライを飛ばすと「3分以内のタイムラインに未反応の語はない」としか表示されません。リプも飛んできません。
変更したのはテキストデータの文字コードのみで、その他phpファイルには何も触っておらず、エラーも出ないためお手上げです。
何か原因として考えられるものはないでしょうか?どうかお力添えいただければ幸いです。

160名無しさん:2013/06/05(水) 10:46:17
159に書きそびれましたが、TL反応は通常通り機能しています。

161159-160:2013/06/05(水) 11:40:31
申し訳ありません、上記質問については自己解決いたしました。
txtファイルの文字コードがUTF-8Nでなかったことが原因のようです。
外部ツールを用いてファイル変換し再アップロードした結果動作しました。
無為にレスを消費してしまいましたことを深くお詫び申し上げます。

162名無しさん:2013/06/05(水) 13:55:31
自己解決と報告おつかれさまです。

163名無しさん:2013/06/07(金) 02:00:00
【設置鯖名】 @pages
【PHPのバージョン】5.2
【EasyBotterの改造】改造している
【手動】 動く
【実行】 FreeWecCron
【実行間隔】 3分間隔
【不明点】
Easybotterに原因があるか定かではありませんが、解決策を探しています。

Freewebcronでbot.phpを指定していますが、動作しません。
3分おきにcronがアクセスしていて、結果は200、exacもTRUEなので
問題なく繋がっているはずなのですが、ウンともスンとも言わず…。
checkから手動で叩くと動作し、定期ポストもリプライも行うのですが
自動ではまるで反応しない理由がわからず困っています。

cronも設定も間隔は3分で相違なし、エラーは何も出ていません。
cronも3分おきにアクセスが成功しているRSSがあり、エラーはないようです。
手動では動くけどcronでは動かない、cronのアクセス自体は成功している。
こういう場合に原因としては何が考えられるのでしょうか?

なお現在別botを同cronの別垢で動かしていますが、こちらは正常です。

164名無しさん:2013/06/07(金) 02:27:11
初心者スレでもFree Web Cronは鯖との相性が激しいって話がたまに出るよ
@pagesも鯖によって挙動違うから確認の意味でも一度cronを変えてみるとか

165名無しさん:2013/06/08(土) 00:45:50
>>164
うーん、やっぱりエラーどうのじゃあないんですね……。
無料cronで他にいい塩梅のものが見つからなかったので、
@pagesの方をデリートして別鯖に取り直してみたところ
マチマチではあるんですが一応動くようになりました。

ありがとうございました!

166sho:2013/06/12(水) 23:27:05
ボットが動かなくなりました。エックスサーバー使ってて、改造も何もしていません。原因わかりますか?

Twitterへの投稿に失敗しました。ユーザー名:@hogehoge

(SimpleXMLElement)#5 (1) {
["error"]=>
string(119) "The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.&quot;
}

167名無し:2013/06/12(水) 23:46:55
【設置鯖名】ロリポ
【PHPのバージョン】
【EasyBotterの改造】あり
【手動】 動く
【実行】 GAE-cron
【実行間隔】 2分間隔
【不明点】
「特定のアカウントとのリプライ回数制限」を行なっているのですが、
Warning: substr_count(): Empty substring in /home/**/**/EasyBotter.php on line 347
と表示されて機能しなくなってしまいました。
該当箇所は
$countk = substr_count($botdata2,(string)$reply["user"]["screen_name"]);
になるのですが、何か原因として考えられるものはないでしょうか?
どなたかお力添えいただければ幸いです。

168名無しさん:2013/06/13(木) 05:26:46
>>166
自分には分かりませんけど、>>1のテンプレを使うと回答者さんが推測しやすくなるので使った方がいいですよー

169名無しさん:2013/06/13(木) 07:18:46
【設置鯖名】@pages
【PHPのバージョン】2.1.2
【EasyBotterの改造】あり
【手動】 動く
【実行】 GAE-cron
【実行間隔】 5分間隔
【不明点】TL反応をID別にしようとおもいましてwikiの特定の人には別パターンのリプライを元に追加したのですが
反応してくれない。
//タイムラインへの反応を作る
function makeReplyTimelineTweets($timeline, $replyPatternFile){
if(empty($this->_replyPatternData[$replyPatternFile])){
$this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile);
}
$org_repfile = $replyPatternFile; //デフォルトのファイル名を保管
$replyTweets = array();
foreach($timeline as $tweet){
$status = "";
//指定されたリプライパターンと照合
if(!empty($this->_replyPatternData[$replyPatternFile])){

//■■特定の人には別パターン■■
$userName = (string)$reply["user"]["screen_name"];
switch(true){
case stristr($userName, "○○bot")://botと名のつくアカウント名に対して
$replyPatternFile = "reply_tlmaster_pattern.php";//bot_pattern.phpを適用する
$this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile);
break;
case $userName == "○○bot"://abcdというアカウント名に対して
$replyPatternFile = "tl_master_pattern.php";//xxx_pattern.phpを適用する
$this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile);
break;
default://それ以外
$replyPatternFile = $org_repfile; //デフォルトのパターンファイル名
}

foreach($this->_replyPatternData[$replyPatternFile] as $pattern => $res){
if(preg_match("@".$pattern."@u",$tweet["text"], $matches) === 1 && !preg_match("/\@/i",$tweet["text"])){
$status = $res[array_rand($res)];
for($i=1;$i <count($matches);$i++){
$p = "$".$i;
$status = str_replace($p,$matches[$i],$status);
}
break;
}
}
if(empty($status)){
continue;
}
//idなどを変換
$status = $this->convertText($status, $tweet);
//フッターを追加
$status .= $this->_footer;

//リプライ相手、リプライ元を付与
$rep = array();
$rep["status"] = "@".$tweet["user"]["screen_name"]." ".$status;
$rep["in_reply_to_status_id"] = $tweet["id_str"];
//応急処置
if(!stristr($status,"[[END]]")){
$replyTweets[] = $rep;
}
}
return $replyTweets;
}
いちおうリプライでは、特定の人に別パターンは出来たのですがTL反応ではうまく出来なかったので…

170148:2013/06/13(木) 09:08:51
>>166
答え出てるじゃん…
英語くらい読もうぜ

171名無しさん:2013/06/13(木) 13:47:05
【設置鯖名】 ロリポップ
【PHPのバージョン】5.2
【手動】 動く
【実行】 Cron
【不明点】
2.1.2でフォロー要請&リプライする(新API対応版)
>>147さんの質問に重なる形で申し訳ないです。
その後の>>148 さん>>149 さん
の回答を見て修正してみたのですが、コメントを発するものの、フォロー&リムーブがされません。
どなたか、教えていただけないでしょうか。

$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;

を以下に変更

switch(true){
//半自動フォロー
case stristr($status, "[[AUTOFOLLOW]]"):
$status = str_replace("[[AUTOFOLLOW]]","",$status);
$response = $this->followUser($reply["user"]["id"]);
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
break;

//半自動リムーブ
case stristr($status, "[[AUTOREMOVE]]"):
$status = str_replace("[[AUTOREMOVE]]","",$status);
$removereq = $this->followUser($reply["user"]["id"]);
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
break;

//その他
default:
$re["status"] = "@".$reply_name." ".$status;
}

172名無しさん:2013/06/14(金) 20:37:16
【設置鯖名】 @page
【PHPのバージョン】5.2
【EasyBotterの改造】改造している
【手動】 動く
【実行】 GAE-cron
【実行間隔】 5分
【不明点】 (エラーメッセージがあればコピペ推奨)
こんにちは。ご相談と確認なのですが、
APIが1.1に移動しちゃったと言うことで、
基本的なAPIは全部以降出来たんですけど、
半自動リムーブが出来ないのって、やっぱりsendRequestのURLが廃止になったからでしょうか。
それとも、別の手を使えば半自動リムーブってまだ出来るのですか?
廃止になったAPIを調べても、いまいち自分ではわかりませんでした……。
しかし、たとえ出来たとしても、やっぱり規約違反に該当しますか?
一応、下記エラー表記なんですけど、まぁURLが無いから当然だよねって感じなんですが。

//半自動リムーブ
case stristr($status, "[[AUTOREMOVE]]"):
$status = str_replace("[[AUTOREMOVE]]","",$status);
$removereq = $this->sendRequest($reply_name["user"]["id"]);
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
break;

Fatal error: Call to undefined method EasyBotter::sendRequest() in /usr/local/www/htdocs/key2/public_html/eruwin_bot/EasyBotter.php on line 315

173名無しさん:2013/06/15(土) 19:02:34
【設置鯖名】@pages
【PHPのバージョン】2.1.2
【EasyBotterの改造】あり
【手動】 動く
【実行】 GAE-cron
【実行間隔】 5分間隔
【不明点】リプライ反応が時々『Array』となってしまう。

 リプライなど普通に動いているのですが、時々『Array』という返答が帰ってきてしまいます。
 また該当語句を設定していないbotでも同じ返答が行われている状態となっています。

 ちなみに改造した個所はIDごとの呼び名を固定する、半自動フォロー&リムーブにカスタム辞書の追加となっています。

 どなたかお力添えを頂ければ幸いです

174名無しさん:2013/06/16(日) 04:17:19
回答じゃないんだけど、eclipse入れてからよくわからん構文エラーとかが減ったのでそっとお勧めしたい
DL先:ttp://mergedoc.sourceforge.jp/
使い方:ttp://www.javadrive.jp/eclipse3/
実行環境整える(PCにサーバーセッティングをする)のが面倒でやって無いけど、@ページのサーバー関係で躓いてる人は試してみる価値あるんじゃないかと
鯖の問題なのか構文の問題なのか切り分けるのがすごく簡単
(実際鯖引っ越しをした後、顕著に出るエラーというのはあった、@ページじゃないけど)

175名無しさん:2013/06/18(火) 00:58:38
初心者スレ4から参りました。
686です。

【設置鯖名】 @PAGES
【PHPのバージョン】http://ruzyus.blog136.fc2.com/blog-entry-28.html
【EasyBotterの改造】一部改造
【手動】 動く
【実行】 手動
【CRON】 使っていない
【不明点】 リプライに反応しない

botにニックネーム機能を実装させたくて、こちらのソースを利用させていただきました。
(好感度機能と診断は不要ですが)
http://ruzyus.blog136.fc2.com/blog-entry-28.html

ひとまず何もいじらずにUPしたところ、

"The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.&quot;

というエラーが出てしまったので、APIを叩く末尾のソースを元のEasyBotterからコピペして修正したところ、
通常POSTはできるようになりましたが、リプライを送っても反応がありません。
TLにも反応していないようです。

元のEasyBotter本体のままUPすると通常通りリプライに反応してくれます。

ソース置き場になっているブログは作成者の方は見ていないのか、
ずっと更新が無いようでしたのでこちらに書かせていただきました。

過去ログを調べて上記botに関する記述でリプライに関する記事は見つけられませんでした。
元のEasyBotter.phpにニックネームに関する記述だけコピペしたり、
上記botのソースに、EasyBotter本体からリプライに関する記述を見比べたりしてみましたが
どうしても上手くいきません。

末尾のAPIを叩く命令以外は変更していません。原因がわからず困っています。
PHPをイチから勉強しないと解決できないでしょうか…。

176名無しさん:2013/06/18(火) 11:03:18
>175
前のスレちやんと見た?
PHPかわかってないなら改造しない事。
調べればすぐわかる事につまづいてるだけでしょ。

177名無しさん:2013/06/18(火) 14:35:53
【設置鯖名】 @pages 【PHPのバージョン】5.2 【Easybotterのバージョン】 2.1.2
【EasyBotterの改造】改造している
【実行】 GAE-CRON
【実行間隔】 3分間隔(CRON等で定期的に実行している場合)
【不明点】 (エラーメッセージがあればコピペ推奨)

参考1 http://hane.ciao.jp/medamayaki1/bot/memo14_iconname
参考2 http://d.hatena.ne.jp/bardothodol/20100526

このサイトを参考にして、半自動フォローを改造したリプライによるアイコン変更を目指しています。
icon.phpを手動で動かすと無事アイコンが変わるようになったのですが、
リプライで出来るようにしようとEasybotter.phpを以下に書き換え話しかけると、
bot.phpが真っ白になり、他のリプライにも反応しなくなりました。

//リプライ相手、リプライ元を付与
//$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
//■■アイコンをリプライで変更■■
// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
switch(true){
//ONE
case stristr($status, "[[ONE]]"):
$status = str_replace("[[ONE]]","",$status);
$onereq = $to->OAuthRequestImage('https://api.twitter.com/1.1/account/update_profile_image.json',&quot;POST&quot;,array('image' => '@one.jpg'));
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
break;

//TWO
case stristr($status, "[[TWO]]"):
$status = str_replace("[[TWO]]","",$status);
$tworeq = $to->OAuthRequestImage('https://api.twitter.com/1.1/account/update_profile_image.json',&quot;POST&quot;,array('image' => '@two.jpg'));
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
break;

//その他
default:
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
}
//ここまで


//reply_pattern.php
$data = array(
"ONE"=> array(
"[[ONE]]アイコンを変更しました"
),
"TWO"=> array(
"[[TWO]]アイコンを変更したよ"
),*/

他のアイコンを変更するやり方に参考1の「リプライで占い」がありますが、
この場合別のファイルを作ればいいのか、reply_pattern.phpに書けばいいのかわからず…
併せてご指導のほどよろしくおねがいいたします。

178名無しさん:2013/06/18(火) 19:28:03
▼質問テンプレ
【設置鯖名】 @pages
【PHPのバージョン】2.1.2
【EasyBotterの改造】改造している
【手動】 動く(ただしエラー)
【実行】手動で試行中
【不明点】
1.実行するとエラーメッセージ Warning: Invalid argument supplied for foreach() in〜 が出る
2.リプライはしているが、ユーザー名が入っていない
例 @ こんにちは!

最新バージョンにしてから
1.ID別設定
2.特定のリプライ反応をリプライではなくTL発言にする
という改造をした結果、上記の問題が発生しました。
エラーメッセージの該当箇所は
foreach($this->_replyPatternData[$replyPatternFile] as $pattern => $res){
の部分を指しており、ID別設定の追記箇所直前です。

解決方法もしくは必要な情報がないなどなんでも結構ですのでご教授願います。

179178:2013/06/18(火) 19:55:11
エラーメッセージの方は単純なミスでした、すみません。
あと、ユーザー名ではなくユーザーIDの間違いです。

180名無しさん:2013/06/18(火) 22:04:52
>>176

調べてもわからなかったので書き込んだ次第ですが、
PHPわからない事にはどうにもならないということですね。

出直します。すみません。

181名無しさん:2013/06/18(火) 23:22:21
>>177
"[[ONE]]アイコンを変更しました"
"[[TWO]]アイコンを変更したよ"
の最後に,が抜けてるんじゃないでしょうか。

182名無しさん:2013/06/21(金) 01:52:40
【設置鯖名】 レン鯖名:coreserver.jp
【PHPのバージョン】5.2.5
【EasyBotterの改造】改造している
【手動】 動く/動かない(以下に説明)
【実行】 CRON:付属
【実行間隔】 60分間隔(CRON等で定期的に実行している場合)
【不明点】 (エラーメッセージがあればコピペ推奨)

質問1:EasyBotter2.1.2にて名詞拾いを行いたいけれど、このままだと、言葉の中に名詞が無い場合の単語だけがセットされる。当然$apiKeyは取得した任意の英数字が入っています。下のやり方では違うのでしょうか?
質問2:リプライから名詞を拾うのではなく、タイムラインの名詞を拾うやり方を教えて欲しい。

//■■ここから名詞拾い■■
if(strpos($text,"{ran_meishi}") !== FALSE && !empty($reply)){
//アプリケーションID
$apiKey = "***********************";
$apitweet = preg_replace("@\.?\@[a-zA-Z0-9-_]+\s@u","",$reply["text"]);
$apiurl = "http://jlp.yahooapis.jp/MAService/V1/parse?appid=&quot;.$apiKey.&quot;&amp;filter=9&amp;sentence=&quot;.$apitweet;
$apirss = file_get_contents($apiurl);
$apixml = simplexml_load_string($apirss);
//配列「meishi」を作る
$meishi = array();
// 特定の単語、指定字数以下の名詞を弾きながら配列に名詞を追加
foreach($apixml["ma_result"]["word_list"]["word"] as $apiitem)
{
//拾いたくない単語
if ((ereg("ダタラ|モスマン|モコイ", $apiitem["surface"])==False) && (mb_strlen($apiitem["surface"]) > 3*2)){
$meishi[]=$apiitem["surface"];
}
}
//リプライの中に名詞がない場合の単語をセット(複数設定可)
if ($meishi[0] == ""){$meishi = array("<censored>","×××","■■■");}
//名詞をランダムに選ぶ
$ran_meishi = $meishi[array_rand($meishi)];
//名詞を変換する
$text = ereg_replace("{ran_meishi}", "$ran_meishi", $text);
}

183名無しさん:2013/06/21(金) 04:55:26
>>182
私も同じ所でつまづいてるのでぜひヒントだけでも教えてもらいたい…
②は自分なりに書き換えてみたら最初の一行と$apitweetの部分を変えたら拾う所まではできました。
$apitweet = $this->getRandomTweet();
$apiurl = "http://jlp.yahooapis.jp/MAService/V1/parse?appid=&quot;.$apiKey.&quot;&amp;filter=9&amp;sentence=&quot;.$apitweet["text"];
↑こんな感じに
何度も実行すると1/5くらいの確立でちゃんとTLから名詞を拾ってpostしてくれる事があるのが謎すぎる…

184名無しさん:2013/06/21(金) 12:47:40
初心者スレにて質問させて頂きました>>691です。
改造関連の質問でしたのでこちらに再投稿させて頂きます。


【設置鯖名】 ロリポ
【PHPのバージョン】5.3
【EasyBotterの改造】改造している
【手動】 動く
【実行】ロリポのcronにて5分間隔
【不明点】学習機能について


botに学習機能を実装したくてhttp://tabmanual.blog.fc2.com/blog-entry-9.htmlこちらの構文を参考にさせて頂きました。

例)食べ物→バナナ

とリプライを送るとテキストファイルにバナナを書き込み、お腹すいたのリプに【バナナ】どうぞと言う所までは成功しました。
しかし、食べ物→バナナ、食べ物→リンゴ、食べ物→パン、など、単語を増やして行くと、【バナナリンゴパン】どうぞ、と、
全ての単語を続けて出してきます。
1個1個出させるにはどうしたらいいのでしょうか・・・。


if(strpos($text,"{food}") !== FALSE){
$txtfile = file_get_contents("food.txt");
$txtarray = explode("\n",$txtfile);
$wl = $txtarray[array_rand($txtarray)];
$text = str_replace("{food}",$wl,$text);
}


食べ物→に反応してfood.txtに単語を辞書に登録
if(strpos($reply["text"], "食べ物→") !== FALSE){
$myFile = "food.txt";
$fo = fopen($myFile, 'a') or die("can't open file");
$cl = preg_replace("@\.?\@[a-zA-Z0-9-_]+\s@u","",$reply["text"]);
$cl2 = str_replace("食べ物→","",$cl);
$stringData = $cl2;
$stringData .= "\n";
fwrite($fo, $stringData);
fclose($fo);
}


この様なソースを使用しております。

また、@●●bot お腹すいた→ @XXXX 【バナナ】どうぞ
と言うリプライでのやりとりではなく、定期ポストにて【バナナ】食べたいなぁ、と呟かせたいのですが、
data.txt内に{food}食べたいなぁ、と入れても【空白】食べたいなぁ、としかツイートしません。
data.txt内には{food}は使えないのでしょうか?

自分なりに色々探してみましたが、探し方がよくないのか求めるものに辿り着けずこちらに駆け込みました。
どうかご指南の程宜しくお願いします。

185名無しさん:2013/06/21(金) 14:34:29
>>184です。

単語を繋げて出す部分は自己解決致しました。
とても単純な事でした;スレ消費申し訳ありません。

引き続き、

また、@●●bot お腹すいた→ @XXXX 【バナナ】どうぞ
と言うリプライでのやりとりではなく、定期ポストにて【バナナ】食べたいなぁ、と呟かせたいのですが、
data.txt内に{food}食べたいなぁ、と入れても【空白】食べたいなぁ、としかツイートしません。
data.txt内には{food}は使えないのでしょうか?

の方は未だ解決出来ず・・・。
どうかご享受願います、宜しくお願いします。

186名無しさん:2013/06/21(金) 17:31:57
ん?使えるはずですよ。

187178:2013/06/21(金) 17:46:42
解決しました。
スレ消費申し訳ありません。
どうやら[[TLH]]を使った『特定のリプライ反応をリプライではなくTL発言にする』ための記述を誤っていたようです。
訂正後を一応書いて置きます。

(※TLへの反応をTL発言にするための記述です。もし重大なミスがあれば指摘お願いします)

$rep["status"] = "@".$tweet["user"]["screen_name"]." ".$status;

switch(true){
//リプライ反応をTLに発言
case stristr($status, "[[TLH]]"):
$status = str_replace("[[TLH]]","",$status);
$rep["status"] = $status;
$rpid = (string)$reply->id;
file_put_contents($this->_logDataFile,$rpid);
break;
//その他
default:
$rep["status"] = "@".$reply["user"]["screen_name"]." ".$status;
}

188178:2013/06/21(金) 23:07:26
重ね重ねすみません……
ミスったままの部分があったので>>187の訂正をします

$rep["status"] = "@".$tweet["user"]["screen_name"]." ".$status;

switch(true){
//リプライ反応をTLに発言
case stristr($status, "[[TLH]]"):
$status = str_replace("[[TLH]]","",$status);
$rep["status"] = $status;
$rpid = (string)$reply->id;
file_put_contents($this->_logDataFile,$rpid);
break;
//その他
default:
$rep["status"] = "@".$tweet["user"]["screen_name"]." ".$status;
}

本当に失礼しました。

189名無しさん:2013/06/22(土) 01:10:59
>>185です。

>>186
今またテストしてみたら1回だけ空白ツイートをしましたが、後は普通に{food}の部分もツイート出来ました!
ここに書き込む前は何度テストしても空白だったのに・・・。

たいした事のない質問で数レス無駄に消費してしまって申し訳ありませんでした。
ヒントを下さった>>186さん、ありがとうございました!

190名無しさん:2013/06/22(土) 21:06:52
>>182-183
同じ所で引っかかっています。

1行目って
&& !empty($reply)の部分を削除するんですか?
それとも $reply の部分を違う文字にするのですか?
成功した状態を教えて欲しいです。

191名無しさん:2013/06/23(日) 01:02:39
>>182-183
ものすごく基本的なところで引っかかってるんですが、それってxmlで読み出してるってオチはないっすよね?
いや、xmlとか無関係なら私の方がお門違いになりそうですが……。

192名無しさん:2013/06/23(日) 01:16:08
【設置鯖名】 ロリポ
【PHPのバージョン】
【EasyBotterの改造】改造していない
【手動】 動く
【実行】 ロリポcron
【実行間隔】 10分間隔
【不明点】自動フォロー返し時にリプライを送りたい

初心者スレと迷ったのですが、改造系なのでこっちへ来ました。
まず新APIの関係でbotが停止していたので、バージョン2.1.2にアプデしたら、
今まで使えてたフォロー返し時リプ返しが使えなくなりました。
不具合が怖かったのでアプデしてからはまだ何も手を付けてません。
今まで非公式wikiの「自動フォロー返しした時にリプライで知らせたい」に
リプ台詞のバリエーションを増やした形で問題なく動作してましたが、
easybotter.php内の記述がだいぶ変わってしまったのと、
当然ですが旧版の自動フォロ返のくだりだけ持ってきて置き換えても無反応でした。
探しても解決法が見当たらなかったので質問させて頂きました。
とりあえず今はphp未改造のまま自動フォロー返しONになってるだけです。

wikiの米欄でも質問されてましたが、私の見落としの場合は誘導ヒントを頂ければと思います。
お手数お掛けしますがご検討宜しくお願いします。

193名無しさん:2013/06/23(日) 14:40:17
>>187-188
どちらも同じミスがありますね。
$rpidの定義書式は現在のEasyBotterでは使えません。
また、ログファイルの記録もそれでは記録されません。

ttp://d.hatena.ne.jp/zabi/20130322#1363943075
↑にやり方が書いてありましたので参考に。

194Ash:2013/06/24(月) 20:42:24
書き込む場所を間違え、マルチポストになって申し訳ありません。

【バージョン】 Ver.2.1.2
【設置鯖名】 lolipop
【PHPのバージョン】 5.2
【手動】 動く
【実行】 CRON鯖名/lolipop
【実行間隔】 60分間隔(CRON等で定期的に実行している場合)
【不明点】 深夜など指定の時間にはpostしないように設定したく
『bot.phpを実行したときに〜』の上に下記の様な記述を試したのですが、
上手く動作しません。

if(date("G") > 15 || date("G") < 1){
$response = $eb->postRandom("data.txt");
}
cronの設定をbotを呼び出したい16時から、60分毎に呼び出してるせいかと思い、
16時のみ呼び出す設定にした所、その時間一回きりの実行になってしまいました。

何か方法がありましたら、宜しくお願いします。

195名無しさん:2013/06/24(月) 22:10:35
>>194
うちのbotでは

//用意したデータをランダムにポストしたい
//1時から6時台までは睡眠
if(date("G") > 0 && date("G") < 7){
$response = $eb->postRotation("zzz.txt");
//他はしゃべる
}else{
$response = $eb->postRandom("data.txt");
}

こんな感じにして、zzz.txt に何もデータを入れないファイルを作りました。
そしたら夜中は黙っていますよ。

196Ash:2013/06/25(火) 01:17:26
>>195 さん ありがとうございます!早速試してみます!!

197名無しさん:2013/06/26(水) 02:08:17
>>191
レスありがとうございます!!
一瞬思ったのですが、ツイート抜き出して解析する所まではできているので大丈夫なのかなと…
エラー文を読むに
>特定の単語、指定字数以下の名詞を弾きながら配列に名詞を追加
の所でつまづいているっぽいと思っていました。そのforeach配列になってないよ的な事を毎回言われます。
yahooのページにもxmlのurlしか載ってないしそこが間違ってるならさらに混乱…
色々いじったらエラー文すら吐き出さなくなってもうどうすればいいのか

198名無しさん:2013/06/26(水) 21:10:32
>>197
横からだけど名前欄に書き込み番号入れたほうがいいですよ
yahooのページ見てるんですね、そこで必須とされているパラメータが抜けてないか確認してますか?

199名無しさん:2013/06/27(木) 19:55:34
http://jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1319035690/700
>>192
自動フォロー返しした時にリプライで知らせたい
http://www26.atwiki.jp/easybotter_wiki/pages/26.html#id_04ff8ffe
↑をバージョン2.1.2に対応させたいのですね

このスレで同じページの半自動フォローについて質問してる人が何人かいるので
このスレで悪戦苦闘しているソースとwikiを見比べれば
自ずとどんな風に改造したらいいか分かってくると思いますよ

200名無しさん:2013/06/28(金) 00:43:46
>>194
if(date("G") <= 8 || date("G") >= 18){
$response = $eb->replyTimeline(6,"reply_timeline.php");
$response = $eb->autoFollow();
}
夜行性設定のうちの子 (日中の寝ている時間:8時〜18時はTL反応やフォローをしない)
はこう書いてる
実行間隔はCRONの設定を直しなはれ
else文はなくても死なない
/* と */の間に挟まれた文章と、頭に//が付いた文章はコメント扱いされて認識しないので念のため

201192:2013/06/28(金) 01:47:04
>>199
レスありがとうございます!
回りくどい説明になってしまってましたが、まさにそれでした。
そしてアドバイスを頂けてとてもありがたいのですが、
初心者のため色々見比べてみても何が何やらで、自力改造は難しかったです。
わざわざご回答下さったのにすみません…

202名無しさん:2013/06/29(土) 18:33:05
【設置鯖名】 ロリポップ
【PHPのバージョン】2.1.2
【EasyBotterの改造】改造している
【手動】 動く
【実行】 GAE
【実行間隔】 3分間隔
【不明点】
API1.1移行に伴い、つい先日バージョンアップしました。
以前のバージョンの際、botへのTL反応しないよう改造していて、
今回も同様に改造を試みたのですが、うまく行きません。
下記の書き方では間違っているのでしょうか?
申し訳ありませんが、何卒ご教授いただけますようお願い致します。

//取得したつぶやきを条件で絞る
function selectTweets($tweets){
$tweets2 = array();
foreach($tweets as $tweet){
//自分自身のつぶやきを除外する
if($this->_screen_name == $tweet["user"]["screen_name"]){
continue;
}
//■■botを除外■■
if($this->_screen_name == $replyName || preg_match("@bot@i",$replyName)){
continue;
}
//RT, QTを除外する
if(strpos($tweet["text"],"RT") != FALSE || strpos($tweet["text"],"QT") != FALSE){
continue;
}
$tweets2[] = $tweet;
}
return $tweets2;
}

203202:2013/06/29(土) 18:36:19
申し訳ありません、上記の【PHPバージョン】は5.2です

204名無しさん:2013/06/29(土) 21:25:43
>>202
そもそも「$replyName」という変数が先に定義されていないのが原因です。
現在のバージョンでそれがどのように書かれているかを前のバージョンと見比べれば分かるはずなので、そこを書き換えてみてください。

205202:2013/06/29(土) 22:48:23
>>204
ありがとうございます。
見比べてみたのですが、「$replyName」の部分を「$reply["user"]["name"]」に
変更すればよろしいのでしょうか。
不明な点が多く、正直困っております。続けてご教授願えましたら幸いです。

206名無しさん:2013/07/01(月) 07:56:41
>>202
なぜテストしてみないの?
もしかしてとは思うけど、ローカルテストやってない環境なの?

207名無しさん:2013/07/02(火) 01:43:22
>>206
現在、私自身が多忙でbotに触れず、人に代行してやってもらっている状態なのです。
もう少ししたら解放されるのですが、早めに処置したいので…

208名無しさん:2013/07/02(火) 18:41:42
結局のとこ管理すら人にしてもらって、欲しい機能の改造も人に投げちゃうんだ?
理由にかかわらず自力で出来ないものを早めに処置したいって…感じ悪いよ

209名無しさん:2013/07/02(火) 19:47:49
うーん。ちょっと言い過ぎでは?

210名無しさん:2013/07/02(火) 20:05:38
>>207
もう少ししたら自分でテストできるのですね?
ならば簡単な応急処置してもらうだけにして、改造の手直しは自分で…というのはいかがですか?

●bot.phpのreplyTimelineをコメントアウト。「TL反応はお休みします」とアナウンスしてもらう
●もしくは、TLのreply_pattern.phpを他botに反応してしまうTL反応をコメントアウトしてもらう。

211204:2013/07/05(金) 15:52:57
人に頼るのは別に悪いことじゃないと思うのですが、基本的に「自分で管理をする」前提でやると認識していたので、>>207の状況であれば>>210の意見に同意します。
代行はあくまで代行であって、その人に任せてしまっていてはせっかく作ったbotなのに誰が管理しているのか分からなくなると思いますので。

212202:2013/07/05(金) 16:49:52
202です。>>210さんから言われた通り、現在はTL反応をお休みさせてもらっています。
自分で対応できる状況になるまではこのままで行き、
時間ができたら自力で頑張ります。
ここには書き込まないようにしますのでご安心下さい。
スレ汚し失礼&ご迷惑をおかけしました。
>>204さん、>>210さん、ありがとうございました。

213名無しさん:2013/07/05(金) 22:44:09
今度ツイッターが自動フォローを禁止にする話が出ていますが
もしEasybotterで自動フォローを切るとしたらbot.phpのフォローの記述をなくすだけで大丈夫でしょうか
他に改造なども必要になりますか?

214名無しさん:2013/07/06(土) 14:24:55
自分で試せばすむ話だと思います
ここはコピペしてる人ばかりなのかね
少しは勉強しましょう

215名無しさん:2013/07/06(土) 18:53:25
【設置鯖名】 @pages
【PHPのバージョン】
【EasyBotterの改造】改造している
【手動】 動く
【実行】 GAE
【実行間隔】 5分間隔
【不明点】
{name}を使ってリプライを行う際、一人のフォロワーに対して違う名前を呼んでしまう。
同じ反応発言を探して比較したところ他のフォロワーにはきちんとユーザー名で会話していました。
特に難しい漢字を使用してる方でもなければ改名したわけでもないのでバグか何かと考えておりますが、
同じ現象の方はいらっしゃるでしょうか?

216名無しさん:2013/07/06(土) 23:19:09
プログラムはプログラムした通りにしか動かないよ

217名無しさん:2013/07/07(日) 10:54:34
>>215
「違う名前」とは具体的にどういうことでしょうか
具体的に書いたほうがいいと思います

・おおむね合ってるが一部の文字が間違い、化けている
・名前の数文字が欠けている、逆によけいな文字がついている
・別の人の名前を呼んでいる
・まったく関係ない名前を呼んでいる
・ユーザー名でなくIDで読んでいる
等々

218215:2013/07/07(日) 19:45:14
フォロワーを違う名で呼んでしまうと相談した215です。
説明不足、勉強不足で申し訳ありません。

相手の名前は漢字三文字なのですが、全く違う一文字(調べたところ異体字と検索結果が出ました)、関係ない名前を呼んでいます。
twitterのユーザー検索で該当する人がいたもののbotとは無関係です。

例えば「{name}、おはよう」と設定しているものを発動する時、
ポンデ獣さんに対して→「ポンデ獣、おはよう」
帽子虫さんに対して→「佛、おはよう」
となっています。

219名無しさん:2013/07/08(月) 17:34:14
>>215
改造している部分がどこなのかによって引っかかるところが違う感じがします。
名前変更に関連する部分(具体的には文章変換のconvertText)に改造を施しているのであればそこの辺りの可能性も否定できませんが……。

220215:2013/07/10(水) 00:34:37
>>219
レスが遅くなってすみません。
改造している部分は、特定のIDに対してリプライ除外と会話logを作成、そしてpost重複回避です。
初期に設定したものなので該当フォロワーをフォローする前から改造しています。
また、フォローし始めた頃はこのような事が起きておりませんでした。
名前の置換等は弄っていません。

221名無しさん:2013/07/11(木) 11:09:38
>>220
とりあえずやれそうなのは無改造の状態での確認を起点として、
それぞれ改造した部分を一つずつ戻す方法で見るのが確実かも知れません。
他の人でも発生する可能性があるなら文字のエンコード関連も考えられますが、
どうもそうではなさそうなので……。
ただ、一度サーバにあるファイルをチェックするのも手かもしれません。

222名無しさん:2013/07/11(木) 21:58:03
【設置鯖名】 ロリポ
【PHPのバージョン】5.3
【EasyBotterの改造】改造している
【手動】 動く
【実行】 ロリポ/自動更新
【実行間隔】 5分間隔
【不明点】{following_name}について


定期ポスト時にフォロワーさんの中からランダムで名前を拾ってつぶやかせています。
例えばA子、B子、C子、D子、とフォロワーさんがいる場合、B子だけは名前を拾わないようにすると言う事は可能でしょうか?

Ver.2.1で使えなくなっていた{following_name}を使えるようにする構文はこちらを参考にさせて頂いてます。
http://blog.teruterubouzu.net/net-mac/2076

色々探してみましたが、探し方が悪いのか見つける事が出来ませんでした。
もし可能であればどのようにすればよいか等、ご指南頂けると嬉しいです。
宜しくお願い致します。

223215:2013/07/12(金) 17:02:14
>>221
アドバイス頂きありがとうございます。
少しずつ弄って様子をみていたものの、221さんの仰るように思い切ってゼロから見直そうと思います。
単純ミスだといいのですが……助言下さいました皆様ありがとうございました。

224名無しさん:2013/07/13(土) 23:27:31
【設置鯖名】ロリポップ
【PHPのバージョン】5.3
【EasyBotterの改造】改造している
【手動】 動く
【実行】 ロリポップ/自動更新
【実行間隔】 5分間隔
【不明点】[[END]]が機能しない

 昨日まで普通にbot同士の会話ができていたのですが、今日になって突然[[END]]が効かなくなってしまいました。何か考えられる原因があったら教えていただけないでしょうか。どうぞよろしくお願い致します。

225名無しさん:2013/07/14(日) 00:31:59
それだけじゃ判断しようがないな
エラーログを生成させる設定(サーバー側PHP.iniにそういう機能がある)に変えて、エラーログをググってみた方が解決速いと思うよ

226名無しさん:2013/07/14(日) 12:24:35
>>225
ありがとうございます。
結局何が原因なのかはわからなかったのですが、教えていただいたいようにエラーログを見て色々試していたら直ったようです。
しばらく様子を見ようと思います。

227名無しさん:2013/07/15(月) 13:38:07
【設置鯖名】 @pages
【PHPのバージョン】5.2
【EasyBotterの改造】 改造している
【手動】 動く
【実行】 GAE(python)
【実行間隔】 3分間隔
【不明点】

リプライ・タイムラインの反応をID別に設定しています。
EasyBotter 非公式wikiのコード(http://www26.atwiki.jp/easybotter_wiki/pages/37.html)をベースに改造しているのですが、
タイムラインの反応に関して、botがIDを間違えることが多発しております。
例えば、限定したIDの方へのリプライパターンなのに、それ以外の人へもそのリプライしてしまう等。
コードを見た限りでは間違いはないと思うのですが・・・
ちゃんと動くには動くのですが、人違いが多すぎて、困ります。
もし、同じような症状の方で、解決した方がいらっしゃったら方法をご教授願います。

228名無しさん:2013/07/15(月) 18:48:07
switch(true){} 以下の文見てみないとわからないけど、正規表現をもし使ってるのだったら
http://okumocchi.jp/php/re.php 正規表現チェッカーがあるので試してみて

229227:2013/07/15(月) 22:29:44
>>228さん、回答ありがとうございます。
正規表現は使用しておりません。
確かに、言葉だけでは説明しづらいので、コードを掲載してご指摘をしていただく形の方がよろしいですね。

一部を伏せながらコードを掲載したいと思います。

以下、コードです。



//■■特定の人には別パターン■■
$userName = (string)$tweet["user"]["screen_name"];
for ($i = 0; $i < count($this->_replyUserData); $i++) {
if ($userName == $this->_replyUserData[$i]) {
break;
}
}
if ($i < count($this->_replyUserData)) {
switch($i){
case 0:
if ($userName == $this->_replyUserData[0]) {
$replyPatternFile = "A.php";
break;
}
continue 2;
case 1:
if ($userName == $this->_replyUserData[1]) {
$replyPatternFile = "B.php";
break;
}
continue 2;
case 2:
if ($userName == $this->_replyUserData[2]) {
$replyPatternFile = "C.php";
break;
}
continue 2;
case 3:
if ($userName == $this->_replyUserData[3]) {
$replyPatternFile = "D.php";
break;
}
continue 2;
case 4:
if ($userName == $this->_replyUserData[4]) {
$replyPatternFile = "E.php";
break;
}
continue 2;
default://それ以外
break;
}
$this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile);
}



※$this->_replyUserDataは配列、EasyBotterクラスのグローバル変数として定義し、コンストラクタで値(特定の反応をさせたいID)を格納しています。
※caseの中の、if文判定は、もし間違っていた場合もう一度最初から処理しなおすという意味で入れていましたが、結局変わらずでした…

ベースから大分改造を加えているので、もしかしたらそれで不具合が生まれたのかもしれません…
では、プログラムがわかる方、良かったらご指摘お願いします。

230名無しさん:2013/07/16(火) 22:33:34
break文の後のcontinue 2;は機能しようがないから正常動作しないんじゃない
breakを全部コメントアウトしてチェックしてみそ

改造したいならもっと知識を蓄えた方が良さげ

231名無しさん:2013/07/20(土) 02:45:02
こんばんは、簡単じゃない〜さんのアイコンチェンジ方法と
リプライによるアイコンチェンジを併用できないかと考えて
AUTOFOLLOWの書き換えを行ってこのような形にしました。

//アイコンチェンジ
switch(true){
case stristr($status, "[[CHANGE]]"):
$status = str_replace("[[CHANGE]]","",$status);
$iconreq = $this->consumer->sendRequest3('https://api.twitter.com/1.1/account/update_profile_image.json', null, "POST", array('image' => 'img1.jpg','mime' => 'image/jpeg'));
$re["status"] = "@".$reply["user"]["screen_name"]." ".$status;
break;

このような記述をして、実践してみたのですが、[[CHANGE]]を含んだ返答をするのみで、
アイコンチェンジはできませんでした。
ttp://pro10.sakura.ne.jp/tree/index.php?all=417
の掲示板にあるやり方でないとやはりリプライによるアイコンチェンジはできないのでしょうか?

※定期ツイートによるアイコン変更はできています。

どなたかお知恵を貸してくださいますと幸いです、よろしくお願い致します。

232231:2013/07/20(土) 02:46:34
申し訳ございません、こちらを描きそびれました。

【設置鯖名】 @pages
【PHPのバージョン】5.2
【EasyBotterの改造】 改造している
【手動】 動く
【実行】 GAE(python)
【実行間隔】 3分間隔
【不明点】
リプライによるアイコンチェンジができない

233名無しさん:2013/08/14(水) 13:50:31
>>231
case stristr($status, "[[CHANGE]]"):
の最後がコロンになってるのが原因ではないでしょうか?
後、リプライによるアイコンチェンジは
http://hane.ciao.jp/medamayaki1/bot/memo14_iconname
こちらにやり方が載っております。

234231:2013/08/22(木) 16:53:49
>>233

お返事が遅れて申し訳ございません、
あの後サーバーを変えてみたところ前回の記述でうまくいきました。
御手数をおかけいたしました。
ご返答ありがとうございます!

235名無しさん:2013/08/24(土) 22:54:26
http://xvideos697.blog.fc2.com/

236キャノン インク bc310:2013/08/28(水) 22:51:46
一方面,我*当充分*到国*<a href="http://we7ei4yazk.d4vid.com" title="canon mp640 インク">canon mp640 インク</a>*人的勇气与决心。 昨年は総選挙のため、実施できなかったため2年ぶりに開催想定は29日午前9時に町田市北部を震源とした大規模な<a href="http://dn8cn0db2b.d4vid.com" title="ダイソー インク エプソン">ダイソー DBE27C120BC21EDF803E176AC4C03F53 インク エプソン</a>が発生し、<a href="http://9l287i3y6.d4vid.com" title="モンスターズインク グッズ">モンスターズインク グッズ</a>規模はマグニチュード71、震源地から半径20km以内では震度67が観測されたメイン会場では、市民が参加体験できる体験型訓練コーナー(初期消火、煙震度体験、炊き出し、応急手当、はしご車乗車体験ほか)や防災意識の啓発、情報提供(耐震診断PR、家具転倒防止器具、非常食備蓄品ほか)など防災フェアを実施する。 キャノン インク bc310 http://ts4zfy0b2.d4vid.com

237プリンター 詰め替えインク:2013/08/31(土) 00:04:53
<a href="http://l6rcn9v9ec.d4vid.com" title="canon PIXUS mp493 インク">canon PIXUS mp493 インク</a>が起きるのはステイタスの高さを示しているフィギュアショップに行けば、スクウェアエニックスの「ファイナルファンタジー」のキャラクターやモンスターを見かけるし、先日カナダの書店によったときには、セガの「ソニック」のアメコミが、本屋で最も目立つところに置かれていた。 13レプリカユニフォーム☆ベビー☆<a href="http://mhk9doeslt.d4v DBE27C120BC21EDF803E176AC4C03F53 id.com" title="ブラザー 補充インク">ブラザー 補充インク</a>公式ホーム0〜3歳アンブロ ロングダウンコート 商品詳細:定番のロングダウンコート。 プリンター 詰め替えインク http://xoejz3mhe.d4vid.com

238名無しさん:2013/09/02(月) 10:25:29
【設置鯖名】 自宅鯖
【PHPのバージョン】5以上
【EasyBotterの改造】改造していない
【手動】 定期及びランダムではつぶやくが、リプライには反応せず何もつぶやかない
【実行】 手動
【実行間隔】 ●分間隔(CRON等で定期的に実行している場合)
【不明点】 (エラーメッセージがあればコピペ推奨)
通常およびランダムでは普通につぶやけますが、リプライやTLに反応しません。なお、bot.phpを実行すると
PHP Notice: Undefined index: errors in <EasyBotter.phpのファイルパス>on line 534
100分以内のタイムラインに未反応のキーワードはないみたいです
というメッセージが表示されます。
数日いろいろ試してみましたがうまくいかず、教えていただけないでしょうか。

239名無しさん:2013/09/02(月) 14:41:53
238番解決しました。汚して申し訳有りませんでした

240ugg boots online:2013/09/24(火) 21:56:02
Quality posts is the key to attract the viewers to pay a visit the web site, that’s what this website is providing.
ugg boots online http://libreriaastarte.com/ugg-boots-online.html

241uggs outlets:2013/09/25(水) 08:18:40
Of course high resolution film quality consists of much memory, that’s why it presents enhanced feature.
uggs outlets http://pharmamarusa.com/uggs-outlets.html

242モンクレール 新作 メンズ:2013/10/29(火) 08:26:29
Consequently, increasingly, they kept clear regarding Ian, knowing that if they dared to broach problems (particularly insoluble people!) they would incur his / her wrath. It didn take Ian prolonged to realise that his or her direct reports were failing to supply results and he became exceedingly frustrated regarding the lack of progress. Naturally he remonstrated with them, explaining over and around again the importance regarding proposing solutions. what you paid with regard to to spot challenges and also produce SOLUTIONS! But it was in order to no avail. The more Ian fretted, the more his direct reports took fright and suffered with solution paralysis. Eventually, Ian called a crisis meeting and demanded learn more. the problem? he shrieked, slamming his fist down within the table. But his direct accounts, flabbergasted to hear Ian with the P word, couldn bring themselves to share with him that the problem was him! Advice to Ian.
モンクレール 新作 メンズ http://www.kirkandsarah.com

243名無しさん:2013/11/29(金) 09:30:26
女性は、子供を引き取れば生活安泰!! 
子供と一緒に、まったく突然に「ドロン!」すればいい!!

法廷の場では、子ずれでは「圧倒的女性優位」だから。とにかく、揉めたら子供を連れて消える!!
無職で生活保護と、養育費を容易に受け取る。生活保護は、母子加算があるし。

誰かさんは、「PTSD」の診断書を駆使して貰い「仕事できません」と生活保護を需給.
二十歳の頃に、職場の人達とラブホテル巡り。大阪市港区の大和産婦人科で中絶3回もしている。自ら暴露。
平成21年9月9日に、子供を連れてドロン!!自らが生きる為。
「PTSD」の診断者は、お金で弁護士と医師に頼めば容易に貰える
五体満足、仕事に就くのに何ら問題ないが。仕事しない!!極短時間、パート勤務に誤魔化しで就く。
裏で、4人もいる実の兄貴達に金銭的支援を殆ど受ける。
「しんどい」「しんどい」「しんどい」が口癖。「しんどい、だるい、そんなのできへん。私には無理!」
「兄ちゃ〜ん!」ばかり言う。

日本社会は、法的に圧倒的受精優位!! 男女平等など大磯!!
ノンフィクション。実話です。

244名無しさん:2013/12/10(火) 01:31:15
【PHPのバージョン】5以上
TwitterOAuthで時間ごとに名前・アイコン・ロケーションを変更させているのですが、数日前から名前だけ変更されません……。サーバーやcronも変えてみましたが変化なし。
手がかりが全く掴めず途方にくれております。どなたかとっかかりだけでも教えてくださると嬉しいです

245名無しさん:2014/01/31(金) 05:38:37
【設置鯖名】 レン鯖名:@PAGES
【PHPのバージョン】5.2.5
【EasyBotterの改造】改造している
【手動】 動く
【実行】 CRON:Google App Engine
【実行間隔】 5分間隔(リプライ用、通常ポストは毎時0分に設定)
【不明点】
EasyBotter2.1.3にて、非公式wikiに掲載されている単語拾いの機能について、タイムラインから単語を拾い、TL発言をするように改変した。
>>155-157(2.1系用にereg_replaceをstr_replaceに置き換え)、>>182-183(TLから拾う→TLにポストの改変)を参考に色々と試した結果ある程度成功)
フォロワーがある程度いるためTLにも常に一定数のツイートがあり、1時間に1度発言する状態。

①現在単語拾いの成功確率が5割以下であり、精度がかなり低いと感じる。(失敗:「名詞がない」と判断されたのか、「名詞がない場合の単語をセット」の単語を使っている状態。)
②「通常ポストでのTLからの名詞拾い」と、「リプライをもらった場合、そのリプライから単語を抽出し返信する」機能とを併用したい。

以上2点について、この掲示板やネット上の記事、自力で実験…などしてもどうしてもわかりません。
名詞拾いbotはいくつかありますが、様子を見る限り私がつくったものは極めて単語拾いの成功確率が低いと感じます。
②もできれば実装したいのですが、せめて①だけでもどのように直せばよいか、ご教授お願いしたいです。
よろしくおねがいします。

以下がEasyBotter.phpに記述している内容です。

//■■ここから名詞拾い(TL)■■
if(strpos($text,"{ran_meishi}") !== FALSE){
//アプリケーションID
$apiKey = "*****";
$tweet= urlencode($tweet);
$apitweet = $this->getRandomTweet();
$apiurl = "http://jlp.yahooapis.jp/MAService/V1/parse?appid=&quot;.$apiKey.&quot;&amp;filter=9&amp;sentence=&quot;.$apitweet["text"];
$apirss = file_get_contents($apiurl);
$apixml = simplexml_load_string($apirss);
//配列「meishi」を作る
$meishi = array();
// 特定の単語、指定字数以下の名詞を弾きながら配列に名詞を追加
foreach($apixml->ma_result->word_list->word as $apiitem)
{
//拾いたくない単語
if ((ereg("殺", $apiitem->surface)==False) && (mb_strlen($apiitem->surface) > 3*2)){
$meishi[]=$apiitem->surface;
}
}
//リプライの中に名詞がない場合の単語をセット(複数設定可)
if ($meishi[0] == ""){$meishi = array("×××");}
//名詞をランダムに選ぶ
$ran_meishi = $meishi[array_rand($meishi)];
//名詞を変換する
$text = str_replace("{ran_meishi}", "$ran_meishi", $text);
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板