ラベル 文字化け の投稿を表示しています。 すべての投稿を表示
ラベル 文字化け の投稿を表示しています。 すべての投稿を表示

2012年1月29日日曜日

続々・Titanium Mobile で mixi Graph API

おめたんコメントを、FacebookとかGoogle+とかWassrとかでいただきました。
ありがとうございます!
同居している人達からは、何もお祝いを言われていないまま、誕生日が終わろうとしています!やったね!
あ、昔の同僚がおめでとうとLINEで言ってくれました。ええ子やで。keiちゃんええ子やで。

というわけで、mixi Graph API で文字化けする原因?と、対処法がわかりました~。
なんで文字化けしてしまったのかは、わからないんだけど、
(UTF-8エンコード宣言しているにもかかわらず、EUCで書いて保存しているっぽいのではと思う)
前回のエントリで紹介した jcode.js と utf8.js (?) 的にいうと、

var str = "わっかっさー!わっかっさーってなぁんだっ!";
str = _to_utf8(_to_euc(str));

こういうエンコード状態になっているみたいです。

なので、

str = _from_euc(_from_utf8(str));

こうすることで、元に戻ります。

で、きれいに文字が表示されるようになりましたよーひゃっほーう!

で、mixiボイス投稿とmixiボイス返信とイイネ!を実装しようとしたんだけど、
投稿についてはできるんだけど、
mixiボイス返信とか、イイネ!が出来ない。
理由は、UpdateAPI でデータを取得すると、
VoiceAPIで取れば取得できる、POST-ID という一意なIDが取得できないため。

http://developer.mixi.co.jp/connect/mixi_graph_api/mixi_io_spec_top/voice-api/

これがないと、返信もイイネも出来ない。
ていうか、mixi のWebサイト上だと、mixi チェックだろうが日記だろうがなんだろうが、
イイネ!出来るはずなのに、 UpdateAPI に POST-ID が無い限り、どうしようもない。

UpdateAPI で取得できる JSON データ上で、id というカラムはあるんだけど、
中身が id ではなくて、URI になってる。

http://mixi.jp/view_check.pl?post_time=20120129202439#owner_id=cqs7s4qrou1ae_1327836279

アクセスしても、データがありませんと言われる。
これに対して何かアクションを起こせば、POST-ID が取れるのなら、取りに行くんだけどなぁ。
あ。でも、待てよ?

VoiceAPI の POST-ID のサンプルを見ると、
[
  {
    "id" : "1FZ3P4ACUWBBC-2010061010321",
    "created_at" : "Thu Jun 10 01:32:13 +0000 2010",
    "text" : "つぶやきの本文",
    "user" : {
      "id" : "1FZ3P4ACUWBB",
      "screen_name" : "Becky",
      "profile_image_url" : "http://profile.img.mixi.jp/photo/user/1FZ3P4ACUWBBC_301280930.jpg",
      "url" : "http://mixi.jp/show_friend.pl?uid=1FZ3P4ACUWBB"
    },
    "photo" : [
        {
            "thumbnail_url" : "http://id.photo.mixi.jp/....",
            "image_url" : "http://id.photo.mixi.jp/....",
        }
    ],
    "favorited" : false
  }
]
こうなってるので、
URLを分解して、 post_time= と owner_id = をくっつけりゃいいじゃんねぇ。
でも、なんかよくよくみると、 user.id (1FZ3P4ACUWBB) と id (1FZ3P4ACUWBBC) だと、
id の 方が、最後にCが余計だよね。関係あるのかな?なんでもいいからCつけてみりゃいいか。

    var id = "http://mixi.jp/view_check.pl?post_time=20120129202439#owner_id=cqs7s4qrou1ae_1327836279";
    id = id.replace("post_time=","").replace("owner_id=","").split("?")[1].split("#");
    id = id[1].split("_")[0].toUpperCase() + "C-" + id[0];
    alert(id);

こんな感じでどうだろ。やってみよう。
やってみたけど、ん~。NotFoundって言われるわぁ。
ん~。困ったわおん。チョイ調べる。

続・Titanium Mobile で mixi Graph API

あ、誕生日です。ありがとうございます。
31歳になりました。
コメント欄に皆さんからの温かい言葉が沢山で、とても嬉しいです。



ス パ ム コ メ ン ト す ら 来 な い け ど ね 。

はい。というわけで、mixi の文字コードの問題が解決しそうなので、書きます。
色々とインターネットを調べたら、

日本語URL変換ツール: ドメインのピュニコード(Punycode)変換とUTF-8など文字列のエンコード・デコード

こういうところがあって、どーやってんだろーと思って、ソースを開いたら、
jcode.js って書いてあったので、それでぐぐったら、

Unicode と JIS / EUC / シフトJIS 間の変換

こういうのがありました!

追記!こっちもです!

Unicode ⇔ UTF-8

ソースコードの使用、配布に制限はありません。ご自由にお使いください。

って書いてあるから、使っていいのであろう。ありがたや。
結局自分の力では解決できなかったのである。なさけねーなー。
こっちのコードを見たら、ecl.jsより判りやすかった。
でも、結局判らないけど(笑)
テーブルから文字列を引っ張ってきたりしてたりするのとかは判るので、
なんか、うん、えーと、わからない。でも、わかる。

取り合えず、なんとかなりそうだ!ということで。

Titanium Mobile で mixi Graph API

というわけで、取得してデータを表示はできました。
ロケタッチと同じく、OAuth 2.0 な感じなので、
特段何か複雑だったわけではないものの、前回のエントリに書いたように、
AccessToken の有効期限が短いので、
mixi だけ、更新をとりに行く前に、RefreshToken を使って、 AccessToken を最新のものに書き換える処理を入れるようにしました。

で、ちゃんとデータを表示は出来るんだけど、
何故か、文字化けする…おいおいおいおい!

そういえば、なんか文字コードがどうとか書いてあったなーというのを思い出した。

API共通仕様

下のほうにある、絵文字のところで、文字コードの部分があったので、
emoji_carrier=au&emoji_charset=utf8
にしてみたんだけど、変わらず文字化け…おーまいがーっど。
絵文字のキャリアをAUにしたのは、AUはお猿さんの絵文字が可愛いからです。はい。

だいたい、JSONってUTF8以外はダメでしょ?そういう決まりじゃなかったっけ?
なんで文字化けするのかわからん。わーけがわからん。
ブラウザでチェックした、前回のエントリの時には
文字化けなんかしなかったのに、である。

これ、escape() とか そういうので文字化けしてるように見えるってもんじゃないもんなー。
Titaniumに問題があるのだろうなー。うむ。

ちょっと調べてみるけど、なんだかなーもう。
で、調べたら、

Escape Codec Library

これで出来るみたい。

ライセンスとか、どうなっているのであろうか…
転載可としか書いてない…うごー。これ困るパターンのやつじゃないですかー。
ソースを ecl.js のソースを見たけど、意味がわからない。
コード圧縮とか、難読化とか、そんなレベルじゃねー。すげー。これ。感動した。

とりあえず、別な方法を模索しますわー。