2016年4月30日土曜日

LINE BOT APIが公開されたので、LINEとIFTTTをつなげるシステム作ってみた


2016年の今、日本で最も流行っているコミュニケーションツールはLINEで間違いないでしょ。そんなLINEが来たるコンピュータの高度な自動応答時代に対応するため、LINE BOT APIを公開しました。
自動応答といえばサービスをつなぐIFTTTが世界のスタンダードです。LINEをIFTTTに接続して双方向通信できれば、LINE社が志向することを実現できると思い、サービスを構築しました。
下記に説明を書きました。
https://github.com/MypaceEngine/ifttt-line/wiki/IFTTT-LINE-WIKI

GAEを中継させて、LINEとIFTTT Makerを双方向に繋いでます。使ってくれる人がいると嬉しいですね。

私はEvernoteと繋いで、LINEを画像付きのメモ帳にして使っています。チャット的にメモしながら写真をとったりできて、全部、バックアップをEvernoteに取れていいですね。

2015年2月26日木曜日

HMDも唐揚げもバカ盛り! VRまつり2015冬 向けアプリ [Cardboard]Tell Your World/IA

Android端末とCardboardでIAを立体視体験できるデモアプリです。

(注意)このアプリケーションを楽しむにはAndroid端末以外にCardboardが必要です。
https://developers.google.com/cardboard/

(注意)このアプリケーションの動作にはNexus5相当以上の性能が必要です。古い端末や低い性能の端末だとまともに動きません。

(注意)このアプリケーションはファイルサイズが50MBもあるため、モバイル回線経由ではなく、自宅などWIFIが使える環境でダウンロードすることをお勧めします。

Unity + Cardboard SDK + MMD4Mecanimの組み合わせで開発されております。
本デモアプリケーションでは下記を利用させていただいております。

下記を公開配布してくださっている皆様、ありがとうございます。
すばらしいものばかりです。

[Unity]
アプリケーションの基盤として使用させていただきました。
http://japan.unity3d.com/

[Cardboard SDK for Unity]
スマートフォン上での立体視用カメラのAssetを利用させていただきました。
https://developers.google.com/cardboard/unity/

[MMD4Mecanim]
Unity上でMMDのデータを読み込むのに使用させていただきました。
nora様
Stereoarts Homepage
http://stereoarts.jp/

[音源]
GMF159 様
【IA】 Tell Your World 【VOCALOIDカバー】
http://www.nicovideo.jp/watch/sm18577079

[原曲]
wakamuraP様 x fantasista utamaro様 x TAKCOM様
livetune feat. 初音ミク 『Tell Your World』Music Video
https://www.youtube.com/watch?v=PqJNc9KVIZE&hd=1

[モデル]
mqdl様
IAx
http://mqdl.jpn.org/public/IAx.zip

[モーション]
らじ様
Tell_Your_World_Ver.八景島
https://bowlroll.net/file/11226

[背景]
ussy様
【データ配布】スカイドーム素材集 vol.01
http://www.nicovideo.jp/watch/sm10968092

