Hatena::ブログ(Diary)

ねこら対策研究要塞日誌@はてな このページをアンテナに追加 RSSフィード Twitter

2017-04-16

[]JavaMastodonポスト JavaでMastodonにポストを含むブックマーク

いや、https://pawoo.net/@nekora2199bot販促自動投稿するために。一応できたけどメモ。

最初は https://github.com/zyuiop/mastodon-java 使おうかと思って調べてたんだけど、結局使わず。

マニュアルhttps://github.com/tootsuite/documentation/blob/master/Using-the-API/API.md

胆であるアクセストークンの取得は取得手順はこちらcurlを使っている。

そして一旦アクセストークンを取得してしまえば単なるApache HttpClientを使ったPOSTで充分だった。期限が気になるがアクセストークン取得時には期限の情報は無かった。

package nekora.mastodon;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
 * https://github.com/zyuiop/mastodon-java のサンプルを使わない版 既にアクセストークン持っていることが前提
 * 
 * @author nekora
 *
 */
public class TestMain {
	private Logger logger;

	public Logger initLogger() {
		String logname = "log/TestMastodonClient";
		Logger ret = Logger.getLogger(logname);
		try {
			Handler fileHandler = new FileHandler(logname + "%g.log", 1000000, 9);
			fileHandler.setFormatter(new SimpleFormatter());
			ret.addHandler(fileHandler);
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}

		return ret;
	}

	/**
	 * Mastodonのクライアントテスト
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		TestMain my = new TestMain();
		my.exec(args);
	}

	/**
	 * 
	 * @param args
	 */
	private void exec(String[] args) {
		String host_name = "pawoo.net"; //インスタンスあるの鯖名
		String access_token = "アクセストークンをここに書く";
		String status = "日本語でこんにちは from JavaAP";
		String visibility = "public"; //実際は他にも公開範囲は色々。

		logger = initLogger();
		String access_url = "https://" + host_name + "/api/v1/statuses";
		logger.info(access_url);

		try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
			// パラメータ設定
			ArrayList<NameValuePair> params = new ArrayList<>();
			params.add(new BasicNameValuePair("access_token", access_token));
			params.add(new BasicNameValuePair("status", status));
			params.add(new BasicNameValuePair("visibility", visibility));

			// アクセス先URL設定
			HttpPost post = new HttpPost(access_url);
			post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

			// ポスト実行
			try (CloseableHttpResponse response = httpClient.execute(post)) {
				if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
					HttpEntity entity = response.getEntity();
					logger.info(EntityUtils.toString(entity, StandardCharsets.UTF_8));
				}
			}
		} catch (IOException e) {
			logger.log(Level.WARNING, "何か失敗した", e);
		}

		logger.info("end");
	}

}

nekora2199

@nekora2199

日本語でこんにちは from JavaAP

2017年04月16日 10:15 · nekora2199_bot · 0 · 1 · Webで開く

https://pawoo.net/@nekora2199/581927

↑貼って気付いたんだけど「2017年04月16日 10:15」って変だな。投稿したのは19時頃だったのに。Webから投稿しても同じように時間が狂うので私のせいではない。

https://pawoo.net/@nekora2199/581927/

後は画像のアップロードを覚えれば https://twitter.com/nekora2199/ に組み込んでTwitterMastodonというかPawooに同時呟きできるという寸法。

画像無しなら今でもできるので対応

https://github.com/tootsuite/documentation/blob/master/Using-the-API/API.md#media

お! カードっぽいのがあるな。これは一体…。

https://github.com/tootsuite/documentation/blob/master/Using-the-API/API.md#card

あ、それと画像アップロード前に閲覧注意だか18禁だか何だかフラグを立てる方法も調べないと。