Posts in Category: iPhone

WordPressでかんたんWeb API構築

えーと、またしても何ヶ月ぶりでしょうか。。1年ぶりくらい?時の経つのは早いですね。
そして、同時進行な案件が重なりすぎて自分のことなんもできません。

そんななか、とあるiPhoneアプリ案件でサーバのデータを拾ってくる処理
いわゆるAPIを叩いてJSONデータのレスポンスを受けるweb APIなアレを作ってます。

普通にPHPやCakePHPでさくっと作ってしまえばいいのですが、クライアント側で更新するためどうしても管理画面が必要なるのですが、
管理画面をイチから構築って地味に面倒ですよね。

そーいやWordpressなら管理画面やらフロントエンドやら一式そろってるし、一発で済むんでないの??ってフと思い立ち
ちょっと試してみました。

WordPressの投稿系は
・カスタム投稿タイプ
・カスタムフィールド
あとはクライアントが使いやすいように管理画面をカスタマイズすれば十分。
ユーザー認証(管理画面へのログイン)も付いてるのでなんと楽なことでしょーか。

リクエスト/レスポンスまわりは プラグインの JSON APIで済みそう。

CakePHPみたいなコントローラークラス内にメソッドを追加していけばそれで受けてくれる模様。

まず、functions.php内にてコントローラーを追加します。
コントローラー名は「TestApi」

// コントローラーを追加
// add_testapi_controllerは登録するための関数名(適宜)
add_filter('json_api_controllers', 'add_testapi_controller');   
function add_testapi_controller($controllers) {   
    $controllers[] = 'TestApi'; //コントローラー名を指定
    Return $controllers; 
} 

// json_api_*コントローラ名*_controller_path コントローラ名は全て小文字

add_filter('json_api_testapi_controller_path', 'testapi_controller_path');   
function testapi_controller_path($default_path) {
    $path=get_template_directory().'/JSON_API_TestApi_Controller.php'; //コントローラのファイルパス
    return $path;   
}

2つめのfilterでハマったのが
「json_api_*コントローラ名*_controller_path」
この記法を変えないように。

get_template_directory().’/JSON_API_TestApi_Controller.php’;
これは、使用中のテンプレートディレクリ直下にコントローラのファイルを置くことを想定しています。

コントローラーファイルもこの記法にしたほうが無難です。
JSON_API_*コントローラ名*_Controller.php

そして、本題のコントローラ
下記のように冒頭にコメントを入れることで、プラグイン設定の部分に概要が表示されます。

<?php
/*
Controller name: TestApi
Controller description: テスト用API
*/
class JSON_API_TestApi_Controller {   
    
    public function all() { 
        $args= array('post_type' => 'post');
        $result_query = new WP_Query($args);          
        
        $result=array();
        if ($result_query->have_posts()) {
            while ($result_query->have_posts()){
                $result_query->the_post();
                
                $data['post_id']=get_the_ID();
                $data['title']=get_the_title();
                $data['date']=get_the_date('Y.m.d H:i');
                $data['content']=get_the_content();
                array_push($result,$data);
            }
        }
        wp_reset_postdata();
        return array( "result" => $result ); 
    }
}
?>

ここでは全投稿記事を取得しjsonで返送するメソッドallを作っています。
みてわかるとおり、フツーに検索してループ内で整形処理し、最後にresultという連想配列へ突っ込んで返しているだけです。
あとはプラグイン側でjsonで出力しています。

今回WP_Queryを使用しましたが、query_postsでも大丈夫です。
フツーにループで処理しているので、カスタム投稿もいつも通りに使えました。

もちろん、the_title() メソッドではechoで出力してしまうので get_the_title()などに置き換えてください。

また、引数を取り合い場合は
$_GET
$_POST
などで普通にPHP的に引数を取得できます。

最後に、コントローラファイルを配置したところで、プラグイン設定のコントローラを有効化します。
(コントローラファイルを配置しない状態ではエラーがでるはず)
WP管理面の「設定」-「JSON API」にてTestAPIを有効化してください。

スクリーンショット 2013-12-01 22.01.43

ちなみに有効化の隣のメソッド名をクリックするとメソッドを呼んでくれます。

さっくり作れるのはいいんですが、トークンやらIDやらなんにもやってないのでダダ漏れ上等なAPIではあります。
あくまでさっくりAPIってことで

Share on Facebook

MacとiPhone/iPadをWiFiルーター無しで接続

先日東京へ行ったとき、ミュージシャンの友人から
WiFiルーターの無いハコでライブするとき、
MacとiPadなどをWiFiで通信するにゃどーやって?
(iOSCやTouchOSCなど特に問題)
という素朴な疑問を投げかけられたんですが、

