-->

Java

トゥートしてみよーってことで。

手順

  1. アプリケーションを登録する。APIはこれ
  2. OAuthでアクセストークンを取得
  3. トゥート。APIはこれ

Javaでjerseyをつかったコードをあげるが、アクセストークンがあればトゥートできるので2までは、curlなんかを使ってアクセストークンを取ってくるのでもいい。あと、friends.nicoインスタンスを使用する。

続きを読む
このエントリーをはてなブックマークに追加

タイトルの通りなんか流行っているのでMastodon APIをたたいてみるよ。(1カ月ほどたってるけど(^^;))
簡単なところから、認証の必要がないローカルタイムラインを取ってくる。

わざわざ書くほどでもないんだが、friends.nicoインスタンスなら、

https://friends.nico/api/v1/timelines/public?local=true

にアクセスするだけで、JSON形式でステータスの配列が返ってくる。

jerseyを使ってみたものと、HttpURLConnectionを使ったものをアップしとく。かなり適当に作ったのでエラー処理とかもっとちゃんとせなかんと思う。あと、サンプルではpublicとtagタイムライン以外は取れないので注意。

サンプル



このエントリーをはてなブックマークに追加

前作ったプログラムでGoogleのguetzliを使おうと思ったら、外部プロセスの実行方法知らんぞ!ってなったんで調べてみた。(^^;)


        BufferedReader br = null;
        // 起動するコマンド、引数でProcessBuilderを作る。
        ProcessBuilder pb = new ProcessBuilder("./aaa.sh", "arg0", "arg1");
        // 実行するプロセスの標準エラー出力を標準出力に混ぜる。(標準エラー出力を標準入力から入力できるようになる)
        pb.redirectErrorStream(true);
        try {
            // プロセス起動
            Process process = pb.start();
            
            // 起動したプロセスの標準出力を取得して表示する。
            //   標準出力やエラー出力が必要なくても読んどかないとバッファがいっぱいになって
            //   プロセスが止まる(一時停止)してしまう場合がある。
            InputStream is = process.getInputStream();
            br = new BufferedReader(new InputStreamReader(is));
            while(true) {
                String line = br.readLine();
                if(line == null) {
                    break;
                }
                System.out.println(line);
            }
            // プロセスの終了を待つ。
            int ret = process.waitFor();
            // 終了コードを表示
            System.out.println("ret = " + ret);
        } catch (IOException ex) {
            Logger.getLogger(TestProcess.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InterruptedException ex) {
            Logger.getLogger(TestProcess.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if(br != null) {
                try {
                    br.close();
                } catch (IOException ex) {
                    Logger.getLogger(TestProcess.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

まー、こんな感じだ(^^;)

注意点は、コード中のコメントにも書いたが、起動したプロセスの標準出力、標準エラー出力は必要なくても読んどかないといけないことだ。ブロックしてしまうからだ。


このエントリーをはてなブックマークに追加

JavaでExcelファイル(.xlsx)を読む:POIサンプル: 万象酔歩に詳しく書いてあるけど、ちょっと古いのでこの投稿を参考に最新版で試してみる。

POIをダウンロードページ(Apache POI - Download Release Artifacts)からバージョン3.15のバイナリ版をダウンロードする。
ダウンロードしたファイルを解凍して、poi-3.15.jar、poi-ooxml-3.15.jar、poi-ooxml-schemas-3.15.jar、ooxml-lib/xmlbeans-2.6.0.jar、lib/commons-collections4-4.1.jarを追加する。とりあえず、次に示すソースを動かすのに必要なライブラリはこんだけだ。実際はダウンロードしたファイルに含まれているjarファイルを全部追加した方がいいだろな。

試したソースはこんな感じだ。

package testexcel;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 *
 * @author miyamoto
 */
public class TestExcel {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Workbook workbook;
        
        // ファイルオープン
        try (InputStream is = TestExcel.class.getResourceAsStream("test.xlsx")) {
            workbook = new XSSFWorkbook(is);
            
            for (Sheet sheet : workbook) {  // 全シートまわす
                System.out.println("Sheet:" + sheet.getSheetName());
                for (Row row : sheet) {     //  行でまわす
                    for (Cell cell : row) { // 行内のセルでまわす
                        System.out.print(getStr(cell) + " ");
                    }
                    System.out.println();
                }
            }
        } catch (IOException ex) {
            Logger.getLogger(TestExcel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    // セルのデータを文字列で取得
    public static String getStr(Cell cell) {
        switch(cell.getCellTypeEnum()) {
            case BOOLEAN:
                return Boolean.toString(cell.getBooleanCellValue());
            case FORMULA:
//                return cell.getCellFormula();     // ← 計算式が返る
                return Double.toString(cell.getNumericCellValue()); // 計算結果が返る。
                                                                    // 0除算でエラーになる場合例外が発生する。
            case NUMERIC:
                return Double.toString(cell.getNumericCellValue());
            case STRING:
                return cell.getStringCellValue();
            default:
                return "";
        }
    }
}

セルのタイプを取得するメソッドのgetCellTypeが非推奨だったのでドキュメントによると「getCellTypeEnumを使え」みたいに書いてあったのだが、これも非推奨っぽい(^^;)代わりを探してみたんだが、それっぽいのがないのでしかたがないのでこれを使っている。

(追記)
SEさんがコメントされていますが、getCellTypeEnumが非推奨になっているのはpoiのバグらしいです。3.16で直っているそうです。


このエントリーをはてなブックマークに追加

10分で出来る!初めてのTwitter4J & Twitterアプリ作り方メモ in 2015-10-18 - Java EE 事始め!
このエントリーをはてなブックマークに追加

↑このページのトップヘ