• 締切済み

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

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

  • casin
  • お礼率88% (379/429)
  • PHP
  • 回答数3
  • ありがとう数4

みんなの回答

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

  • twitterで自動リツイートするBot

    twitterで特定のキーワードやハッシュタグを自動リツイートするBotを作りたいのですが、そのようなBotを簡単に製作できるツールまたは配布されているスクリプト(サンプルのPHPなど)はありますか?

    • ベストアンサー
    • PHP
  • 【Twitter】 リツイートbotの作成について

    こんにちは。 今回Twitterで、指定した語句がツイートされた際に、自動リツイートさせるbotを作りたいと考えています。もちろんここで質問させていただくまでにネットで調べてきたのですが、いまいち理解しきれませんでした。 プログラミングについてはほぼ初心者です。 Developpersにて、コンシューマーキー等、必要と思われる物は取得し、リツイートさせる為のPHPに関しても作成済みです。 twitterfeedも使ってみたのですが、いまいち理解しきれずに、といった状況です。 まず自分のしたい事を入力したPHPは どこに打ちこんでいけばいいのかという事がまず質問の一つですが、 そもそも基本からリツイートbotの作成について教えていただけるとありがたく存じます。 説明不足等ありましたらご指摘ください。  最終目標としては、 Twitterで、例えば"こんにちは","ありがとう"等と事前に指定した語句がツイートされた際に、それらをリツイートしたい、ということです。 また規模は大きくなりますが、全ツイートを対象に考えています。 よろしくお願いします。

  • twitterで特定IDのツイートを検索する方法

    twitterの検索は全ユーザを対象に行われます。なので特定IDの過去のツイートをみたいと思っても探すのが大変です。そこで特定IDのツイートを検索する方法があれば教えて下さい。

  • リツイートbotの作成

    Twitterのタイムラインから特定の単語のツイートだけを取り出し、公式RTするbotを作りたいのですがうまくできません。 特定ユーザーのツイートをRTさせるbotはうまく動いたのですが、こちらはうまくできないうえ、調べてみても昔のもので今のプログラムとあっていない?ので動きませんでした。 詳しい方いらっしゃいましたら教えていただけると嬉しいです。

  • twitterのbotが動かなくなりました。

    twitterのbotがtwitterAPI1.1へのバージョンアップで動かなくなりました。 当方素人なため、最初製作した時もググりながらでしたのでさっぱりわかりません。 コードを書き直す以外にも何かやらなければならないのでしょうか? 下記以外にもファイルがありますが他にも修正しなければいけないのでしょうか? 易しく教えていただけると助かります。 ↓↓↓bot.phpのコードです↓↓↓ #!/usr/local/bin/php <?php require_once ("./oauth/twitteroauth.php"); //インクルードパスを基準に書いたら何故かコマンドラインからの実行でrequrireされなかったのでこのように相対パスを記述 //以下は、上記URLから取得した内容をコピペ $consumer_key = '**************'; $consumer_secret = '*******************'; $access_token = '***************'; $access_token_secret = '**********************'; //リクエストURL作成、XML取得。ここでは5件取得するよう記述 $keyword = urlencode('**'); $url = "http://search.twitter.com/search.atom?q=".$keyword."&rpp=5"; $xml = simplexml_load_file($url); //for文で5件をリツイート for($i=5;$i>0;$i--){ $id = $xml->entry[$i]->id; //それぞれのつぶやきからidを取得 $id = str_replace('tag:search.twitter.com,2005:','',$id); //使うidの部分だけ抜き取る $endpoint = "http://api.twitter.com/1/statuses/retweet/".$id.".xml"; //エンドポイントURL作成 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); //twitteroauthクラスのインスタンス生成。 $req = $to->OAuthRequest($endpoint,'POST',array()); //リクエスト送信。リツイートされる。 } ?>

    • 締切済み
    • PHP
  • Twitterについて

    最近になって、iPhoneの公式Twitterアプリのタイムラインで、フォローしている人がリツイートしたツイートをリツイートしようとすると、『ツイートが見つかりませんでした このツイートはリツイートできません』 と表示されます。 ですので毎回、リツイート先の元のユーザーのページでそのツイートを探してリツイートしています。 なぜこうなるのでしょう?

  • Twitter検索での特定単語含むユーザーの除外

    Twitterに関する質問です。検索する際に検索する単語を含むユーザーへのリプを非表示にしたいと考えています。例えば「サッカー」と検索した時に、「サッカー太郎」というユーザーへのリプのみを検索結果から除外す ると言う事です。インターネットでは特定ユーザーのみの除外や、リプを全て除外する方法が掲載されていましたが、私が質問した内容の方法はありませんでした。以上、検索ワードを含むユーザーへのリプのみを非表示にする方法を教えて頂きたいと思います。よろしくお願いいたしますm(_ _)m

  • Twitterの楽しみ方がわかりません(泣)

    Twitterの楽しみ方がわかりません(泣) Twitterに登録してみたものの、楽しみ方がさっぱりわかりません。 自分がフォローしてないツイートは表示されないから、どんなに面白いユーザーが居ても気付かないと思うのですが… 皆さんはどうやって楽しんでいるのですか? 自分のツイートにリツイートももちろん付きません。 もっとチャットみたいにリツイートが集まって楽しめるとか、SNSみたいにカテゴリで面白いツイートを探せるとか、やりようがある気もするのですが… 上手な楽しみ方を教えていただけたら嬉しいです!

  • Rubyでtwitterのbotを作りたい

    Rubyでtwitterのbotを作りたいです。 特定のキーワードをRTするようにしたいです。 初心者ですのでほとんどプログラミングできません。 アクセストークンは取得しました。 コマンドプロンプトで実行するのはわかります。 terapadにプログラミングするつもりですがどのようにプログラムすれば動くのでしょう。 ググってもいいサイトが見つかりません。 どうか教えてくださいませ。

    • ベストアンサー
    • Ruby
  • ツイッターの質問です。

    ツイッターで、 @ユーザー名+その人あてのコメント をする場合、自分のツイートフォームに@の後にユーザー名を入れるのはどんな操作で入れるのですか? あと、@ユーザー名+コメントというのは、返信でもリツイートでもない返し方なのでしょうか? ご教示のほど、お願いいたします。