Hatena::ブログ(Diary)

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

2017-04-18

[]Javaから画像付きToot失敗する版 Javaから画像付きToot失敗する版を含むブックマーク

https://github.com/zyuiop/mastodon-java

を使って画像付きTootしようとして失敗する版

	private void exec(String[] args) {
		logger = initLogger();
		logger.info("start");
		String app_name = "クライアントアプリ名";
		String host_name = "ホスト名"; // pawoo.netとか
		String client_secret = "クライアントシークレット";
		String access_token = "アクセストークン";

		String img_file_name = "送信する画像ファイル.png";
		int reply_to = -1; // リプライ先発言ID。ないなら-1
		boolean sensitiveMedia = false; // ロリエログロ画像ならtrue
		String spoilerText = null; // 「死体画像注意」等の文言。無ければnull
		Visibility visibility = Visibility.PUBLIC; // 公開範囲

		MastodonApp mstdn = new MastodonApp(host_name, app_name, client_secret);

		Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod());
		credential.setAccessToken(access_token);

		MastodonSession session = new MastodonSession(mstdn, credential); // コンストラクタをpublicに改造した
		try {
			File img_file = new File(img_file_name);
			MastodonAttachment atm = session.uploadAttachment(img_file); // ここで鯖から500が返ってくる。
			int[] img_ids = new int[1];
			img_ids[0] = atm.getId();
			MastodonStatus stat = session.postStatus("画像添付テスト from JavaAP ver.2 ", reply_to, img_ids, sensitiveMedia, spoilerText, visibility);
			logger.info(stat.toPrettyString());
		} catch (IOException e) {
			logger.log(Level.WARNING, "なんか失敗", e);
		}

		logger.info("end");
	}

画像をアップロードするところで以下のエラー

com.google.api.client.http.HttpResponseException: 500 Internal Server Error
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>We're sorry, but something went wrong</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <link href="https://fonts.googleapis.com/css?family=Roboto:400" rel="stylesheet">
  <style>
    body {
      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
      background: #282c37;
      color: #9baec8;
      text-align: center;
      margin: 0;
      padding: 20px;
    }

    .dialog img {
      display: block;
      margin: 20px auto;
      margin-top: 50px;
      max-width: 600px;
      width: 100%;
      height: auto;
    }

    .dialog h1 {
      font: 20px/28px -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
      font-weight: 400;
    }
  </style>
</head>

<body>
  <div class="dialog">
    <img src="/oops.png" alt="Mastodon" />

    <div>
      <h1>We're sorry, but something went wrong.</h1>
    </div>
  </div>
</body>
</html>

と言われた。画像を変えても一度も成功しない。何だろう。先ほどのライブラリの使い方が不味いのか。つかそもそもアップロードAPIの使い方のドキュメントが無いし。

一応、切り分けのためmstdn.jpの方にも https://mstdn.jp/@nekora2199 を取って試したが同じ結果。やっぱ悪いのはリクエスト電文、即ち私だろう。

ソースを見たが、何の変哲もないPOSTでマルチパートで画像を送信しているようにしか見えない…。

今後の方針としては

1.とりあえず、cUrlPythonでまず画像アップロードと画像付きTootを成功させる。

 →Python でできた https://img.pawoo.net/media_attachments/files/000/145/092/original/49910a22fd6959b3.png?1492513974

2.httpsをhttpにして、我が家VMwareの適当なApache相手cUrlなりPythonなりで通信。404になるけどともかくそのリクエスト電文をキャプチャ

3.上のJavaサンプルでも同様にキャプチャ

4.正誤の電文を比較すれば、ヘッダなりパラメータなり、何か足りないものや誤っているものが見つかるだろう。