How to get the name of a symbolic place from Wikipedia by API?

For my code, I use the Wikipedia API, which provides links to all places related to the Wikipedia article of this city. But with my code there are extra redundant links. I only want to return links where the type is "landmark".

My Wikipedia API:

https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gspage=Berlin&gslimit=500&gsprop=type|name|dim|country|region|globe&format=json

Sample JSON data from the Wikipedia API:

"query": {
    "geosearch": [
        {
            "pageid": 5858187,
            "ns": 0,
            "title": "Stuttgart Hauptbahnhof",
            "lat": 48.783888888889,
            "lon": 9.1816666666667,
            "dist": 136.8,
            "primary": "",
            "type": "railwaystation",
            "name": "",
            "dim": 1000,
            "country": "DE",
            "region": "BW"
        },
        {
            "pageid": 6102287,
            "ns": 0,
            "title": "Staatstheater Stuttgart",
            "lat": 48.780277777778,
            "lon": 9.185,
            "dist": 361,
            "primary": "",
            "type": "landmark",
            "name": "",
            "dim": "900",
            "country": "DE",
            "region": "BW"
        },
        {
            "pageid": 35806545,
            "ns": 0,
            "title": "Versatel building",
            "lat": 48.78409,
            "lon": 9.17799,
            "dist": 400.4,
            "primary": "",
            "type": null,
            "name": "",
            "dim": 1000,
            "country": null,
            "region": null
        },
        {
            "pageid": 3230957,
            "ns": 0,
            "title": "Neue Staatsgalerie",
            "lat": 48.780277777778,
            "lon": 9.1869444444444,
            "dist": 430.6,
            "primary": "",
            "type": "landmark",
            "name": "",
            "dim": 1000,
            "country": "DE",
            "region": "BW"
        },
        ....
    ]
}

My code is to get Titlefrom this API.

using (var client = new HttpClient())
{
    var response = client.GetAsync("https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gspage=Berlin&gslimit=500&gsprop=type|name|dim|country|region|globe&format=json").Result;
    if (response.IsSuccessStatusCode)
    {
        var responseContent = response.Content;
        string responseString = responseContent.ReadAsStringAsync().Result;
        var obj = JsonConvert.DeserializeObject<RootObject>(responseString).query.geosearch.Select(a => a.title).ToList();

        foreach (var item in obj)
        {
            Console.WriteLine(item);
        }
    }
}

Here is the current output:

Conclusion

How to get the title from the results, where typeis the "guide"?

+4
source share
2 answers

If you use the JSON format, try the following:

var obj = JsonConvert.DeserializeObject<RootObject>(responseString).query.geosearch
    .Where(a => a.type == "landmark").Select(a => a.title).ToList();

Json.NET. XML:

using (var webResponse = (HttpWebResponse)WebRequest.Create("https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gspage=Berlin&gslimit=500&gsprop=type&format=xml").GetResponse())
{
    using (var reader = new StreamReader(webResponse.GetResponseStream()))
    {
        var response = XElement.Parse(reader.ReadToEnd());
        var obj = response.Descendants("gs")
            .Where(a => a.Attribute("type") != null && a.Attribute("type").Value == "landmark")
            .Select(a => a.Attribute("title").Value).ToList();
    }
}
+3

, #: -)

- :

var geosearch = JsonConvert.DeserializeObject<RootObject>(responseString).query.geosearch;
var landmarks = geosearch.Where(type => type == "landmark");
0

All Articles