如何检查推特用户声明的位置是否存在?

时间:2016-02-10 12:14:00

标签: java twitter lucene geolocation information-retrieval

我正在做一个Twitter抓取工具,我已经使用Lucene构建了一个搜索引擎。由于许多用户提交不存在的位置(例如“在我的厨房”,“仙境”,“从洛杉矶到巴黎”......),我想我应该检查哪些用户根据他们的位置进行索引,在通过位置搜索使它们进一步可达。我通过抽取英文推文来检索用户(使用TwitterStream.sample(“en”))。

我的第一个想法是从一些网站下载世界上所有城市并检查是否有匹配。但是,这种方法存在一个问题:很难找到包含所有可能语言拼写的世界上所有城市的文档。实际上,用户可以用英语或他自己的语言提交他的城市(或国家)的名称。

1 个答案:

答案 0 :(得分:2)

您需要使用地理编码google mapsyandex maps

  

我面临的事实是第一个链接告诉谷歌API寻找   美国的城市默认情况下。所以...如果用户说他在“巴黎”,谷歌   API将响应我NO_REPONSE

Red Light District

  

我已经阅读了很多关注的第一个链接和第二个链接   注意力较少,因为后者似乎只是有用   javascript应用程序(我在java中完成所有操作)。

没有。这是不正确的。您可以通过HTTP请求获取信息,请参阅HTTP request parameters

使用yandex maps

apache http client的小代码段
private void request(String geocode) throws IOException {
        HttpResponse response = Request.Post(SEARCH_URL).version(HttpVersion.HTTP_1_1)
                .bodyForm(createForm(geocode).build(), Charsets.UTF_8).useExpectContinue()
                .connectTimeout(CONNECTION_TIMEOUT_MILS)
                .socketTimeout(CONNECTION_TIMEOUT_MILS)
                .execute().returnResponse();

        assertStatus(response, geocode);
        getCoordinatesFromResponse(response, geocode);
    }

    private Form createForm(String geocode) {
        return Form.form().add("format", "json").add("results", "1").add("geocode", geocode);
    }

    private void assertStatus(HttpResponse response, String requestString) {
        StatusLine statusLine = response.getStatusLine();
        if (statusLine.getStatusCode() >= ERROR_STATUS_MIN) {
            throw new RuntimeException(String.format(
                    "Error sending request '%s' to the map service, server response: %s",
                    requestString, response));
        }
    }