unity > webを使って電話番号から病院名を照合する

```txt:動作確認
Unity 5.1.1-f1 on MacOS X 10.8.5
```

##code01
web検索して電話番号から病院の名前を表示したい。

今回は日本電話検索サービスというものを利用した。
http://www.jpcaller.com/

Main Cameraに以下のスクリプトを関連付ける。

```CameraControl.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class CameraControl : MonoBehaviour {

	public Text webText;

	IEnumerator Start () {
		string url = "http://www.jpcaller.com/phone/0729883121";
		WWW web = new WWW(url);
		yield return web;

		string res = web.text;
		int pos = res.IndexOf ("<title>");
		if (pos > 0) {
			pos = pos + "<title>".Length;
			webText.text = web.text.Substring (pos, 30);
		} else {
			webText.text = "not found";
		}
	}
	
	void Update () {
	
	}
}
```

##結果

登録されている病院の場合は以下のように病院名が表示される。
![Scene_unity_-_150820-web_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/05a627e2-3467-dedf-683f-d34f22334423.jpeg)

登録されていない電話番号の場合、以下のように電話番号が表示される。
![Scene_unity_-_150820-web_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/e4b47dda-4863-7c57-0731-bca61454fcaa.jpeg)

こういうコードで、いたずら電話やセールス電話を避けて病院からの電話はきちんと出れるようにできればと思う。親類縁者に何かあり病院から連絡があった時に電話に出れなかったというのは後悔すると思うから。

##code02 (未登録チェック付き)

```csharp
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class CameraControl : MonoBehaviour {

	public Text webText;
	public const string kTitle = "<title>";

	string getHospitalName(string txt, string telno) {
		string removed = txt.Substring (kTitle.Length, 30);

		// check with first 3 characters
		string lhs = removed.Substring (0, 3);
		string rhs = telno.Substring (0, 3);
		if (lhs.Equals (rhs)) {
			return "not registered";
		}
		return removed;
	}

	IEnumerator Start () {
//		string telno = "0729883121"; // registered
		string telno = "0729883120"; // not registered
		string url = "http://www.jpcaller.com/phone/";
		WWW web = new WWW(url + telno);
		yield return web;

		string res = web.text;
		int pos = res.IndexOf (kTitle);
		if (pos > 0) {
			webText.text = getHospitalName(web.text.Substring(pos, 40), telno);
		} else {
			webText.text = "not found";
		}
	}
	
	void Update () {
	
	}
}
```

上記のスクリプトでは未登録の電話番号の場合は以下のようになる。

![Scene_unity_-_150820-web_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/d1e05107-7953-7f73-40a7-34fe24defbfc.jpeg)


##code 03 (UIで入力可能にしたもの)

UIのInputFieldとButtonを使用するようにしたもの。
未登録チェックは3文字でなく2文字に変更した。

```csharp
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Linq; // for Where


public class ButtonControl : MonoBehaviour {

	public Text webText;
	public const string kTitle = "<title>";
	public InputField inputField;
	
	string getHospitalName(string txt, string telno) {
		string removed = txt.Substring (kTitle.Length, 30);
		
		// check with first 2 characters
		string lhs = removed.Substring (0, 2);
		string rhs = telno.Substring (0, 2);
		if (lhs.Equals (rhs)) {
			return "not registered";
		}
		return removed;
	}
	
	string removeHyphen(string src) {
		var dst = new string (src.Where (c => !"-".Contains (c)).ToArray ());
		return dst;
	}
	
	IEnumerator checkHospitalTelephoneNumber() {
		//		string telno = "0729883121"; // registered
		//		string telno = "0729883120"; // not registered
		string telno = inputField.text;
		string url = "http://www.jpcaller.com/phone/";
		
		// remove "-" from telno
		telno = removeHyphen (telno);
		
		WWW web = new WWW(url + telno);
		yield return web;
		
		string res = web.text;
		int pos = res.IndexOf (kTitle);
		if (pos > 0) {
			webText.text = getHospitalName(web.text.Substring(pos, 40), telno);
		} else {
			webText.text = "not found";
		}
	}

	public void OnClick() {
		StartCoroutine("checkHospitalTelephoneNumber");
	}

}
```

![Scene_unity_-_150820-web_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/d7352c08-0c80-5dde-0a46-8b67897c8579.jpeg)

電話番号に"-"がついていてもOK
![Scene_unity_-_150820-web_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/900e526b-d6e8-ccbc-6048-5fef869b94f7.jpeg)


このあたりのリストで検索したところ、うまく表示されているようだ。
https://www.hospital.or.jp/shibu_kaiin/?sw=27&sk=1

病院以外の登録番号もあるようだ。その場合、その名前が表示されるようになっている。
病院だけの絞込をしようとすると失敗するかもしれないので、とりあえずこのままとする。
![Scene_unity_-_150820-web_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/36568074-a678-3eb3-dc45-c9cab42d42e8.jpeg)