private IEnumerator getEkispert(string inputText, int offset)
{
// 検索用URIの作成
string uri = "";
if (Api == dataType.Corporation)
{
uri = Url + "xml/corporation?key=" + Key;
if (inputText != "")
{
uri += "&name=" + WWW.EscapeURL(inputText);
}
}
else if (Api == dataType.CorporationToRail)
{
uri = Url + "xml/rail?key=" + Key + "&corporationName=" + WWW.EscapeURL(inputText);
}
else if (Api == dataType.Rail)
{
uri = Url + "xml/rail?key=" + Key + "&name=" + WWW.EscapeURL(inputText);
}
else if (Api == dataType.RailToStation)
{
uri = Url + "xml/station?key=" + Key + "&railName=" + WWW.EscapeURL(inputText);
// 片方向にしか走っていない場合は取得できないため、directionを指定する
uri += "&direction=none";
}
else if (Api == dataType.Station)
{
uri = Url + "xml/station?key=" + Key + "&name=" + WWW.EscapeURL(inputText);
}
// 都道府県の指定
if (PrefectureCode != "")
{
uri += "&prefectureCode=" + PrefectureCode;
}
// 交通種別の指定
if (Type != "")
{
uri += "&type=" + Type;
}
if (offset != 1)
{
uri += "&offset=" + offset;
}
// Webサービスへの問い合わせ処理
WWW www = new WWW(uri);
yield return www;
// 成功
if (www.error == null)
{
// 処理しやすいようにArrayListへ一時的に格納
if (offset == 1)
{
resultArray = new ArrayList();
}
// Webサービスから取得したXMLの取得
string xmlString = www.text;
// XMLの解析を実行
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(new StringReader(xmlString));
//検索件数を取得
int max = 0;
foreach (XmlNode node in xmlDoc.SelectNodes("ResultSet"))
{
if (node.Attributes.GetNamedItem("max") != null)
{
max = int.Parse(node.Attributes.GetNamedItem("max").Value);
}
}
if (Api == dataType.Corporation)
{
// 会社名が格納されている情報を検索
XmlNodeList corporationList = xmlDoc.GetElementsByTagName("Corporation");
// CorporationをNodeに分ける
foreach (XmlNode corporationNode in corporationList)
{
// 会社の要素内のNodeを解析
foreach (XmlNode corporation in corporationNode.ChildNodes)
{
// Name要素に実際の会社名が格納されている
if (corporation.Name == "Name")
{
// valueに会社名が入っているのでArrayListに格納
resultArray.Add(corporation.FirstChild.Value);
}
}
}
}
else if (Api == dataType.Rail || Api == dataType.CorporationToRail)
{
// 路線名が格納されている情報を検索
XmlNodeList railList = xmlDoc.GetElementsByTagName("Line");
// LineをNodeに分ける
foreach (XmlNode railNode in railList)
{
// 路線の要素内のNodeを解析
foreach (XmlNode rail in railNode.ChildNodes)
{
// Name要素に実際の路線名が格納されている
if (rail.Name == "Name")
{
// valueに路線名が入っているのでArrayListに格納
resultArray.Add(rail.FirstChild.Value);
}
}
}
}
else if (Api == dataType.Station || Api == dataType.RailToStation)
{
// 駅名が格納されている地点情報を検索
XmlNodeList pointList = xmlDoc.GetElementsByTagName("Point");
foreach (XmlNode point in pointList)
{
// 駅名と読み
string stationNameText = "";
string stationYomiText = "";
// 地点に含まれる駅情報をNodeに分ける
foreach (XmlNode pointNode in point.ChildNodes)
{
// NameがStationの要素に駅名が格納されているので比較する
if (pointNode.Name == "Station")
{
// 駅の要素内のNodeを解析
foreach (XmlNode stationNode in pointNode.ChildNodes)
{
// Name要素に実際の駅名が格納されている
if (stationNode.Name == "Name")
{
// valueに駅名が入っているのでArrayListに格納
stationNameText = stationNode.FirstChild.Value;
}
else if (stationNode.Name == "Yomi")
{
// valueに駅名が入っているのでArrayListに格納
stationYomiText = stationNode.FirstChild.Value;
}
}
}
}
//データを格納
resultArray.Add(stationNameText + "," + stationYomiText);
}
}
// ArrayListを配列に変換してインスペクターで見れるようにする
ResultList = (string[])resultArray.ToArray(typeof(string));
// ヒットした情報を確認
if (ResultList.Length == 0)
{
// 0件の場合は該当する情報がないのでメッセージを表示する
Message = "「" + inputText + "」に該当する";
if (Api == dataType.Corporation)
{
Message += "会社名";
}
else if (Api == dataType.Rail || Api == dataType.CorporationToRail)
{
Message += "路線名";
}
else if (Api == dataType.Station || Api == dataType.RailToStation)
{
Message += "駅";
}
Message += "が見つかりませんでした。";
}
// maxに届かなかった場合は更に取得する
if (max > (offset + 100 - 1))
{
StartCoroutine(getEkispert(inputText, offset + 100));
}
else
{
// 処理が完了した際にtrueにする
IsSuccess = true;
Message += "取得が完了しました。";
}
}
else
{
// Webサービスとの通信に失敗した時の処理
Message += "駅すぱあとWebサービスと通信ができませんでした。";
}
}