ExpressでTwitter APIを試す

# はじめに
後輩がTwitterAPIの話してたら気になったので、叩いてみることにした。

# [Twitter Developer](https://developer.twitter.com/)

## 概要
- Twitterアカウントがあれば自分用のAPIアクセスポイントを作って、TwitterAPIを叩ける
- 
 
## 準備
## Twitterアカウント
### [アカウント作成](https://twitter.com/i/flow/signup)
※アカウント保有者は飛ばす


### TwitterAPIアクセスポイント作成
1. [TwitterDeveloper](https://developer.twitter.com/)にログイン
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431932/3e7d3d6c-291b-b703-0d64-09faff9debc0.png)

2. 右上ユーザー名プルダウンから[Apps](https://developer.twitter.com/en/apps)へ飛ぶ

3. `Create an app`よりアプリ登録
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431932/ae6c0f7f-5d68-a05d-1314-0ec9dfde7c6a.png)
アプリ登録画面
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431932/a0a3730c-b3e6-3292-ee13-a975f1762481.png)

テストなので↓こんな感じの内容↓で登録
 
|項目|値|説明|
|:-----------------|:-----------------|:-----------------|
|App Name|test|自分の作るアプリの名前|
|Description|just for test|アプリの説明|
|Website URL|http://test.com|アプリのURL|
|Sign in with Twitter|enabled||
|Callback URL|http://localhost:3000|サーバーURL。本番サーバー立てたら追加|
|Terms of service URL|||
|Privacy policy URL|||
|Organization name||||
|Organization website URL|||
|App usage|test test test test test test test test test test test test test test test test test test test test test test test test test test |詳細なアプリ説明|

下の`Create`を押下

4.作成できたら`Keys and tokens`タブの`Genrate key`を押下

![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431932/4c5c8c86-1e14-d7c7-ce7e-f747868b6e69.png)

:bangbang::bangbang::bangbang::bangbang::bangbang:***重要***:bangbang::bangbang::bangbang::bangbang::bangbang:
↓こんな画面↓が出てくるので、`Access token`と`Access token secret`をコピペ＆メモして保存

![6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431932/4876ae96-f251-5de8-d6e3-52247733c876.png)

作成完了
　![7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431932/48776913-e15a-ce74-a941-7d81836f2ea7.png)

使用するのは４つ
- Api key
- Api secret key
- Access token
- Access token secret


## Node.js
###Node.jsインストール
npmも使えるようにしておく
[Node.jsダウンロードサイト](https://nodejs.org/ja/download/)

## 使用方法
- [APIレファレンス](https://developer.twitter.com/en/docs/api-reference-index#)から使いたいAPIを探す。
- 
今回は[トレンド](https://developer.twitter.com/en/docs/trends/locations-with-trending-topics/api-reference/get-trends-available)を見ることにした
HttpRequest飛ばすだけでよさそう

```
API Reference contents 
GET trends/available　　　GET trends/closest
```

- 設定は[npmのtwitterパッケージ](https://www.npmjs.com/package/twitter)が簡単そう

```js
var Twitter = require('twitter');
 
var client = new Twitter({
  consumer_key: '',
  consumer_secret: '',
  access_token_key: '',
  access_token_secret: ''
});
 
var params = {screen_name: 'nodejs'};
client.get('statuses/user_timeline', params, function(error, tweets, response) {
  if (!error) {
    console.log(tweets);
  }
});
```

 
# サーバーを立ててみる

## 仕様

サーバーのURLを叩いたらTwitterのトレンド結果がとりあえず画面いっぱいに出る。

## ソースコード

```package.json
{
  "name": "twitter_api_test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node ./index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "twitter": "^1.7.1"
  }
}

```

```index.js
// server settings
const express = require("express")
const server = express();
const port = 3000

// twitter settings
const Twitter = require('twitter');
// さっき作ったAPIの設定
const API_KEY = "AAAAAAAAAA"
const API_SECRET_KEY = "BBBBBBBBBB"
const ACCESS_TOKEN = "CCCCCCCCCC"
const ACCESS_TOKEN_SECRET = "DDDDDDDDDD"

const twitter = new Twitter({
    consumer_key: API_KEY,
    consumer_secret: API_SECRET_KEY,
    access_token_key: ACCESS_TOKEN,
    access_token_secret: ACCESS_TOKEN_SECRET,
});

// routes
server.get("/", function (req, res, next) {
    res.send("server is up")
});

server.get("/trends", function (req, res, next) {
    // ここでTwitterAPIを叩く
    twitter.get('trends/available', function (error, result, response) {
        if (error) {
            res.send(error)
        } else {
            res.send(result); // TwitterAPIの結果をそのまま返す
        }
    });
})

server.listen(port, function () {
    console.log('Listening on port ' + port)
});
```


## 結果

1. `npm install`したら`npm start`
2. `localhost:3000` にアクセス
![8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431932/8834a427-08c4-9372-f7eb-04973d48dd56.png)

3. `localhost:3000/trends`にアクセス
うまくいきました
![9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431932/5baadaed-d4ce-48c3-5c5e-7318af30fbd3.png)