質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.34%

Rubyを使用したTwitterBOT。自分宛のツイートを検索し特定のキーワードがあったらリプライを送りたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 905

score 76

前提・実現したいこと

Rubyを使用してTwitterBOTを作りたい。
まずは手動で動くようにしたいです。
自分宛のツイートを検索し、その中に「おはよう」と書いてあったら「おはよう!」と返せるようにしたいです。

発生している問題・エラーメッセージ

イメージ説明

D:\勉強用\rb>ruby main.rb
Traceback (most recent call last):
        6: from main.rb:41:in `<main>'
        5: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/streaming/client.rb:93:in `user'
        4: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/streaming/client.rb:119:in `request'
        3: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/streaming/connection.rb:20:in `stream'
        2: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/streaming/response.rb:19:in `<<'
        1: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/streaming/response.rb:19:in `<<'
C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/streaming/response.rb:24:in `on_headers_complete': Twitter::Error::NotFound

D:\勉強用\rb>

該当のソースコード

require 'twitter'

config = {
    consumer_key: "*",
    consumer_secret: "*",
    access_token: "*",
    access_token_secret: "*",
}

@restClient = Twitter::REST::Client.new(config)
@streamingClient = Twitter::Streaming::Client.new(config)


username = "*"

@streamingClient.user do |object|
    if object.class == Twitter::Tweet && object.text.include?("@#{username}") && !object.in_reply_to_status_id
        puts "Found tweet: #{object}"
        if object.text.include?("おはよう")
            @restClient.update("@#{object.user.screen_name} おはよう!", in_reply_to_status_id: object.id)
        end
    end
end

試したこと

streamingClientを使い始めると該当のエラーが出るようです。
restClientを使用したツイートは成功しております。

Ruby初心者なので、あまり理解できておらずお力を貸していただきたく投稿させていただきました。
解決策をご教授いただけると嬉しいです。よろしくお願いいたします。


追記
@streamingClient.user do |object| この1行でエラーが出ているようです。
書き方がいけないのか?何かが足りないのか?
ご存知の方がいらっしゃったらご教授ください。


追記2
ローカル環境が原因かと思い、こちらを参考に
paizacloudでも試してみましたが同エラーが出てしまいます。

追加で確認した項目…Twitter側権限→Read and write (Access level)になってました

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2019/10/19 15:37

    エラーメッセージは、画像ではなくテキストで記載していただけないでしょうか?

    また、Twitter::Error::NotFound の後にもメッセージが続いていると思いますので、省略せずに最後までメッセージを記載していただけないでしょうか?

    キャンセル

  • suzu_cat

    2019/10/19 15:43

    修正依頼ありがとうございます。
    テキストで追加いたしました。
    Twitter::Error::NotFoundで終わっているようです。

    ローカル環境、paiza.cloudで試しましたが同エラーが出ております。こちらも今から追記いたします。

    キャンセル

回答 1

checkベストアンサー

+1

streamingClientを使い始めると該当のエラーが出るようです。

を見落としていました。

User Stream を使おうとされているのですね。

Twitter 公式の開発者ブログの投稿 Twitter上でより良い顧客エンゲージメント体験のための新機能 に

User StreamsとSite Streamsとともに、ダイレクトメッセージの使われていないエンドポイントもAccount Activity APIなどの機能向上したプロダクトと入れ替わります。2018年6月20日に、以下のエンドポイントの停止を開発者の皆さんにご案内を予定しています。
User Streams
Site Streams
GET direct_messages
GET direct_messages/sent
GET direct_messages/show
POST direct_messages/destroy

とあるように 2018年8月で、User Stream は、廃止されましたので、使えません。

代替方法は、

等を使うことになると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/19 18:22

    ありがとうございました!
    Twitter側でUser Streamが廃止されてしまったのですね…
    開発環境のせいだと思っておりましたのでスッキリしました!
    代替方法のご提示もありがとうございました。早速調べてみたいと思います。

    キャンセル

  • 2019/10/19 18:45

    年を打ち間違えていたので修正しました。
    廃止されたのは、2018年8月なので1年前ですね。

    インターネット上の記事を検索すると 廃止された機能を使っているサンプルも多いので、使用する前に公式情報をチェックするようにした方が良いと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • Rubyに関する質問
  • Rubyを使用したTwitterBOT。自分宛のツイートを検索し特定のキーワードがあったらリプライを送りたい