フツーにWiFiルーター持ち歩くのが一番手っ取り早い方法ではあるけど
実は、OSXは標準で自身がルーターになる機能もってるのです。
ほとんど使うこともないし地味すぎてあまり知られてないだけなんですが
ネット環境のない場所でMacとiPhoneを通信させるもう一つの方法であります。
アドホックというのはちょっと語弊あるかな〜?

無線LAN無し
有線LAN無し
もちろんインターネットも無し
Macを無線LANルーターとして機能させる。
こんな想定で設定してみます。

これはたとえばのネットワーク設定
Ethernet未接続
AirMacも「入」だけどどこにも繋がっていない状態
あとは、ネットワークの設定はなにもしない。(!)

つぎに、

システム環境設定の「共有」を開きます。

「インターネット共有」を選択し(まだチェックはいれないで!)
共有する接続経路を「Ethernet」
つぎにAirMacオプションを押します。

『ネットワーク名」に適当な名前を入力
これはWiFiにおけるSSIDです。WiFiサーチするときに出てくる名前
ライブ中に他の人がアクセスしてきても困りますのでWEPの設定もしておきましょう。

ここまでできたら、先ほどすっとばした、「インターネット共有」にチェックを入れます。
インターネット共有開始確認のダイアログがでるので開始してください。
これでMacはWiFiルーターとして機能します。
もちろんEthernetにはなにもつないでいないのでインターネットなどには繋がりません。
WiFiのLANのみのネットワーク構成されます。

このとき、AirMac状態をメニューバーへ表示するようになっていたらこのような扇+↑になっているはずです。

つぎにiPhone/iPad側の設定。
こちらは通常どおりのWiFi設定だけでOKなのです。
設定/ネットワークを開くと、さきほどMac側で設定したSSIDが見えるはず。
これをタップすると・

WEPのパスワードをきいてくるので入力してください。

無事接続されたら、IPを確認してみましょう。
右端の◎>をタップすると

取得したIPアドレス。
ルーターのIPアドレス。これはホスト側(Mac)のIPということです。
じつは、先に設定したインターネット共有では独自にDHCPが効くようで
クライアント側のIP設定が不要になるナイスな機能でした。

iOSCだとhost設定で↑のルーターIPを入力したり

TouchOSCもHostへルーターIPを入力してください

もちろん制御するアプリに併せてポートなども。

ほいでこれ忘れがちですが
ライブなどが終わったらインターネット共有のチェックは外してくださいませー。

————

あ、ちょっと捕捉

これEthernet無し、他のWifiルーター未接続前提でしたが
他のWiFiルーターへの接続は同居できません。
もし他のWiFiルーターへ接続済みの場合
「共有する接続経路」がAirMacとなり
「相手のコンピューターが使用するポート」にAirMacがでてこなくなります。
要はiPhone/iPadからはこのMacが見えなくなります。
まーiPhone/iPadが他のWiFiルーターへ接続すればいいんですけどね・

あと、共有するデバイスがiPhone/iPadだけではなく、有線のデバイスがある場合(Arduino+Ethershieldとか)
上の「相手のコンピューターが使用するポート」のEthernetをチェックすればおそらく大丈夫かと思います。
DHCPから取得できないデバイスなら 10.0.2.2〜255 で
他の機器とIPがバッティングしないユニークIPを手動で設定しておいてください。

Share on Facebook

ArdOSC (とArduino DHCP , Bonjour )のデモ

できたてホヤホヤのArdOSCを使ってデモってみました。

そもそも

だれでも簡単に使える (iPhone用) 通信デバイス

実はこのことが自分の中では大きなテーマでして
本来であればZigBeeやBluetoothも視野にいれなくちゃなんですけど
ZigBee自体相手があんましいない。iPhoneにゃ標準で付いてない。もっと汎用なのが好き
Bluetoothも何気に壁が多い(個人レベルで。特にiPhoneだとMfiライセンスの壁が。。)

となると Ethernet(Wi-fi)しか残らなくなっちゃう。
あくまでLAN内前提ですが、どうしても自デバイスのIP設定や、相手側のIP/Port設定がネック。というか面倒くさいなーと思っていたところ
Arduino用 DHCP、Bonjourライブラリというのが公開されてたのでこれがあれば設定すっとばせるので設定面倒な懸念がイッキにクリアになりました。
ちなみにこのライブラリの作者、あのFTIRマルチタッチ用のドライバの作者でもありました・親しみを覚えちゃう。

だがしかーし、
このライブラリはとんでもなく超高校級のコードサイズ
使うだけで、最新Arduinoのプログラム領域の半分くらい使っちゃう
正直、そこまでしてArduinoでカッツカツでやるもんじゃないとは思います。。(特にこだわりはないので)
とはいえ、サックリ使えるのは非常に魅力なので、なんとかこれに軽量なOSCライブラリを組み込んでiPhoneと通信させようと作ったのが
今回の ArdOSC でした

