いっぺーちゃんの いろいろやってみよ~

Espruino on ESP32 で Twitter にも日本語を

LINEでは日本語の送信をできるようにしたので、Twitterでも日本語の送信ができるようにということで、Espruino on ESP32 で Twitter(その2) - いっぺーちゃんの いろいろやってみよ~ で紹介したtiny_twitterモジュールのtweet処理のメッセージを日本語対応にしてみました。

 

チョイ変だけで済むと思ったら、そうでもなかった。。。
ついでにパーセントエンコード処理がダブっていた部分を整理したり、ちょこちょこと変更しました。

 

以下が日本語対応版 tiny_twitter モジュールです。

tiny_twitter_20170803.zip

zipファイルを解凍してオンボードストレージの /node_modules ディレクトリに格納してください。
日本語対応しているのは送信のみで、受信は対応していません。
受信を日本語対応するには、Espruino本体のString関連処理を大幅に修正する必要がありそうなので、あきらめました。

 

日本語をtweetするには、LINEのときと同様に送信文字列をあらかじめパーセントエンコードしたものを指定し、第3パラメータにエンコード済みを示すtrueを指定します。

var message = "%E3%81%8A%E3%81%AF%E3%82%88%E3%81%86";                 // おはよう
var param   = {"trim_user":true,"include_entities":false};
tw.tweet(message, param, true);                    // パーセントエンコード済み文字列のときは第3パラメータをtrueに

 

これを使って、Espruino on ESP32 で Twitter(その3) - いっぺーちゃんの いろいろやってみよ~ のTweetボタンを日本語化したものが以下です。

 

consumer_key    = '取得した Consumer key';
consumer_secret = '取得した Consumer secret';
access_token    = '取得した Access Token';
access_secret   = '取得した Access Token Secret';

var messages = [
    "%E3%81%8A%E3%81%AF%E3%82%88%E3%81%86",                 // おはよう
    "%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF",        // こんにちは
    "%E3%81%93%E3%82%93%E3%81%B0%E3%82%93%E3%81%AF",        // こんばんは
    "%E3%81%8A%E3%82%84%E3%81%99%E3%81%BF",                 // おやすみ
];

if (typeof(ESP32) ==='function') {
    // platform is espruino on ESP32
    // Wi-Fi アクセスポイントへの接続
    var wifi = require('MyWifi');
    // set time zone  fixed to 'JST'
    E.setTimeZone(9);

    // Initialize for switch
    var sw1  = Pin(21);
    sw1.mode("input" );
} else {
    throw "not ESP32";
}

// モジュール読み込み
var tiny_twitter = require("tiny_twitter");

// 初期化
var tw = new tiny_twitter(consumer_key, consumer_secret, access_token, access_secret, true);

tw.on("connect", function() {
    console.log("%%%% CONNECTED %%%%");
});
tw.on("response_header", function(data, code, msg) {
    if (code != 200) {
        console.log("%%%% RESPONSE ERROR!!!   " + code.toString() + " : " + msg);
    }
    console.log("%%%% RESPONSE_HEADER %%%%\n" + data + "\n%%%%%%%%%%%%%%%%%%%%%%%%%");
});
tw.on("data", function(data) {
    console.log("%%%% DATA %%%%");
    console.log(JSON.stringify(data,  null, '\t'));
    // エラー時はdata.errors.code data.errors.message に情報が入る
    console.log("%%%%%%%%%%%%%%%%%%%%%%%%%");
});
tw.on("end", function() {
    console.log("%%%% END %%%%");
});

function button_down(e) {
    var msg;
    var date = new Date();
    h = date.getHours();
    if (h >=4 && h < 12) {
        msg = messages[0];      // おはよう
    } else if (h >=12 && h < 17){
        msg = messages[1];      // こんにちは
    } else if (h >=17 && h < 21){
        msg = messages[2];      // こんばんは
    } else {
        msg = messages[3];      // おやすみ
    }
    tw.tweet(msg, {"trim_user":true,"include_entities":false}, true);
}

setWatch(button_down, sw1, {repeat:true, edge:"falling", debounce:100});

 

 これで日本語をtweetすることができるようになりました(ひと手間余分に必要ですが)。
ちょっと使い道が広がったかな??