[キャラクター使用に関するライセンス]
この作品は1st PLACE株式会社の「ライブラリ・キャラクターの利用のルール」に基づいて1st PLACE株式会社のキャラクター「IA」を使用したものです。
IAは1st PLACE株式会社の創作物です。
1st PLACE株式会社が定めるキャラクター利用のガイドライン(http://1stplace.co.jp/software/vocaloid/のページ下部にリンクあり)に沿って、非営利/無償のアプリケーションとして作成されています。

[ダウンロード]

2015年2月25日水曜日

HMDも唐揚げもバカ盛り! VRまつり2015冬 向けアプリ [Cardboard]Eden/MegurineLuka

Android端末とCardboardで巡音ルカを立体視体験できるデモアプリです。

(注意)このアプリケーションを楽しむにはAndroid端末以外にCardboardが必要です。
https://developers.google.com/cardboard/

(注意)このアプリケーションの動作にはNexus5相当以上の性能が必要です。古い端末や低い性能の端末だとまともに動きません。

(注意)このアプリケーションはファイルサイズが100MBもあるため、モバイル回線経由ではなく、自宅などWIFIが使える環境でダウンロードすることをお勧めします。

Unity + Cardboard SDK + MMD4Mecanimの組み合わせで開発されております。
本デモアプリケーションでは下記を利用させていただいております。

下記を公開配布してくださっている皆様、ありがとうございます。
すばらしいものばかりです。

[Unity]
アプリケーションの基盤として使用させていただきました。
http://japan.unity3d.com/

[Cardboard SDK for Unity]
スマートフォン上での立体視用カメラのAssetを利用させていただきました。
https://developers.google.com/cardboard/unity/

[MMD4Mecanim]
Unity上でMMDのデータを読み込むのに使用させていただきました。
nora様
Stereoarts Homepage
http://stereoarts.jp/

[音源]
RT_factory 様
【巡音ルカ】 EDEN 【オリジナル】
http://www.nicovideo.jp/watch/sm7414267

[モデル]
ula様
巡音ルカ Ver 3.14
http://kotankor.blog46.fc2.com/blog-entry-63.html

[モーション]
yurie様
【MMD戦国BASARA】エデン モーショントレース
http://www.nicovideo.jp/watch/sm19108193

[背景]
Kanihira様
White Tower
http://www.mediafire.com/download/3tthmm2mmh2/WhiteTower.zip

[キャラクター使用に関するライセンス]
この作品はピアプロ・キャラクター・ライセンスに基づいてクリプトン・フューチャー・メディア株式会社のキャラクター「巡音ルカ」を使用したものです。
巡音ルカはクリプトン・フューチャー・メディア株式会社の創作物です。
クリプトン・フューチャー・メディアが定めるキャラクター利用のガイドライン(http://piapro.jp/license/character_guideline)に沿って、非営利/無償のアプリケーションとして作成されています。

[ダウンロード]
<中心点固定版>
<キャラクター追従型>
https://www.dropbox.com/s/392z3wa49jlpp9t/eden_dynamic.apk?dl=0


2014年7月21日月曜日

MMD動画作成者のためのUnity+dive+ MMD4Mecanimでお手軽アプリ作成入門

MMDで
・モデルを作成されている方
・モーションを作成されている方
・動画を作成されている方
はちょっとの手間で3DAndroidアプリを作ることができます。

たとえば下記のようなアプリが簡単に作れます。
「[dive] WAVEFILE/初音ミク fullver.」
WAVEFILE/初音ミク fullver. をうたいながら踊っている初音ミクさんをさまざまな方向から見ることができるAndroidアプリ
https://play.google.com/store/apps/details?id=com.mypaceengine.mmdtest&hl=ja

このアプリのWindows上での作り方を説明します。
利用するものは下記です。
[Unity]
アプリケーションの基盤として使用させていただきました。
http://japan.unity3d.com/

[durovis dive]
スマートフォン上での立体視用カメラのAssetを利用させていただきました。
https://www.durovis.com/dive.html

[MMD4Mecanim]
Unity上でMMDのデータを読み込むのに使用させていただきました。
nora様
Stereoarts Homepage
http://stereoarts.jp/

この組み合わせですとアプリの作成にかかる追加コストは0円です。(無償で公開くださっている方に感謝!)
[準備]
①JDKのインストール
下記からインストーラをダウンロードして、実行してください。
http://www.oracle.com/technetwork/java/javase/downloads/index.html

下記を参照し、システム環境変数JAVA_HOMEを設定してください。
http://www.javadrive.jp/install/jdk/index4.html

②AndroidSDKのインストール
下記からインストーラをダウンロードして、実行してください。
http://developer.android.com/sdk/index.html
詳細は下記をご参照ください。
http://developer.android.com/sdk/installing/index.html?pkg=tools

③Unityのインストール
下記からインストーラをダウンロードして、実行し、Unityをインストールします。
http://japan.unity3d.com/unity/download/

Unityを起動しておきましょう。

④MMD4Mecanimのインストール
下記からMMD4Mecanim (Beta)をダウンロードして、ダブルクリックしてUnityのプロジェクトにインポートしましょう。
http://stereoarts.jp/

インストール方法は下記を参照。
http://stereoarts.jp/MMD4Mecanim%20%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%88%E5%9F%BA%E6%9C%AC%E7%B7%A8%EF%BC%89.pdf

⑤Durovis diveのインストール
下記からDive Unity Plugin Packageをダウンロードして、ダブルクリックしてUnityのプロジェクトにインポートしましょう。
https://www.durovis.com/sdk.html

既存のカメラをdiveに差し替えてください。

[モデル設置]
①モデル/モーション/背景/音源の用意

MMDで作成したモデル/モーション/背景を用意してください。

②モデル/モーション/背景のインポート
下記をご参照いただき、インポートをしてください。
http://stereoarts.jp/MMD4Mecanim%20%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%88%E5%9F%BA%E6%9C%AC%E7%B7%A8%EF%BC%89.pdf

③背景/モデル/カメラの位置調整

背景/モデルの中心位置をお決めください。
サンプルでは背景/モデルは座標(0,0,0)を中心に設定しました。

④スクリプトの調整
左のボックスで[Dive_Camera]を選択してください。
Open Dive Sensor (Script)のOpen Dive Sensorをダブルクリックして、スクリプト画面を起動し、書き換えてください。
http://mypace-engine.blogspot.jp/2014/07/float-ypfloat0.html

⑤曲の付与
下記をご参照ください。
http://stereoarts.jp/MMD4Mecanim%20%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA%E5%90%8C%E6%9C%9F.pdf

[リリースビルド]
下記をご参照ください。
http://akira-watson.com/android/unity-android-release.html

違うモデルやモーションなどでアプリを作りたい場合は、
①すでに設置されているものを撤去する
②[モデル設置]と[リリースビルド]からやり直す
で出来ます。

実際にやってみると、準備編はUnityやAndroid SDKのダウンロードに時間がかかりますが、 モデル設置は15分もかからないと思います。
MMDをお使いになっている方で、興味がある方はぜひ動画作成のついでにAndroidアプリのリリースもしてみませんか。
雑ですが参考になると幸いです。

Unity+diveで視線の角度に合わせて、特定のオブジェクトにカメラを向け続ける

Unity+diveで「踊っている初音ミクさんを好きな角度から見ることができるAndroidアプリ」を開発しました。
https://play.google.com/store/apps/details?id=com.mypaceengine.mmdtest&hl=ja 
このアプリで使用している「特定の座標を中心に視線の角度に合わせて、カメラを移動するアルゴリズム」は以下をご参照ください。ちなみにこの例ですと座標(0,0.9,0)を中心としています。

適用方法は下記です。
①diveをAssetとしてUnityにImport
②「Open Dive Sensor(Script)」を追加する。
③ScriptのOpenDiveSensorを開き、それぞれ下記のように追記する。

 フィールドへ下記を追記
//カメラの回転角の格納
Quaternion rot;

void Start ()に下記を追記
//カメラの回転角を取得
rot=Quaternion.identity;

void Update ()に下記を追記
//カメラの回転角を反映
transform.rotation = rot;
//カメラのデフォルトの高さを0.9、上下の半径は1.2として、カメラの高さ(Y座標)を演算
float yp=(float)(0.9+(UnityEngine.Mathf.Sin(rot.eulerAngles.x* UnityEngine.Mathf.Deg2Rad)*1.2));
//球の平行の半径は1.6とし、カメラの高さに合わせて、球の平面円の半径を演算
float hankei=(float)(UnityEngine.Mathf.Cos(rot.eulerAngles.x* UnityEngine.Mathf.Deg2Rad)*1.6);
//半径とカメラの角度からX座標を演算
float xp=(float)(UnityEngine.Mathf.Sin(-rot.eulerAngles.y* UnityEngine.Mathf.Deg2Rad)*hankei);
//半径とカメラの角度からZ座標を演算
float zp=-(float)(UnityEngine.Mathf.Cos(-rot.eulerAngles.y* UnityEngine.Mathf.Deg2Rad)*hankei);
//カメラにXYZ座標を設定
transform.position=new UnityEngine.Vector3(xp,yp,zp);

移動しているオブジェクトに追従する場合は、追従したいオブジェクトのXYZ座標を(xp,yp,zp)に足しこめば、実現できます。

2013年3月12日火曜日

2012年5月12日土曜日

ニコニコ静画のお題と漫画のAPI



  1. お題の一覧取得

http://seiga.nicovideo.jp/theme/list/{カテゴリタイプ}/?page={ページ番号}&sort={ソート種別}

[カテゴリタイプ]
all:総合
genre_ent:エンターテイメント・ニュース・スポーツ・音楽
ent:エンターテイメント
news:ニュース
sports:スポーツ
music:音楽
genre_culture:アニメ・ゲーム・漫画
anime:アニメ
game:ゲーム
comic:漫画
genre_life:生活
animal:動物
cook:料理
vehicle:乗り物
view:風景
nature:自然
genre_other:描いてみた・モバイル・ニコニコ生放送・テスト・その他
draw:描いてみた
mobile:モバイル
live:ニコニコ生放送
test:テスト
other:その他
genre_adult:R-18ジャンル
r18:R-18

[ページ番号]
1から

[ソート種別]
comment_created:コメントの新しい順
comment_created_a:コメントの古い順
res_created:画像の新しい順
res_created_a:画像の古い順
theme_created:作成の新しい順
theme_created_a:作成の古い順
theme_mylist:マイリスト登録の多い順
theme_mylist_a:マイリスト登録の少ない順
theme_speed:勢いの速い順
theme_speed_a:勢いの遅い順
theme_view:再生数の多い順
theme_view_a:再生数の少ない順
res_count:画像投稿数の多い順
res_count_a:画像投稿数の少ない順
comment_count:コメントの多い順
comment_count_a:コメントの少ない順

ログイン不要です。
/bbs/sgxxxxx/を検出し、お題番号の抽出でいけると思います。
動画履歴が含まれているので、http://seiga.nicovideo.jp/my/historyから動画履歴情報を
取得して、除外するといいと思います。
動画履歴情報はCookieに関連付けられているので、Cookieのクリア後、取得のほうが
スマートですね。


  1. お題情報取得


http://seiga.nicovideo.jp/api/theme/info?id={静画番号}

[静画番号]
静画番号の数値の部分だけです。
sg11111なら11111ですね。

レスポンスは下記のような感じ
<?xml version="1.0" encoding="UTF-8"?>
<response>
<theme>
<id>33674</id>
<title>第七回MMD静止画選手権 本選 第3投稿会場</title>
<res_count>56</res_count>
<comment_count>115</comment_count>
<view_count>1231</view_count>
<mylist_count>25</mylist_count>
<speed>57</speed>
<status>0</status>
<bgm_id />
<import_flag>0</import_flag>
<delete_flag>0</delete_flag>
<campaign_name />
<theme_type>0</theme_type>
<content />
<command>shita</command>
<created>2012-05-11 22:51:52</created>
<updated>2012-05-12 20:00:50</updated>
<image_id>2044438</image_id>
<tag_list>
<tag>
<target_id>33674</target_id>
<tag_id>6</tag_id>
<lock_status>1</lock_status>
<created>2009-11-14 15:08:07</created>
<updated>2009-11-14 15:08:07</updated>
<id>6</id>
<name>描いてみた</name>
<normalize>描イテミタ</normalize>
<normalize_tag_id>6</normalize_tag_id>
<manga_count>0</manga_count>
</tag>
<tag>
                         ・
                         ・
                         ・
</tag>
</tag_list>
<thumbnail_url>http://lohas.nicoseiga.jp/thumb/2044438s</thumbnail_url>
<image_count>56</image_count>
<description />
</theme>
</response>


  1. 静画一覧取得(お題)

http://seiga.nicovideo.jp/api/theme/data?theme%5Fid={静画番号}

[静画番号]
静画番号の数値の部分だけです。
sg11111なら11111ですね。

レスポンスは下記のような感じ
<?xml version="1.0" encoding="UTF-8"?>
<response>
<image_list>
<image>
<id>2044438</id>
<number>1</number>
<res_id>1092373</res_id>
<comment_count>3</comment_count>
<image_id>2044438</image_id>
<delete_flag>0</delete_flag>
<delete_type>0</delete_type>
<comment_id>9110019</comment_id>
<comment_user_id>1293397</comment_user_id>
<user_name />
<user_hash>d+moNaUJgaU4Hhqwv0Vy+8+xd6k</user_hash>
<anonymous_flag>1</anonymous_flag>
<content />
<command>shita</command>
<comment_number>1</comment_number>
<type>2</type>
<send_from>0</send_from>
<ip_address>180.2.40.154</ip_address>
<comment_delete_flag>0</comment_delete_flag>
<comment_status>0</comment_status>
</image>
<image>
                  ・
                  ・
                  ・
</image>
</image_list>
<comment_list>
<comment>
<comment_id>9110019</comment_id>
<id>9110019</id>
<image_id>2044438</image_id>
<res_id>1092373</res_id>
<content />
<command>shita</command>
<created>2012-05-11 22:51:52</created>
<frame>-1</frame>
<user_hash>d+moNaUJgaU4Hhqwv0Vy+8+xd6k</user_hash>
<anonymous_flag>1</anonymous_flag>
</comment>
<comment>
                  ・
                  ・
                  ・
</comment>
</comment_list>
</response>


  1. 漫画一覧取得

[総合]
http://seiga.nicovideo.jp/manga/list?page={ページ}&sort={ソート方法}
[カテゴリ指定]
http://seiga.nicovideo.jp/manga/list?page={ページ}&sort={ソート方法}&category={カテゴリ}
[公式]
http://seiga.nicovideo.jp/manga/list?page={ページ}&official=1&sort={ソート方法}

{ソート方法}
manga_updated:更新が新しい順
manga_updated_a:更新が古い順
manga_created:投稿が新しい順
manga_created_a:投稿が古い順
manga_view:再生数が多い順
manga_view_a:再生数が少ない順

{ページ}
1から

{カテゴリ}
shonen:少年マンガ
seinen:青年マンガ
shojo:少女マンガ
yonkoma:4コママンガ
other:その他マンガ
fan:ファンコミック

comic/29を取り出し、漫画番号(<-だと29)を取得したらいいと思います。


  1. 漫画のエピソード情報取得

http://seiga.nicovideo.jp/rss/manga/{漫画番号}

RSS形式です。

レスポンスは下記
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>真の勇者はしゃべらない - ニコニコ静画(漫画)</title>
    <link>http://seiga.nicovideo.jp/manga/613</link>
    <description><![CDATA[真の勇者はしゃべらない の更新情報です]]></description>
    <pubDate>Sat, 12 May 2012 21:10:24 +0900</pubDate>
    <language>ja</language>
    <copyright>(c) niwango, inc. All rights reserved.</copyright>
   
      <item>
        <title>真の勇者はしゃべらない 第1話「我輩は勇者である。台詞はもうない。」</title>
        <link>http://seiga.nicovideo.jp/watch/mg31432</link>
        <description><![CDATA[
          <p class="nicoseiga-thumbnail">
            <img src="http://lohas.nicoseiga.jp/thumb/1921262q" border="0" />
          </p>
          <p class="nicoseiga-description">魔王がいる世界。この世界では毎年くじによって勇者が決められる。
勇者になったものは一年間勇者として魔王を討伐しにいかなくてはならないのだが、今まで倒すことができなかった。
今年は少年が勇者に選ばれた。少年は魔王を倒すことができるのか?(一部編集しました)</p>
          <p class="nicoseiga-info"><small>
            <strong class="nico-info-date">2012年04月01日 17:58 投稿</strong>
          </small></p>
        ]]></description>
        <guid isPermaLink="false">efdf562ce2fb0ad460fd8e9d33e57f57</guid>
        <pubDate>Sun, 01 Apr 2012 17:58:38 +0900</pubDate>
      </item>
      <item>
       ・
       ・
       ・
      </item>
 
  </channel>
</rss>


  1. 静画一覧取得(漫画)

http://seiga.nicovideo.jp/api/theme/data?theme%5Fid={漫画番号}

[漫画番号]
漫画番号の数値の部分だけです。
mg11111なら11111ですね。


レスポンスは下記
<?xml version="1.0" encoding="UTF-8"?>
<response>
<image_count>53</image_count>
<image_list>
<image>
<id>1921156</id>
<se_id />
<bgm_id>3832</bgm_id>
<bgm_loop>0</bgm_loop>
<duration>80</duration>
<thread>2705</thread>
<leaf>4</leaf>
<width>2048</width>
<height>1536</height>
<cache_time />
<bgm_path>/sound/bgm/30132c/3832</bgm_path>
<balloon>
<image_id>1921156</image_id>
<x>490</x>
<y>6</y>
<w>128</w>
<h>225</h>
<is_auto>1</is_auto>
</balloon>
</image>
<image>
         ・
         ・
         ・
</image>
</image_list>
<comment_list>
<comment />
</comment_list>
<threads>
<thread>
<id>2705</id>
<url>http://msg01.seiga.nicovideo.jp:80/</url>
</thread>
</threads>
</response>


  1. 漫画コメント

http://msg01.seiga.nicovideo.jp/api/thread?thread={threadid}&version=20090904&res_from=-1000

[threadid]
静画一覧取得(漫画)で取得できるthread

レスポンスは下記
<packet>
<thread resultcode="0" thread="2705" last_res="84" ticket="0x17837480" revision="1" server_time="1336826321"/>
<leaf thread="2705" leaf="1" count="2"/>
<leaf thread="2705" leaf="3" count="2"/>



<leaf thread="2705" leaf="51" count="5"/>
<leaf thread="2705" leaf="52" count="6"/>
<view_counter video="0" id="mg31432"/>
<chat thread="2705" no="1" vpos="11437" date="1333271513" mail="184" user_id="lsjMy2AAWvZ2KrbFT6UlukxuFm0" anonymity="1" leaf="1">um</chat>
<chat thread="2705" no="2" vpos="67812" date="1333271543" mail="184" user_id="lsjMy2AAWvZ2KrbFT6UlukxuFm0" anonymity="1" leaf="11">BGMいいね</chat>



<chat thread="2705" no="83" vpos="269187" date="1336790348" mail="184" user_id="5q4BsOtcITXPdG3-ukLCGuvDaw0" anonymity="1" leaf="44">w</chat>
<chat thread="2705" no="84" vpos="295375" date="1336790365" mail="184" user_id="5q4BsOtcITXPdG3-ukLCGuvDaw0" anonymity="1" leaf="49">いやはなすがふつうだろ</chat>
</packet>