Help us understand the problem. What is going on with this article?

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

はじめに

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

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

用意するもの

  • Ubuntu server 16.04 LTS

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

環境構築

mixer.comの公式リファレンスにnodeで
やれって書かれていたのでまずはここから

nodejsのインストール

先人の知恵を借ります。

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

#普通に 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 プロジェクトの作成

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

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

$ npm install --save carina ws twitter

その他事前準備

MixerのChannnelIDを知っておく

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

Image 005_frame.png
こんな感じで出たらOKです。表示された数字をメモしといてください。

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

上記のリンクを参考に

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の値"
}

を作成しておきます。

スクリプトを書く

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

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');
    }
});

    }
});

実行

$ 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もっと盛り上がらないかなああああああ

その他参考

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away