15
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Unity】Wikipediaから情報を取得して表示させてみる【ネタ】

Last updated at Posted at 2016-08-03

はじめに

Wikipediaの情報をUnity上で取得してUnity上で表示させてみたいなぁ。  とおもったので作ってみました。

この記事ではバージョン5.3.5f1のUnityを使います。

作ったものについて

指定したWikipedia記事がどの記事からリンクされているかを取得して表示させるだけものを作ってみました。


image

Wikipediaの情報を表示させるまでの流れ

ざっくりと書くとこんな感じになります

WWWクラスを使ってWikipediaからJSONを取得
 >  JsonUtilityを使ってJSONをObjectへ変換
  >  Objectをメンバ変数に格納(インスペクターに表示される)

ソースコード

以下はソースコードとなります。 シーン内の適当なオブジェクトにアタッチして再生すれば動きます

WikipediaManager.cs
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デシリアライズ用に用意したクラスです.

Wikipedia.cs
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

15
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?