Android、Java、Web系、Linux、マラソン等の備忘録

2013/09/25

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

0 件のコメント
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

0 件のコメント :

コメントを投稿