node.jsでTwitterに投稿をしてみる。



# node.jsでTwitterに投稿をしてみる


node.jsでTwitter APIを使ってTwitterに投稿を行うまでの流れです。

ある一点でハマってしまったので、その点についても記述します。

## 流れ

1. keyとtokenの取得
2. ソースコード
3. 投稿

# 前提条件

node.jsは既に導入済みとします。
筆者は`homebrew`→`nodebrew`→`node.js`の手順でインストールしました。
またTwitterのAPIを使うにはTwitterの開発者アカウントが必要ですが、そちらも登録済みとします。登録方法は詳しくまとめている方が沢山いるので、そちらを参照して下さい。

### 環境

|PC|Macbook air 2013|
|:---|:---:|
|OS|Big sur v11.2.3|  
|Homebrew|v3.0.10|
|nodebrew|v8.9.4|
|エディタ|vs code|


# 1. keyとtokenの取得

[Twitterデベロッパーサイト]
(https://developer.twitter.com/ja)にアクセスします。

右上にある`Developer Potral`をクリックします。

![developer_portal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/844088/94621778-f988-1334-8f18-af8055b0d7c7.png)

`Dashboard`が表示されたら、左側の`overview`を選択して、`Add App`をクリックします。

この画面はプロジェクト作成済などの状態で人によって変わりますので参考程度にしてください。

また、選択肢にプロジェクトとスタンドアロンが表示されている方は、公式の[こちら](https://developer.twitter.com/en/docs/apps/faq)を参考にしてください。

![dashboard_add_app.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/844088/48f91220-b3ec-039a-854e-af855ddd620e.png)

アプリの名前を決めます。他のユーザが既に使用している名前は使用できません。

今回は`demo2021-test`という名前にしました。


![name your app.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/844088/66222792-1902-2653-dff9-dff6ee0b5ab3.png)

名前が通ると、keyが生成されます。
このkeyは一度しか表示されませんが、現時点のkeyは今回の用途では使用できない可能性があるので保存はしなくても結構です。
keyは再生成できるので安心してください。




![スクリーンショット 2021-04-08 23.28.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/844088/e4d832d3-fa08-aa3d-4633-23b6bbe2e41b.png)


そしてそのまま、画面下にある`setting`をクリックしてください。

次に`App permissions`の変更を行います。

> ここが冒頭での筆者がハマった点になります。

![setting_permissions.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/844088/f0aaaad7-254b-25dd-5453-ff1eb8909352.png)



デフォルトではこの設定が`read`になっているので、Twitterに書き込みが行えません。
なので、permissionsを`read+write`に変更します。

> 先ほどkeyを保存しなくて良いとした理由は、keyのpermissionがreadになっており、変更後に再生成したkeyでないとtwitterへの書き込みができない可能性があるからです。


![スクリーンショット 2021-04-08 23.28.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/844088/0221100d-f727-ce38-b2d5-77c65f0f1072.png)

次にkeyとtokenを生成します。


`settings`から`key and tokens`に切り替え、`Authentication TokensのGenerate`をクリックすると、tokenが生成されます。

![key&tokens.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/844088/145c1c22-6fbf-aefe-c9f5-115420be56e7.png)

`Consumer Keys`では、既に一度keyを作っているので`Regenerate`からkeyを再生成します。

もし値を忘れた場合は、Regenerateからどちらも再生成が可能です。

# 2. ソースコード　

ここからはターミナルでの作業です。

まずは、Twitterのモジュールをインストールします。

```
npm install twitter
```

次にプログラムを書いていきます。
ソースコードは、[公式のドキュメント](https://www.npmjs.com/package/twitter)があるのでそれに生成した自分のkeyとtokenを記述するだけです。
ファイル名は、`twitter_node.js`にしました。


```
var Twitter = require('twitter');

var client = new Twitter({
  consumer_key: '自身のAPI key',
  consumer_secret: '自身のAPI secret key',
  access_token_key: '自身のAccess token',
  access_token_secret: '自身のAccess token secret'
});

client.post('statuses/update', {status: 'node.js test hello!'},  function(error, tweet, response) {
  if(error) throw error;
  console.log(tweet);  // Tweet body.
  console.log(response);  // Raw response object.
});
```

`{status: 'node.js test hello!'}`の部分が、実際にツイートされます。

# 3. 投稿

あとは、プログラムを実行するだけです。

```
node twitter_node.js
```

Twitterにログインするとツイートがされています。


> エラーを吐かれた場合
keyのpermissionsが変更前のreadとして反映されている可能性が高いです。
再生成したものを使用するようにしてください。
またkeyとtokenの配置も気をつけてください。

# まとめ

node.jsからAPIを通してツイートできるようになりました。

Twitter APIに触れたのは初めてだったので色々と面白かったです。
今後はbot化を目指したいです。

#参考文献

導入にあたり参考にした記事

https://qiita.com/kzthrk/items/84acb969dc0b23aeae58

Permissionsの解決に至った記事

https://monoxa.net/2020/11/twitter-api-to-reacquire-the-key-after-changing-the-permissions/