• 締切済み

Twitterボットで特定ユーザーIDを除外したい

こちらのサイトを参考にして指定したキーワードを含むツイートをリツイートするTwitterボットを作成しました。 http://sonar.hotcom-web.com/wordpress/page-6/ そこで特定のユーザーIDを除外したいのですがどのようにカスタマイズすればいいのかわかりません。 方法をご教示いただけますでしょうか。

みんなの回答

noname#244856
noname#244856
回答No.3

「動作しない」とはどういう状態ですか?TwistOAuthを使用してもなおエラーメッセージが一切表示されないのであれば、以下の状態に陥っている可能性があります。 ・PHPのバージョンが5.4より古いため、array()の短縮構文である [ ] でパースエラーが発生している。 ・エラーが非表示の設定になっている。 ライブラリ自体は5.3.2以降で動作しますので、サンプル中の [ ] だけ書き換えてもらえればOKです。5.3はもうサポートが切れているバージョンなので5.4以降を使用することを強く推奨しますが…(レンタルサーバで未だ5.3以前を使っているところはセキュリティを二の次に考えているダメな運営です)

casin
質問者

お礼

回答ありがとうございます。 ご指摘の通りPHPのバージョンが5.3のままでした…。すぐにバージョンを上げましたら問題なく動作しました!(TwistOAuthを利用させて頂きました)

noname#244856
noname#244856
回答No.2

【蛇足・宣伝】 PHPでよく利用されているtwitteroauth.phpですが、お世辞にも高機能とは言えません。画像の投稿やリアルタイムでのツイート収集にも対応していません。また、リクエストが成功したかどうかのチェック、具体的には if (isset($result->errors[0]->message)) { ... } といった記述も毎回必要になります。こういった点を全て克服した新しいライブラリがあるので紹介しておきます。作者は私です。 TwistOAuth https://github.com/mpyw/TwistOAuth このライブラリは失敗時に例外をスローするので、try~catchを使うのが基本です。言い方を変えれば、tryブロックの中では成功時の処理に専念し、失敗時の処理だけをcatchブロックに分離することが出来るので、見通しが良くなるメリットもあります。またこういった点を除けばtwitteroauthに全体的に使用感は似ているので、習得も早いと思います。 <?php // ライブラリのロード require 'TwistOAuth.php'; // APIキー設定 $ck = ''; $cs = ''; $ot = ''; $os = ''; // 検索パラメータ・スクリーンネーム除外対象設定 $params = ['q' => '検索ワード']; $deny = ['screen_name1', 'screen_name2', 'screen_name3']; // 出力して改行する関数を定義(C言語のputs関数的なもの) function puts($message = '') {  echo $message . PHP_EOL; } // 結果はテキストとして出力(ブラウザから実行したときのために) header('Content-Type: text/plain; charset=utf-8'); // TwistOAuthオブジェクト生成 $to = new TwistOAuth($ck, $cs, $ot, $os); // 検索を試みる try {  // 成功時は各ツイートを順番に見ていく  foreach ($to->get('search/tweets', $params)->statuses as $status) {   // スクリーンネームが除外リストにあるかどうかチェックする   if (in_array($status->user->screen_name, $deny, true)) {    continue;   }   // リツイートを試みる   try {    // 成功時は「Retweeted: ステータスID」と表示    puts('Retweeted: ' . $to->post('statuses/retweet/' . $status->id_str)->id_str);   } catch (TwistException $e) {    // 失敗時はエラーメッセージを表示    puts($e->getMessage());   }  } } catch (TwistException $e) {  // 失敗時はエラーメッセージを表示  puts($e->getMessage()); }

noname#244856
noname#244856
回答No.1

まず…このサイト、あんまり参考にしない方がいい書き方が目立ちます。初心者が書いた記事を鵜呑みにするのは良くないです。 TwitterOAuthの正しい使い方 http://qiita.com/rana_kualu/items/357a031c0453a3538ad3 既存のコードを短く、但し省略されている本来必要なチェックは増やして修正するのであれば以下のようになります。OKWave上での可読性維持のため全角スペースでインデントをしている点にだけ注意してください。 $to = new TwitterOAuth(...省略...); $result = $to->get('search/tweets', ['q' => '検索ワード']); if (!isset($result->statuses)) {  die(   isset($result->errors[0]->message) ?   $result->errors[0]->message :   'Unknown error'  ); } foreach ($result->statuses as $status) {  $to->post('statuses/retweet/' . $status->id_str); } 特定の "スクリーンネーム" を除外するように書くには以下のようになります。 (質問者さんが仰られているのは恐らく本来の "ユーザID" ではないと思うので、こちらで書きます) $deny = ['screen_name1', 'screen_name2', 'screen_name3']; $to = new TwitterOAuth(...省略...); $result = $to->get('search/tweets', ['q' => '検索ワード']); if (!isset($result->statuses)) {  die(   isset($result->errors[0]->message) ?   $result->errors[0]->message :   'Unknown error'  ); } foreach ($result->statuses as $status) {  if (in_array($status->user->screen_name, $deny, true)) {   continue;  }  $to->post('statuses/retweet/' . $status->id_str); }

casin
質問者

補足

詳しい回答ありがとうございます。 教えて頂いた2つの方法を試していますが動作出来ていません。引き続き原因を探ってみます。

関連するQ&A