前置きながい

今回のデモの構成(手書きww)はこんな感じです
iPhone <-> Arduino direct OSC(ArdOSC) control

Arduino+Ethernet ShieldはWiFiルーターと有線接続
iPhoneはWifiでルーターへ接続

Arduino、iPhone共にDHCPによりIPを取得しています。(Arduinoは EthernetDHCPを使用)

iPhone側ではOSCサーバを起動、およびBonjourにより iPhone IP , OSCサーバポートをパブリッシュさせています。
実際にはCopyByEar(新ver) 内でOSCサーバ起動、Bonjour Publishを行っています。(“_osc._udp”)

Arduino側では
EthernetDHCPによりArduinoのIPを取得
EthernetBonjourによりiPhoneでBonjour publishされた
iPhone IP,OSCサーバポートを自動で取得しています。
具体的には ”_osc._udp”を探し出し、複数の場合は最初に見つけたデバイスを選択
同一LAN内であることと指定のポート10000(CopyByEar側での決め打ち)であることを条件に接続先を決定します。

ここまでできると、相手IP,ポートがわかるので
あとはOSCメッセージをほいほい送るだけです

デモでは、
電源投入(というかリセットからの復帰ですけど、、)
DHCPでのIP取得(LED 赤)
Bonjourでの相手IP.ポート取得成功(LED 黄)

橙ボタン : CopyByEarの再生/ポーズ
緑ボタン : CopyByEarのボタン1(10秒戻る)トリガ
白ボタン : CopyByEarの マークジャンプ/ループ開始 トリガ

をそれぞれデモってます。

iPhone Arduino OSC(ArdOSC) connect demo from recotana on Vimeo.

Share on Facebook

新年のご挨拶 と CopyByEarアップデート

どーもみなさま明けましておめでとうございます。

つーかいまごろか!

クリスマスになんとあのAppbankさんがCopyByEarをレビューしていただいてびっくりこいちゃいました
しかもナイスすぎるほど詳しいレビューでめちゃよかったー。
CopyByEar: 「少しだけ戻る」音楽再生アプリ。これ使える!Podcastにもご対応を!2085

その中でPodcast対応していれば・・というご指摘が
そーいえばなんでか音楽専用(iTunes上での区別)だった。なんでこれにしてたんだろう??
さくっと変更できるので即効podcast/audiobook対応でビルドし直して申請しましたよ12月30日。

ところがどっこい、大晦日に「説明文がイくない。説明文直すだけでいいのでバイナリの再アップは必要ないっすよ。」とAppleからメール。
即効直したので、こりゃー元日Ready for Saleくるかー?来年は幸先いいんでないのー?
とニヤケてたら、さっぱしRFSこない。。

1月7日になってやっと「変更確認したぜ。なんかあったときはまた連絡するわ。」とAppleからメール
おおー。やっとかよ。変更も1ヶ所だけだから即いけるよな?最近は超速審査だしな?
とおもいきや、2日経ってもまだRFSメールこない・・・

iTunesConnect見て確認してみると、なんとリジェクトされてるし!
しかもあのメールしてきた1月7日にリジェクト!
Appleはハシゴ外しの名人ですね!あほー

リジェクト理由のメールも来てないし
リジェクト理由が分からんぞボケ!と再度返事して、即効バイナリだけアップ

何事もなかったように本日Ready for Sale来てました。。。
ちなみに
In Reviewが今日の2:49
Ready for Saleが今日の7:26
約4時間ちょいで審査完了か。やっぱ速いんすね。。

とゆーわけで CopyByEar 無事更新しました。
Podcast、Audiobook に対応となりました。
ご愛顧のほどよろしくお願いします!

↓クリックするとiTunesへ飛びますよ・

ss.jpg

Share on Facebook

iPhoneネタアプリ “CDJ PANIC” リリース!

ちょっとしょーもないもん作っちゃいました。
ぱっと思い浮かんでざっと作って一気にリリース。
初期衝動のモチベーションが消えないうちにやるってのは独り開発では結構重要かも。

CDJでDJをしたことある人ならかならず一度は失敗する様を再現するアプリ。めちゃ無意味。
プレイ中に操作失敗してホール内にジャカジャカ音を響かせた時の焦燥感はいやーなもんですよね。
平静を装ったり、痛々しくもアゲアゲなポーズを無理にしてみたり。
そんな感じを思い出しつつ、慰め(皮肉)のメッセージを噛みしめて終了してくださいませ。

ちなみに終了しない限り止まりません・(ジョークなので怒らないでね。。)

いまみたらミュージック無料のランキングで50位台につけてた。おほ〜。
リリース直後だからだろうけどちょっとうれすい。

CDJ PANIC 無料
CDJ PANIC

cdjpanicss.jpg

Share on Facebook