如何通过 API 从***获取地标地点的标题?

Posted

技术标签:

【中文标题】如何通过 API 从***获取地标地点的标题?【英文标题】:How to get title of landmark place from Wikipedia by API? 【发布时间】:2016-06-09 17:37:06 【问题描述】:

对于我的代码,我使用的是 Wikipedia API,它提供了与该城市的 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

来自 Wikipedia API 的 JSON 数据示例:

"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"
        ,
        ....
    ]

我从这个 API 获取 Title 的代码。

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);
        
    

这是当前的输出:

如何从type 为“地标”的结果中获取标题?

【问题讨论】:

也许,使用Wherevar obj = JsonConvert.DeserializeObject&lt;RootObject&gt;(responseString).query.geosearch.Where(p =&gt; p.type == "landmark").Select(a =&gt; a.title).ToList();? 【参考方案1】:

如果你使用 JSON 格式,试试这个:

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();
    

【讨论】:

【参考方案2】:

我不懂 C# :-)

但是试试这样的:

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

【讨论】:

好吧,“Where”方法只是进行过滤,您需要使用结果输出

以上是关于如何通过 API 从***获取地标地点的标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android/Java 中的 Google Places API 获取有关地点的确切子类别名称? [复制]

通过电话进行 Google 地图/地点 API 搜索

使用 Graph api 获取 Facebook 页面率和评论

使用 Google Maps API 获取地点总数

如何在 Google Maps API 中沿起点和终点之间的路线获取地点(例如加油站)

地理网格搜索算法