Получить долготу и широту от API - PullRequest
0 голосов
/ 12 февраля 2020

Я искал в Google и здесь, в стеке, но из-за моего ограниченного опыта в C# и SSIS у меня возникли некоторые проблемы.

Мои шаги в этом пакете служб SSIS следующие:

1) У меня есть задача SQL, подключенная к a для l oop, которая только указывает, сколько раз я должен повторяться в Foorl oop контейнер, который = 1

2) Внутри Foorl oop контейнер имеет задачу потока данных

3) В задаче потока данных я использую источник OLEDB для получения адресов из SQL table

4) Я подключаю этот источник OLEDB к задаче «Сценарий», из которой следующий скрипт «Должен» вернуть мой XML ответ, из которого я хочу вернуть широту и долготу. Он не возвращает ответ, который я хочу.

Пример адреса - Бейхингер Штрассе 160 DE-71726 БЕННИНГЕН ГЕРМАНИЯ

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    string url = "http://dev.virtualearth.net/REST/v1/Locations?addressLine={0}&output=xml&key={1}";
    var Address = Row.Address;
    var wGet = WebRequest.Create(String.Format(url, Address, Variables.APIkey));
    wGet.Method = WebRequestMethods.Http.Get;
    var response = wGet.GetResponse();
    var status = ((HttpWebResponse)response).StatusDescription;
    Console.WriteLine("Input: " + Address);



    if (status == "OK")
    {
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string responseFromServer = reader.ReadToEnd();
        reader.Close();

        var xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(responseFromServer);
        var nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
        nsmgr.AddNamespace("Point", "http://schemas.microsoft.com/search/local/ws/rest/v1");
        var latNode = xmlDoc.DocumentElement.SelectSingleNode("/ResourceSets/ResourceSet/Resources/Location/Point/Latitude", nsmgr);
        var lngNode = xmlDoc.DocumentElement.SelectSingleNode("/ResourceSets/ResourceSet/Resources/Location/Point/Longitude", nsmgr);


        if (latNode != null && lngNode != null)
        {
            var numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = "." };
            Row.Latitude = decimal.Parse(latNode.InnerText, numberFormatInfo);
            Row.Longitude = decimal.Parse(lngNode.InnerText, numberFormatInfo);
            Row.FullResponse = responseFromServer.ToString();

        }
        else
        {
            //Set to null
            Row.Latitude_IsNull = true;
            Row.Longitude_IsNull = true;
            Row.FullResponse = responseFromServer.ToString();

        }
    }
    else
    {
        //Set to null
        Row.Latitude_IsNull = true;
        Row.Longitude_IsNull = true;
        Row.FullResponse_IsNull = true;

    }


    response.Close();
}

}

Ответ i get is,

Copyright © 2020 Microsoft и ее поставщики. Все права защищены. К этому API нельзя получить доступ, а содержимое и любые результаты не могут быть использованы, воспроизведены или переданы каким-либо образом без письменного разрешения express корпорации Microsoft. http://dev.virtualearth.net/Branding/logo_powered_by.png 200OKValidCredentialsb9a94b411dc246ea82d161dae5e7a0c3 | DU00000D73 | 0.0.0.1 | Ref A: ACDD23537F6649F6B2F66333BB6D6D01 Ссылка B: DB3EDGE0918 Ссылка C: 2020-02-12T11: 25: 05Z0

Мне нужен правильный вызов при получении URL-адреса, чтобы я мог получить долготу и широту - http://dev.virtualearth.net/REST/v1/Locations?addressLine=Beihinger%20Strasse%20160%20DE-71726%20BENNINGEN%20GERMANY&output=xml&key= {APIkey}

Буду признателен за любую помощь в том, что мне не хватает?

...