最速でMixerから配信したらTwitterにツイートするボットを作る

#        はじめに

連携するサービスそのものは既にあるようですが、

- [【Mixer】配信開始の自動ツイート【Streamjar】：ちななch](https://ch.nicovideo.jp/chinanachan/blomaga/ar1278560)
- [【mixer】配信する際自動ツイートする方法「MSJP編」](https://25reinyan25.net/?p=4600)

設定が上手くいかなかったのか、サーバーが上手く動いていないのか、
期待する動作をしてもらえなかったので自前で作ることにしました。

#      用意するもの

- Ubuntu server 16.04 LTS

自宅のサーバーの環境で構築しました



#      環境構築

[mixer.comの公式リファレンス](https://dev.mixer.com/guides/core/liveupdatestutorial)にnodeで
やれって書かれていたのでまずはここから









##nodejsのインストール

先人の知恵を借ります。

- [Ubuntuに最新のNode.jsを難なくインストールする - Qiita](https://qiita.com/seibe/items/36cef7df85fe2cefa3ea)

> まじで超簡単だった。
以下引用

```shell

#普通に nodejs, npm をインストール
$ sudo apt install -y nodejs npm

#n パッケージを導入
$ sudo npm install n -g

#n package を使って node をインストールします。
$ sudo n stable

#混乱を避けるべく、最初に入れた古い nodejs, npm は消します。そして再ログイン。
$ sudo apt purge -y nodejs npm
$ exec $SHELL -l

#ちゃんと最新かどうか、バージョン確認
$ node -v
v10.15.3
```



##npm プロジェクトの作成

- [参考][npm-init | npm Documentation](https://docs.npmjs.com/cli/init)

```shell
#フォルダ作成と移動
$ mkdir my-npm-pkg && cd my-npm-pkg
#プロジェクト作成
$ npm init
```

## 必要モジュールのインストール

- [参考][carina - npm](https://www.npmjs.com/package/carina)
- [参考][Node.jsでTwitter APIを叩いた話(2018年版) - たそぶろぐ。](https://tasoweb.hatenablog.com/entry/2018/06/01/002438)

```shell
$ npm install --save carina ws twitter
```














#       その他事前準備

## MixerのChannnelIDを知っておく

```shell
https://mixer.com/api/v1/channels/＜username＞?fields=id
↑のusernameを自身のusernameに変えてアクセスしてください
```

![Image 005_frame.png](https://qiita-image-store.s3.amazonaws.com/0/43608/57b1dc13-a1a7-8e22-07a3-8d6a65289a57.png)
こんな感じで出たらOKです。表示された数字をメモしといてください。

## Twitterのアクセストークンを取得しておく

- [参考][Node.jsでTwitter APIを叩いた話(2018年版) - たそぶろぐ。](https://tasoweb.hatenablog.com/entry/2018/06/01/002438)

上記のリンクを参考に

```javascript:secret.json
{
  "consumer_key"        :"取得したConsumer Key(API key)の値",
  "consumer_secret"     :"取得したConsumer Secret(API Secret)の値",
  "access_token_key"    :"取得したAccess Tokenの値",
  "access_token_secret" :"取得したAccess Token Secretの値"
}
```
を作成しておきます。








# スクリプトを書く

それでは実際の動作部分を作りましょう

```javascript:constellation.js
//根幹はリファレンスからコピペ
const Carina = require('carina').Carina;
const ws = require('ws');

Carina.WebSocket = ws;

//チャンネルIDを宣言しておく
const channelId = 1234;

const ca = new Carina({
    queryString: {
        'Client-ID': 'Click here to get your Client ID!',
    },
    isBot: true,
}).open();

ca.subscribe(`channel:${channelId}:update`, data => {
    //情報がアップデートされるとここが実行される
    console.log(data);
    
    if(data.online && data.updatedAt){
        //配信が始まるとonlineがtrueになりupdatedAtが変更されるのでそこで判定させる
        console.log("配信始まったよ！");

//ここにツイート処理
const twitter = require("twitter");
const fs = require("fs");

const client = new twitter(JSON.parse(fs.readFileSync("secret.json","utf-8")));

const message = "https://mixer.com/username で配信を開始しました。";
client.post('statuses/update', {status: message}, function(error, tweet, response){
    if (!error) {
      console.log("[Successfully tweet!]");
    } else {
      console.error('error');
    }
});

    }
});

```

実行

```shell
$ node constellation.js
{ online: true}
{ online: true, hosteeId:null, updatedAt: '2019-03-31T19:42:55z'}
配信始まったよ！
[Successfully tweet!]
```
配信が開始されると上記のように出力されるはずです。

>最終的なファイル構成
my-npm-pkg
┣ node_modules/
┣ constellation.js
┣ package-lock.json
┣ package.json
┗ secret.js
と、なるはずです

以上です。お疲れ様でした。







# あとがき

nodeを書いたことがなかったので最初Browserとか書かれてても？？？って状態でしたが、
普通にnode javascript.jsってコマンドで動作させられることがわかったので安心しました。
勉強不足ですね。
この投稿が誰かのお役に立てることを祈ってます。
mixerもっと盛り上がらないかなああああああ












#       その他参考

- [イマドキのJavaScriptの書き方2018 - Qiita](https://qiita.com/shibukawa/items/19ab5c381bbb2e09d0d9)
- [GitHub - mixer/carina: Easy to use library for connecting to and using Mixer's Constellation](https://github.com/mixer/carina)
- [node.jsを使ってjsファイルを実行する方法 | q-Az](https://q-az.net/node-js-pursue/)