[mixi]ミクシーページアプリ・・・[page]

お仕事関係でmixiページアプリを作ることになったよ;_;

とりあえず、個人でパートナー登録・・・
クレカがいるのかorz
とか思ったりしながら登録!

※あと、法人の場合は登記簿を郵送しないといけないとか・・・
だから敷居が高すぎてみんなやる気がなくなるんだよとか思ったりもしてる・・・
http://developer.mixi.co.jp/about-platform/com/partner/

とにかく色々触りながらやってみないとわからないコトだらけで、正直辛かった;_;
※やりたくない気持ちもあって余計・・・

とりあえず、mixiデベロッパーの仕様書?はかなり読み辛い。
まだ、Facebookのデベロッパーの方がまし。

◆mixiページアプリからの投稿は3パターン

以下に書いてある・・・
http://developer.mixi.co.jp/page-apps/spec/page-api/

methodは、POST
URLは、http://api.mixi-platform.com/2/pages/[Page-ID]/feeds
[Page-ID]はmixiページのID

1.タイトルと本文のみの投稿

Content-Type:application/json
本家でこんな風にしなよとかかれています。

{
  "contentUri" : "http://www.application.com/id=12345",
  "title" : "タイトル",
  "body" : "本文",
  "urls" : {
    "pcUrl" : "http://mixi.jp/run_page_appli.pl?page_id=0&module_id=0&appParams=%7B%22uid%22%3A%221569%22%7D",
    "mobileUrl" : "",
    "smartphoneUrl" : "",
  },
  "sourceId" : "3"
}

実際に上記のような書き方はしません。
実際は以下のような感じ

<?php
    $page_id = '123456';
    $url = 'http://api.mixi-platform.com/2/pages/' . $page_id . '/feeds';
    $arr_data = array(
        'title' => タイトル文字列,
        'body' => 本文,
    );
    $content = json_encode($arr_data);
    $opt = array(
        'http' => array(
        'method' => 'POST',
        'header' => 'Authorization: OAuth '.$access_token."\r\n".
                    'Content-Type: application/json',
        'ignore_errors'=>true,
        'content' => $content,
    ));
    $data = file_get_contents($url, false, stream_context_create($opt));
    //成功するとjson形式で返りがある
    print_r(json_decode($data, ture));
?>

2.1に加え、イメージのURL指定によるイメージの投稿

Content-Type:application/json
本家でこんな風にしなよとかかれています。

{
  "contentUri" : "http://www.application.com/id=12345",
  "title" : "タイトル",
  "body" : "本文",
  "urls" : {
    "pcUrl" : "http://mixi.jp/run_page_appli.pl?page_id=0&module_id=0&appParams=%7B%22uid%22%3A%221569%22%7D",
    "mobileUrl" : "",
    "smartphoneUrl" : "",
  },
  "sourceId" : "3",
  "imageUrls" : [
    "http://www.imageurl.com/image/photo1.jpeg"
  ]
}

実際に上記のような書き方はしません。
実際は以下のような感じ

<?php
    $page_id = '123456';
    $url = 'http://api.mixi-platform.com/2/pages/' . $page_id . '/feeds';
    $arr_data = array(
        'title' => タイトル文字列,
        'body' => 本文,
        'imageUrls' => array(
            'http://hogehoge.com/hage.jpg'
        ),
    );
    $content = json_encode($arr_data);
    $opt = array(
        'http' => array(
        'method' => 'POST',
        'header' => 'Authorization: OAuth '.$access_token."\r\n".
                    'Content-Type: application/json',
        'ignore_errors'=>true,
        'content' => $content,
    ));
    $data = file_get_contents($url, false, stream_context_create($opt));
    //成功するとjson形式で返りがある
    print_r(json_decode($data, ture));
?>

ここで気をつけなければならないところは、imageUrlsはjpgかpngでなければならないということです。しかも、拡張子がjpgかpngしかだめです(最後が.jpgまたは.pngのみ受け付ける)。プログラムから吐かれたばあいのIDなどがついている場合はm無効となります。

3.1に加え、サーバー内のローカルイメージの投稿

Content-Type:multipart/form-data
本家でこんな風にしなよとかかれています。

boundary文字列
Content-Disposition: form-data; name="request"
{
  "contentUri" : "http://www.application.com/id=12345",
  "title" : "タイトル",
  "body" : "本文",
  "urls" : {
    "pcUrl" : "http://mixi.jp/run_page_appli.pl?page_id=0&module_id=0&appParams=%7B%22uid%22%3A%221569%22%7D",
    "mobileUrl" : "",
    "smartphoneUrl" : "",
  },
  "sourceId" : "3",
}
boundary文字列
Content-Disposition: form-data; name="image1"; filename="添付画像1.jpg"
Content-Type: image/jpeg
.......添付画像のバイナリデータ

実際に上記のような書き方はしません。
実際は以下のような感じ

<?php
    $page_id = '123456';
    $url = 'http://api.mixi-platform.com/2/pages/' . $page_id . '/feeds';

    $title = 'タイトル';
    $body = '本文の内容';
    $image_file = "/tmp/hoge.jpg";

    $boundary = "".md5(microtime());

    $content = "--".$boundary."\r\n";
    $content.= 'Content-Disposition: form-data; name="request"'."\r\n";
    $content.= "\r\n";
    $content.= json_encode(
                array(
                    "title" => $title,
                    "body" => $body,
               ));
    $content.= "\r\n";
    $content.= "--".$boundary."\r\n";
    $content.= 'Content-Disposition: form-data; name="image1"; filename="' . basename($image_file) . '"'."\r\n";
    $content.= 'Content-Type: image/jpeg'."\r\n";
    $content.= "\r\n";
    $content.= file_get_contents($image_file)."\r\n";
    $content.= "--".$boundary."--";

    $opt = array(
        'http' => array(
        'method' => 'POST',
        'header' => 'Authorization: OAuth '.$access_token."\r\n".
                    'Content-Type: multipart/form-data; boundary='.$boundary;
        'ignore_errors'=>true,
        'content' => $content,
    ));
    $htp['header'] .= "\r\n".'Content-Type: application/json';
    $data = file_get_contents($url, false, stream_context_create($opt));
?>

と、こんな感じで書いて行きます。
実際はもう少しurlencodeしたりとかするんですけどね・・・

あとは、バグっぽいのが、あったけど直ったみたい??
bodyに改行コードがあると投稿できないとか・・・

 
※余談だけど、コメントの投稿でも改行コードを受け付けてくれない・・・
何故か\rははじかれないんだよね・・・でも、mixiページには、改行は反映されていないんだよね・・・ふしぎだなぁ~

スポンサーリンク