[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
公式の Java Quickstart に大体必要な情報は掲載されているが、こちらだとシートを読み込むための情報しか載ってない。
Quickstart 掲載の以下が既に実施されている前提で書いていく
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
final String spreadsheetId = "ACJ9wvshTKNWUmdlgY5SCwe5VK5aZZhkE2wTMJVNqBcS";
Sheets service = new Sheets.Builder(
HTTP_TRANSPORT, JSON_FACTORY,
getCredentials(HTTP_TRANSPORT)).setApplicationName(APPLICATION_NAME).build();
List<Request> requests = new ArrayList<Request>();
// 0列目から数えて1行目から1000行目まで消す (1行だけ残る)
requests.add((new Request()).setDeleteDimension(
(new DeleteDimensionRequest())
.setRange(
(new DimensionRange()).setStartIndex(1).setEndIndex(1000).setDimension("ROWS"))));
// 0行目から数えて7列目から26列目まで消す (7列だけ残る)
requests.add((new Request()).setDeleteDimension(
(new DeleteDimensionRequest())
.setRange(
(new DimensionRange()).setStartIndex(7).setEndIndex(26).setDimension("COLUMNS"))));
BatchUpdateSpreadsheetRequest body = new BatchUpdateSpreadsheetRequest().setRequests(requests);
service.spreadsheets().batchUpdate(spreadsheetId , body).execute();
List<ValueRange> data = new ArrayList<ValueRange>();
data.add(new ValueRange().setRange("A1").setValues(Arrays.asList(Arrays.asList(
"ぱんだ",
"うさぎ",
"こあら"))));
BatchUpdateValuesRequest requestBody = new BatchUpdateValuesRequest();
requestBody.setValueInputOption("RAW");
requestBody.setData(data);
BatchUpdate request = service.spreadsheets().values().batchUpdate(spreadsheetId, requestBody);
request.execute();
以下のような結果が得られる
| A | B | C | |
|---|---|---|---|
| 1 | ぱんだ | うさぎ | こあら |
| 2 | |||
| 3 |
List<Object> contents = new ArrayList<Object>();
contents.add((Object) 48);
contents.add((Object) "こぶた");
Append request = service.spreadsheets().values().append(
spreadsheetId,
"A1", // A1 を左上とする表である、とする
new ValueRange().setValues(Arrays.asList(contents)));
request.setValueInputOption("RAW");
request.setInsertDataOption("INSERT_ROWS"); // 行の追加
AppendValuesResponse result = request.execute();
上述の状況で使うと次のようになる
| A | B | C | |
|---|---|---|---|
| 1 | ぱんだ | うさぎ | こあら |
| 2 | 48 | こぶた | |
| 3 | |||
| 4 |
JRuby でなんかなんとかした。コアな部分は以下。全体を見るならば https://github.com/Shunshun94/myJruby/tree/5a765cbbaf79364e4f7a7c7ad436b885ca240a82 からどうぞ。
public class App
{
public static void main( String[] args )
{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("jruby");
try {
// 実行ディレクトリを MyJRuby/src/main/resources/BCDice/src にしている
// ソースコードは https://github.com/ysakasin/bcdice-api/blob/master/lib/bcdice_wrap.rb からコピペしたのをいじいじ。
engine.eval("$:.unshift File.dirname(__FILE__)");
engine.eval("require \"./bcdiceCore\"\nrequire \"diceBot/DiceBot\"\nrequire \"diceBot/DiceBotLoader\"");
engine.eval("DICEBOTS = ([DiceBot.new] + DiceBotLoader.collectDiceBots).\r\n" +
" map { |diceBot| [diceBot.id, diceBot] }.\r\n" +
" to_h.\r\n" +
" freeze\r\n\r\n" +
" SYSTEMS = DICEBOTS.keys.\r\n" +
" sort.\r\n" +
" freeze\r\n\r\n" +
" NAMES = DICEBOTS.\r\n" +
" map { |gameType, diceBot| {system: diceBot.id, name: diceBot.name} }.\r\n" +
" freeze\r\n" +
"");
engine.eval("dicebot = DICEBOTS['SwordWorld2.0']");
engine.eval("bcdice = BCDiceMaker.new.newBcDice");
engine.eval("dicebot.bcdice = bcdice");
engine.eval("puts dicebot.dice_command('aaaaa', 'SwordWorld2.0')");
engine.eval("puts dicebot.dice_command('FT', 'SwordWorld2.0')");
engine.eval("puts dicebot.dice_command('2d6', 'SwordWorld2.0')");
engine.eval("puts dicebot.dice_command('K20', 'SwordWorld2.0')");
engine.eval("puts dicebot.dice_command('k20', 'SwordWorld2.0')");
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
JSON in Java という Java のライブラリがあって、これが JSON をさっと扱いたい場合に便利なのだがちょっと使い物にならない。というのは、ライセンスが次のようになっているのだ。ライセンス情報
The Software shall be used for Good, not Evil.
すなわち「このソフトウェアは良いことに使うべきであり、悪いことに使うべきではない」ってどういう意味なのだろう。これについて少しググると色々と「ダメだよね」という話題は出てくる。
代案に minimal-json を利用している。JSON in Java 程ではないが割と簡単に書ける。
// JSON in Java で書く
JSONObject result = new JSONObject(json);
boolean isOK = result.getBoolean("ok");
List<String> list = new ArrayList<String>();
JSONArray JSONarray = body.getJSONArray("myArray");
for(int i = 0; i < JSONarray .length(); i++) {
list.add(JSONarray .getString(i));
}
// minimal-json で書く
JsonObject result = Json.parse(json).asObject();
boolean isOK = result.getBoolean("ok", false);
List<String> list = new ArrayList<String>();
JsonArray JSONarray = body.get("myArray").asArray();
for (JsonValue prefix : JSONarray ) {
list.add(prefix.asString());
}Bolt は最先端の Slack アプリをつくるためのフレームワーク。これまでの JavaScript に加えて、今日 Java バージョンもリリースしました! ☕ 早速試してみてください! https://t.co/Jus3XOSj9c
— Slack Platform (@SlackAPI) March 20, 2020
おっ、と思ったのでこれで試してみた。
導入手順はありがたいことに日本語訳されているのでAPI クライアントのセットアップ | Slack SDK for Javaを眺めながらのんのんとやればよい。
続いて基本的な Web API の利用 | Slack SDK for Javaを眺めながら実装していくのだが、投稿するサンプルくらいしかない。javadoc は提供されているが説明とかは現時点では何もないので辛いものがあるかもしれない。きっと今後増えるとは思う。
// ダミーです
final String TOKEN = "xoxb-123456789012-123456789012-z4k4dNbB5BOQGF8TtbGPynfj";
final String CHANNEL = "CMJ85D7K8";
Slack slack = Slack.getInstance();
MethodsClient client = slack.methods(TOKEN);
// リクエストは builder で記述する
ConversationsHistoryResponse result = client.conversationsHistory(ConversationsHistoryRequest.builder().channel(CHANNEL).build());
// 例えば以下のようにすると「一定の時間以降の投稿のみ取得」とかできる
// ConversationsHistoryResponse result = client.conversationsHistory(ConversationsHistoryRequest.builder().channel(CHANNEL).oldest(lastPostTimeStump).build());
// ログ出力
List<message> list = result.getMessages();
for( Message message : list ) {
System.out.println(message.getText());
// 他にもいろいろ情報が取れる
// message.getTs(); でタイムスタンプとか
}
// ダミーです final String TOKEN = "xoxb-123456789012-123456789012-z4k4dNbB5BOQGF8TtbGPynfj"; Slack slack = Slack.getInstance(); MethodsClient client = slack.methods(TOKEN); UsersInfoResponse result = client.usersInfo(UsersInfoRequest.builder().user(userId).build());
タイトルまんま。社内ツールで PDF に透かしを入れたかったので調べた。若干面倒だけど PDFBox が良かった。
ちょっとググってみると E-ICEBLUE さんとか出てくる。かなり使いやすい。有料版は普通に使えると思う。有料版の体験版は1ページ目の一番上に「体験版だよー」って文字が入る。無料版もあるがこちら、10ぺージまでしか PDF 出力ができない。ページ数が少ないって分かっているなら選択肢かも。有料体験版のライセンスは確認していないけど無料版は商用利用可能らしい。有料版のお値段はこちら。
iText さんもよいらしい。AGPL ライセンスの元、無料版もある(事実上、商用利用は有料)。
PDFBox は Apache ライセンスなので安心。
ただ、社内ツールだったので今考えたら AGPL の iText さんのものでよかったのでは……