Twitter広告APIを利用してキャンペーンを作ってみる その３~TwitterAPIでツイート編~

# 経緯
私が所属している会社では__[待ラノ](https://lanobe.jp/ "待ラノ")__という小説投稿サイトを運営しています。
待ラノではオススメ小説のランキング上位5作を定期的にTwitterの公式アカウントで紹介しています。
紹介された小説をTwitter広告のキャンペーンを利用してプロモーションをしようってなりました。

# そもそもTwitter広告のキャンペーンって何？
Twitter広告のキャンペーンですが、簡単いうと1日にかける予算や期間内にかける総予算を指定して、Twitterに広告を出す機能です。

# Twitter広告APIでキャンペーンを作る理由
1つのキャンペーンで複数のツイートをプロモーションする場合、1日にかける予算を一気に消化されてしまいます。
しかもどのツイートにどれだけ予算が消化されているかがわかりません。
そのため、1つのツイートに1キャンペーンを紐付けることで消化される予算の見える化を行うことになりました。

ただ手動でTwitterの広告コンソールから、1ツイートに1キャンペーンを毎回作ることになると結構手間です。
というわけで、__Twitter広告APIを利用して動的にキャンペーンを作成__することになりました。

# Twitter広告APIでキャンペーンを作成するためには
以下の手順が必要です。

1. Tiwtterアカウントを作成する（省略）
2. Tiwtterアカウントにメールアドレスと電話番号を設定する（省略）
3. [TiwtterAPIの利用申請をする](https://qiita.com/kaga_espla/items/48161d51d79041cfe4b6 "TiwtterAPIの利用申請をする")
4. [TiwtterAPIのAPIキーとトークンを取得する](https://qiita.com/kaga_espla/items/4514be0ca123f9ec35c2 "TiwtterAPIのAPIキーとトークンを取得する")
5. __TiwtterAPIを利用してツイートをする  <font color="Red">←イマココ</font>__
6. [Tiwtter広告APIの利用申請をする](https://qiita.com/kaga_espla/items/cb050518f7c0174d109d)
7. [Tiwtter広告APIでを利用してツイートを使ったキャンペーンを作る](https://qiita.com/kaga_espla/items/9197695bda901fa6499d)

今回は5の__【TiwtterAPIを利用してツイートをする】__について説明していきます。

# 動作環境
- 使用端末：Mac
- Node.js：v12.18.2
- yarn：v1.22.4

# 使用するライブラリ
- __[express](https://github.com/expressjs/express "express")__
- __[node-twitter](https://github.com/desmondmorris/node-twitter "node-twitter")__

# 仕様
サーバーのURLにアクセスすると自動で定型文をツイートする。

# 1.package.jsonを作成する
以下のコマンドでpackage.jsonを作成します。
対話式で質問を聞かれるので基本的に全てEnterで問題ありません。

```
$ yarn init
question name (twitter-api-post-tweet):
question version (1.0.0):
question description:
question entry point (index.js):
question repository url:
question author:
question license (MIT):
question private:
```

# 2.ライブラリをインストールする
以下のコマンドでライブラリをインストールする

```
$ yarn add express twitter
```

# 3.ソースファイルを作成する

```
$ touch index.js
```

# 4.ソースコードを書く
```javascript:index.js
// Server settings
const express = require('express')
const server = express()
const port = 3000

// Twitter settings
const Twitter = require('twitter')

// 【その2】で取得したAPIキーとトークン
const API_KEY = 'AAAAAAAAAA'
const API_SECRET_KEY = 'BBBBBBBBBB'
const ACCESS_TOKEN = 'CCCCCCCCCC'
const ACCESS_TOKEN_SECRET = 'DDDDDDDDDD'

const twitterClient = 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('/', (req, res, next) => {
  res.send('server is up')
})

server.get('/post', async (req, res, next) => {
  try {
    // http://localhost:3000/post にアクセスすると自動でTweetする
    const tweetText = 'tweet内容\nhttps://lanobe.jp'
    const response = await twitterClient.post('statuses/update', {
      status: tweetText
    })

    const tweetId = response.id_str // ツイートID（【その5】にて使用予定）

    // TwitterAPIの結果をそのまま返す
    res.send(response)
  } catch (error) {
    res.send(error)
  }
})

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

# 5.サーバーを立ち上げる
以下のコマンドを叩いてサーバーを起動させる。
```
$ node index.jp
```

# 6.自動ツイートするURLにアクセスする。
ブラウザで「http://localhost:3000/post」にアクセスする。
アクセスするとツイートが投稿されます。

---

### ■「Twitter広告APIを利用してキャンペーンを作ってみる 」シリーズ
1. [その１~TwitterAPI申請編~](https://qiita.com/kaga_espla/items/48161d51d79041cfe4b6)
2. [その２~TiwtterAPIのAPIキーとトークンの取得編~](https://qiita.com/kaga_espla/items/4514be0ca123f9ec35c2)
3. __その３~TwitterAPIでツイート編~ <font color="Red">←イマココ</font>__
4. [その4~Tiwtter広告APIのAPI申請編~](https://qiita.com/kaga_espla/items/cb050518f7c0174d109d)
5. [その５~Twitter広告APIでキャンペーン作成編~](https://qiita.com/kaga_espla/items/9197695bda901fa6499d)