スキップしてメイン コンテンツに移動

JumblrでPhotoSetとEclipse実行とコマンドプロンプト実行で挙動が異なるなど

Tumblr APIのJavaライブラリJumblrが公開されていて、それを使っていろいろとやってみているところです。なかなか一筋縄にいかないです。

PhotoSetの投稿

まずPhotoSetですが、1つの投稿に複数の写真を入れるやつです。GitHubのmasterに公開されているものには実装されていません。photo_postブランチの方に実装されています。
・tumblr/jumblr · GitHub
https://github.com/tumblr/jumblr/tree/photo_post
注意しないといけないのが、ブランチの方はmaster側に実装されているものが入ってなかったりするので、Photo.java、PhotoPost.java、PhotosetPost.javaをとってくるなどしてmasterに良い感じにマージしてやる必要があります。

また、このPhotosetPost.javaはレイアウトの指定ができないので、下記のようなレイアウトが自由に選べません。投稿すると勝手なレイアウトが割り当てられます。


Photo Setのレイアウトは、
・Photo set のレイアウトの指定 - p’s diary
http://d.hatena.ne.jp/poochin/20120329/1332994978
こちらで書かれているように、数字の羅列を一緒に送ってやれば良いそうです。なのでPhotoPost.javaを開いて、以下のdetailメソッドのようにphotoset_layoutを追加してやれば、レイアウトも指定できます。

/**
 * Get the detail for this post (and the base detail)
 * @return the details
 */
@Override
public Map<String, Object> detail() {
    Map<String, Object> details = super.detail();
    details.put("type", "photo");
    details.put("link", link);
    details.put("photoset_layout", photoset_layout);
    details.put("caption", caption);

    if (pendingPhotos != null) {
        for (int i = 0; i < pendingPhotos.size(); i++) {
            PhotoType type = pendingPhotos.get(0).getType();
            if (type != null) {
                details.put(type.getPrefix() + "[" + i + "]", pendingPhotos.get(i).getDetail());
            }
        }
    }

    return details;
}

ちなみに、ネットの情報によれば写真は1日75枚までという制限があるようです。ドキュメントには容量制限以外は特に書かれてないのですが。

Eclipse実行とコマンドプロンプト実行で挙動が異なる

それと、Eclipse上では問題なく動くのですが、これをJarファイルとして出力したり、コマンドプロンプトで実行すると、Tumblrへ投稿するところで、Not AuthorizedというExceptionが発生します。

今日これにハマりました。この問題、Github上につい2週間ほど前に質問が上がってました。
・Can't accept other lanuage except English ? · Issue #25 · tumblr/jumblr · GitHub
https://github.com/tumblr/jumblr/issues/25
まさに同じところでエラーが出てます。というか、逆に言うと、なんでEclipse上では問題無く投稿できるんだって話ですが。

日本語が問題なので、タグや本文に入ってなければ大丈夫です。Eclipseとコマンドは何が違うのか現在この問題で挫折してます....

数値文字参照で回避を試みる

タグに日本語を使わないで本文にだけ日本語という縛りなら、回避策という名の苦肉の策を思いつきました。本文は日本語じゃなくても、数値文字参照に変換してやれば通ります。
※タグにもやってみましたが数字記号が投稿されるだけです。

で、数値文字参照ですが、

例えば、「アイスクリーム」を数値文字参照に変換すると、「&#12450;&#12452;&#12473;&#12463;&#12522;&#12540;&#12512;」こんな感じです。こちらのサイトで確認できます。
・数値文字参照用変換スクリプト
http://nelii.net/num.html
本文をこのように変換してやれば通るのですが、これをJavaでどうやるか、これまたハマりました。こちらに、
・OKLabの戯言 » Java で HTML の数値文字参照を変換する方法
http://blog.oklab.org/?p=329
数値文字参照から文字実体参照に戻すという、やりたい事の逆はあるのですが、ググれどググれどなんかよくわからいので、掲載されているソースから逆のことをやってみました。要は文字列をcharに分割して、それをそれぞれintにキャストして「&#」と「;」を付けるだけでした。ソースにするとこんな感じですかね。

public static String convertCharRef(String src) {

    String dest = "";
    char[] c = src.toCharArray();
    for(int index=0;index<c.length;index++) {
        dest = dest + "&#" + (int)c[index] + ";";
    }

    return dest;
}

ちなみに、Eclipseでは動くけど、コマンドラインからはExceptionになる話ですが、Play Framework上では日本語があっても大丈夫なのを確認しています。

感想

まあ挫折という結果になったわけで、力不足を痛感しているわけですが、個々の問題はプログラマーの資質を試されているいるような問題で勉強になった感はあったということで

|出口| λ....

PR

コメント

このブログの人気の投稿

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseの高速化メモ

Eclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。