LoginSignup
6
4

More than 1 year has passed since last update.

【Rails】Twitter APIを使ってトレンドを取得したい

Last updated at Posted at 2021-02-25

はじめに

現在、TwitterAPIを使って、トレンド情報を取得する機能を実装しています。

まだまだ途中ですが、ひとまずこれまで気づいたことをまとめていきます。
使用するAPIはStandard v1.0です。

なお、本記事は初学者によるものです。
アドバイスなどございましたら、コメントいただけると幸いです!

環境

  • Ruby on Rails 6.0.0
  • mac os catalina
  • TwitterAPI standard v1.0

導入の手順

  1. Twitter developerへ登録
  2. 各API keyを取得
  3. gem Twitterを導入

Twitter developerへ登録

ぐぐると登録の仕方がたくさん出てくるので、深くは解説しません。
余談ですが、申請時に書く内容は全部日本語で記載しても通りました。

各API keyを取得

【概要】

APIを使用するために、認証をする必要があります。
認証には、以下4つのAPIキーが必要です。

  • consumer key (API key)
  • consumer secret (API secret)
  • access token
  • access secret

consumerは身分証のようなイメージです。
twitter developerに登録するとアプリごとに発行されます。

accessは通行券とか使用するパスポートみたいなイメージです。
使用の許可得てますよ!といったものです。

なお、これらのAPIキーは一度発行すると、同じものを再発行することはできないみたいです。

【取得方法】

①developerにログインし、Developper Portalを押します。
スクリーンショット 2021-02-25 21.55.07.png

②Dashbordからアプリを登録
③アプリ横の鍵マークをクリックし、Access token & secretを発行します。

gem Twitterを導入

gem Twitterを導入しAPIを叩いていきます。
このgemを導入してやられている方が多かったので、ひとまずgemを導入してやってみようと考えました。
導入方法と、トレンド情報の取得方法を記載していきます。

【導入方法】

①Gemfileに'twitter'を記入し、bundle install

gem 'twitter'
$ bundle install

②railsを再起動

【取得方法】

①まずは認証(gemのgithubを参考)

controller.rb
client = Twitter::REST::Client.new do |config|
      config.consumer_key        = ENV["TWITTER_API_KEY"]
      config.consumer_secret     = ENV["TWITTER_API_SECRET_KEY"]
      config.access_token        = ENV["TWITTER_ACCESS_TOKEN"]
      config.access_token_secret = ENV["TWITTER_ACCESS_SECRET_TOKEN"]
    end

APIkeyはgithubなどにアップするとまずいので、環境変数に設定します。
環境変数の設定方法はこちら

②trendsメソッドを使用してトレンド情報を取得

twitterの導入によりAPIを操作するメソッドが使用できます。
トレンド情報取得の場合はtrendsメソッドを使用します。

controller.rb
client = Twitter::REST::Client.new do |config|
      config.consumer_key        = ENV["TWITTER_API_KEY"]
      config.consumer_secret     = ENV["TWITTER_API_SECRET_KEY"]
      config.access_token        = ENV["TWITTER_ACCESS_TOKEN"]
      config.access_token_secret = ENV["TWITTER_ACCESS_SECRET_TOKEN"]
    end


@trends = client.trends

@trendsの戻り値はこんな感じです。

 @attrs=
  {:trends=>
    [{:name=>"#INDvENG",
      :url=>"http://twitter.com/search?q=%23INDvENG",
      :promoted_content=>nil,
      :query=>"%23INDvENG",
      :tweet_volume=>142604},
     {:name=>"#自分をつくりあげたゲーム4選",
      :url=>
     ...(略)

標準では、フォローしているアカウント、興味関心、位置情報から決まるようです。
個人的にはこのままだと、扱いづらいので日本のトレンド10件だけにしてみます。

controller.rb
    client = Twitter::REST::Client.new do |config|
      config.consumer_key        = ENV["TWITTER_API_KEY"]
      config.consumer_secret     = ENV["TWITTER_API_SECRET_KEY"]
      config.access_token        = ENV["TWITTER_ACCESS_TOKEN"]
      config.access_token_secret = ENV["TWITTER_ACCESS_SECRET_TOKEN"]
    end
    @trends = client.trends(id = 23424856).attrs[:trends].first(10)

gemの公式のドキュメントによると、trends(id = yahooの国ID)とすることで、その国のトレンドに限定して取得できるようです。
(これ見つけるのに苦戦しました)

ここから学んだこと

①英語のドキュメントでも、翻訳してトライするべし
最初めちゃくちゃ抵抗ありました。
でも、翻訳してみると、思ったよりわかるかも?
といった感じがありました。
何事もまずはトライ。

②gemもrubyファイルの塊
ということは、どこかにメソッドの定義が書いてある?

参考

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

6
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4