API определения местоположения Google Cell Tower: изменен? - PullRequest
1 голос
/ 21 ноября 2011

За последние несколько месяцев я находил местоположения вышек сотовой связи, поскольку мы используем их cellid и areaid, основываясь на следующем коде:

   public class GoogleService
    {
        public GoogleCell GetCellInfo(string lac, string mnc, string mcc, string cellID)
        {
            try
            {
                HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("https://www.google.com/loc/json");
                myReq.Method = "POST";
                myReq.ContentType = "application/jsonrequest";
                string postData = "{\"cell_towers\": [{\"location_area_code\": \"" + lac + "\", \"mobile_network_code\": \"" + mnc + "\", \"cell_id\": \"" + cellID + "\", \"mobile_country_code\": \"" + mcc + "\"}],  \"version\": \"1.1.0\", \"request_address\": \"true\"}";
                myReq.ContentLength = postData.Length;

                StreamWriter stOut = new StreamWriter(myReq.GetRequestStream(), System.Text.Encoding.ASCII);
                stOut.Write(postData);
                stOut.Close();

                HttpWebResponse webresponse;
                webresponse = (HttpWebResponse)myReq.GetResponse();
                Encoding enc = System.Text.Encoding.UTF8;
                StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream(), enc);

                string Response = loResponseStream.ReadToEnd();
                loResponseStream.Close();
                webresponse.Close();


                GoogleCell Mycell = JsonConvert.DeserializeObject<GoogleCell>(Response);

                return Mycell;
            }
            catch (Exception ex)
            {
                string strErr = ex.Message;

                if (ex.InnerException != null)
                {
                    strErr += ": " + ex.InnerException.Message;
                }
                MessageBox.Show(strErr);
                return new GoogleCell();
            }
        }


    }

    public class GoogleCell
    {
        public GoogleCell() { }
        public GoogleCell(string mnc, string mcc, string lac)
        {
            this.Mnc = mnc;
            this.Mcc = mcc;
            this.Lac = lac;
        }
        public string Mnc { get; set; }
        public string Mcc { get; set; }
        public string Lac { get; set; }
        public string CellID { get; set; }
        public Location location { get; set; }


        public class Location
        {
            public Location() { }
            public Location(string latitude, string longitude)
            {
                this.latitude = latitude;
                this.longitude = longitude;
            }
            public string latitude { get; set; }
            public string longitude { get; set; }
            public Address address { get; set; }

            public class Address
            {
                public Address() { }
                public string country { get; set; }
                public string country_code { get; set; }
                public string city { get; set; }
                public string region { get; set; }
                public string street { get; set; }
                public string street_number { get; set; }
                public string postal_code { get; set; }
            }
        }

Код работал безупречно, пока между одним идве недели назад, когда он начал возвращать ошибку 400: Bad Request при выполнении GetRequestStream ().

Мой код не изменился.Я не могу найти записи об изменении параметров API.Что еще может происходить?При этом используется Google Gears, который уже давно устарел, но я не могу найти документацию по замене , которая находит вышки сотовой связи.

есть идеи?

1 Ответ

3 голосов
/ 25 ноября 2011

В итоге я выкинул Google на обочину и использовал OpenCellID:

public CellTowerPOCO GetCellInfo_OpenCellID(string lac, string mnc, string mcc, string cellID)
{
    try
    {
        HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(string.Format("http://www.opencellid.org/cell/get?mcc={0}&mnc={1}&cellid={2}&lac={3}",mcc,mnc,cellID,lac));

        HttpWebResponse webresponse;
        webresponse = (HttpWebResponse)myReq.GetResponse();
        //Encoding enc = System.Text.Encoding.UTF8;


        StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream());

        string Response = loResponseStream.ReadToEnd();
        loResponseStream.Close();
        webresponse.Close();


        CellTowerPOCO Mycell = new CellTowerPOCO();

        XmlDocument xdoc = new XmlDocument();
        xdoc.LoadXml(Response);

        Mycell.location.latitude = xdoc.ChildNodes[1].FirstChild.Attributes["lat"].Value;
        Mycell.location.longitude = xdoc.ChildNodes[1].FirstChild.Attributes["lon"].Value;
        Mycell.Mcc = mcc;
        Mycell.CellID = cellID;
        Mycell.Mnc = mnc;

        //MessageBox.Show(xdoc.ChildNodes[0].InnerText);

        return Mycell;
    }
    catch (Exception ex)
    {
        string strErr = ex.Message;

        if (ex.InnerException != null)
        {
            strErr += ": " + ex.InnerException.Message;
        }
        MessageBox.Show(strErr);
        return new CellTowerPOCO();
    }
}
...