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

# はじめに

現在、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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697823/da0fbaa2-bd62-b7cc-b56c-94ee8d154fa0.png)

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

###gem Twitterを導入###

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

####【導入方法】####

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

```Gemfile
gem 'twitter'
```

```terminal
$ 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などにアップするとまずいので、環境変数に設定します。
[環境変数の設定方法はこちら](https://qiita.com/nyappy15th/items/deba715eb6d6aa5135f1)

②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ファイルの塊**
ということは、どこかにメソッドの定義が書いてある？


# 参考

- [本当に知ってる？最低限押さえたいOAuthのマナー](https://next.rikunabi.com/tech/docs/ct_s03600.jsp?p=002210#:~:text=%E3%80%8CConsumer%20Key%E3%80%8D%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA,%E3%81%A8%E3%80%8C%E6%9A%97%E8%A8%BC%E7%95%AA%E5%8F%B7%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82&text=API%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC,%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E8%A8%B1%E5%8F%AF%E3%82%92%E3%82%82%E3%82%89%E3%81%84%E3%81%BE%E3%81%99%E3%80%82)
- [Getting started](https://developer.twitter.com/en/docs/twitter-api/getting-started/guide)
- [gem twitter](https://github.com/sferik/twitter)
- [gemのドキュメント（trendsのページ）](https://rdoc.info/gems/twitter/Twitter/REST/Trends#trends_closest-instance_method)
- [TwitterのおすすめトレンドをAPI（Ruby）で取得する](https://qiita.com/ts-3156/items/71421f680d5be9a8325d)
- [Twitterのトレンドについてのよくある質問](https://help.twitter.com/ja/using-twitter/twitter-trending-faqs)

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