はじめに
Wikipediaの情報をUnity上で取得してUnity上で表示させてみたいなぁ。 とおもったので作ってみました。
この記事ではバージョン5.3.5f1のUnityを使います。
作ったものについて
指定したWikipedia記事がどの記事からリンクされているかを取得して表示させるだけものを作ってみました。
Wikipediaの情報を表示させるまでの流れ
ざっくりと書くとこんな感じになります
WWWクラスを使ってWikipediaからJSONを取得
> JsonUtilityを使ってJSONをObjectへ変換
> Objectをメンバ変数に格納(インスペクターに表示される)
ソースコード
以下はソースコードとなります。 シーン内の適当なオブジェクトにアタッチして再生すれば動きます
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class WikipediaManager : MonoBehaviour
{
public string title = "シーラカンス";
public Wikipedia.RootObject wikipedia;
IEnumerator Start()
{
var param = new Dictionary<string, string> ();
param ["format"] = "json"; // JSON形式で取得
param ["action"] = "query"; // アクション
param ["prop"] = "links"; // リンクを取得
param ["bltitle"] = title; // 記事タイトル
param ["list"] = "backlinks"; // リンク元を取得
param ["bllimit"] = "16"; // 取得するリンク数の上限
// WikipediaからJSONを取得
WWW www = this.GET("http://ja.wikipedia.org/w/api.php?", param);
yield return www;
Debug.Log(www.text);
// JSONデータ -> Wikipediaオブジェクト
var wikipedia = JsonUtility.FromJson (www.text, typeof(Wikipedia.RootObject)) as Wikipedia.RootObject;
this.wikipedia = wikipedia;
}
private WWW GET(string url, Dictionary<string,string> param)
{
foreach (var p in param)
{
url += string.Format ("{0}={1}&", p.Key, p.Value);
}
WWW www = new WWW (url);
StartCoroutine (WaitForRequest (www));
return www;
}
private IEnumerator WaitForRequest(WWW www)
{
yield return www;
// check for errors
if (www.error == null) {
Debug.Log ("WWW OK");
} else {
Debug.Log ("WWW Error: " + www.error);
}
}
}
以下は JSONデシリアライズ用に用意したクラスです.
using UnityEngine;
using System.Collections.Generic;
namespace Wikipedia
{
[System.Serializable]
public class Backlink
{
public int pageid;
public int ns;
public string title;
public string redirect;
}
[System.Serializable]
public class Query
{
public List<Backlink> backlinks;
}
[System.Serializable]
public class RootObject
{
public string batchcomplete;
public Query query;
}
}
Titleを変えて実行してみる
Titleを変えて実行すると異なる結果が表示されます。
試しにマクドナルドと入れてみると....
宇多田ヒカルからリンクされているみたいです。
だいぶ下のほうにありました。 文字列を適当に入れるだけでもけっこう遊べますね。 (完
#参考URL
MediaWiki APIを使ってWikipediaの情報を取得
http://qiita.com/yubessy/items/16d2a074be84ee67c01f#%E8%A8%98%E4%BA%8B%E3%81%8B%E3%82%89%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E8%A8%98%E4%BA%8B%E3%81%AE%E4%B8%80%E8%A6%A7%E3%82%92%E5%8F%96%E5%BE%97
JsonからC#のクラスモデルを作成してくれるサイト リンク
http://qiita.com/maeda_t/items/8da3ac3826988adf6f32
Unity5.3でJsonを扱うまとめ
http://qiita.com/toRisouP/items/53be639f267da8845a42