おあそび ぷろぐらみんぐ 日記

プログラミング初心者のおあそびと勉強の記録です。

【マストドン】IoTボタンをぽちぽちして、マストドンにTootする。【IoT_MESH】

マストドンブーム、火がついてから一ヶ月くらい?

とりあえず一段落したんですかねー。

私はというと、すっかりtwitterよりmastodon派ですね。

mstdn.jpに参加してるんですが、なんかtwitterよりこっちの空気の方が落ち着く。。

 

せっかく継続してマストドン使っているので、私もなにかいじってみたいなーということで、やってみました。

 

 

 

1)やりたいこと

さて、以前MESHのボタンタグでブラインドタッチでツイッターに呟くというのを作りました。

MESHというIoTボタンを使っていて、こんな感じにボタンをポチポチして呟くイメージです。

f:id:beethovenmendelssohn:20170504022727j:plain

 

今回はこれを改造して、手元のボタンをポチポチ押すと、マストドンでトゥートできる仕組みを作りました。こんな感じ。

f:id:beethovenmendelssohn:20170514162116j:plain

 

2)開発環境

使用した環境を並べるとこんな感じ。

MAC OS Sierra 10.12.4

・MESH SDK(Java Script)

・heroku(Webサーバ)

JAVA 

・mastodon4j( JAVAmastodon client)

 

mastodon4jというJAVAのクライアントを公開している型がいたので、こちらを使わせていただきました。感謝。

github.com

  

3)[事前準備]認証情報の取得

APIを叩いてトゥートするためには、認証が必要となるので、

事前に認証情報を取得しておきます。

こちらを参考にさせていただき、AccessTokenを取得しました。

これをメモっておきます。

thr3a.hatenablog.com

 

4)作った構成

構成はこんな感じです。

f:id:beethovenmendelssohn:20170514162849j:plain

【入力部分】は前回の記事でそのままでです。【受渡部分】も受渡先を1行書き換えただけ。

今回主に書いたのは、【出力部分】と書いた「POSTで受け取ったデータにハッシュタグを付けてTootする」アプリ部分ですね。 

 

 

4-1)MESH部分

【入力部分】は、MESHのボタンを押して、文字入力できるように作ってあります。

ボタンの押し方(1回押し、2回連続押し、長押し)と、押した回数の組み合わせで、文章を書いて受け渡すというものです。

 

【受渡部分】は、受け渡す先のURLだけ書き換えてこんな感じ。

var data = {
    "name" : messageValues.Text  //変数名「name」に「messageValues.Text」を入れる。
};

log("「"+messageValues.Text+"」とつぶやきました。");

    ajax({
            url : "ほげほげ",//受渡先のアドレス
            type : "post",																//postかget
		    data : data																	//受け渡すデータ
		} );
		

Execute部分に、こんな感じで書きます。

ただもらったデータを次のアドレスに受け渡すだけ。超シンプル。

 

4-2)トゥート部分

mastodon4jを使って、トゥートするアプリを作ります。

AccessTokenに、上記で取得した値を入れます。

 

メインはこちら。ただトゥート用のクラスを呼ぶだけ。

MstdnTest2Application.java

package
com.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import com.sys1yagi.mastodon4j.api.exception.Mastodon4jRequestException; @SpringBootApplication public class MstdnTest2Application { public static void main(String[] args) throws Mastodon4jRequestException { SpringApplication.run(MstdnTest2Application.class, args); } @Bean ServletRegistrationBean statsServlet() { return new ServletRegistrationBean(new FooServlet(), "/toot"); } }

 

トゥート用のクラスはこちら。

package com.example;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;
import com.sys1yagi.mastodon4j.MastodonClient;
import com.sys1yagi.mastodon4j.api.entity.auth.AccessToken;

import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.RequestBody;

public class FooServlet extends HttpServlet {
	    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    		throws ServletException, IOException{

//POSTで受け取った値を表示 String val = req.getParameter("name"); System.out.println("受け取った値は=="+val+"です。"); //AccessTokenを設定// AccessToken accesstoken = new AccessToken(); accesstoken.setAccessToken("ここにAccessTokenを書く");
//MastodonClientを作成。使ったインスタンスはmstdn.jp。 MastodonClient client = new MastodonClient.Builder ("mstdn.jp", new OkHttpClient.Builder(), new Gson()) .accessToken(accesstoken.getAccessToken()) .build();           //POSTする内容をRequestBodyとして記載 RequestBody formBody = new FormBody.Builder() .add("status", val+"#MESHからトゥート!!")//受け取った値+ハッシュタグ .add("visibility", "private")//非公開に設定 .build(); //mastodonにポスト&その結果を画面上に出力 System.out.println("====="+client.post("statuses",formBody)); }   } }

書き方ですが、上記のmastodon4jのドキュメントと、公式のAPI リファレンス見たら、なんとなく出来ました。

 

5)完成品

こんな感じで、ぽちぽちボタンを押して文字入力して、

2回連続長押しすると、トゥートします。

f:id:beethovenmendelssohn:20170514165456j:plain

無事に、MESHのボタンを押してトゥートできました。

めでたしめでたし。

 

ちなみに、こんな感じで、twitter用とmastodon用の両方に接続すると、、

f:id:beethovenmendelssohn:20170514165650p:plain

 

同じ内容を、両方に投稿できます。

f:id:beethovenmendelssohn:20170514165737p:plain

f:id:beethovenmendelssohn:20170514165801p:plain

これを試したときは、ツイッターの方が若干ラグがあって、

一瞬「あれ?マストドンしか動かなくなった。。」って焦りましたが、ログとか確認してる間に反映されてました。 

 

マストドン関係は、まだネット上に(私みたいな素人向きな)ドキュメントが少ないですね。

でもそんなに複雑な仕組みじゃないおかげで、なんとかなって良かったです。

 

ではまたー。