我试图通过特定位置搜索Twitter。我设法让它排除在我的范围之外的地理标记的任何推文,但我也得到绝大多数推文,地理数据设置为null。
var Twitter = new LinqToTwitter.TwitterContext(auth);
var GeoCode = new LinqToTwitter.Geo()
{
Latitude = 37.68,
Longitude = -97.33,
Accuracy = "20mi"
};
var geostring = $"{GeoCode.Latitude},{GeoCode.Longitude},{GeoCode.Accuracy}";
var searchResponse =
Twitter.Search
.Where(x => x.Type == SearchType.Search)
.Where(x => x.Query == "Trump") //I know people are tweeting this right now...
.Where(x => x.GeoCode == geostring)
.FirstOrDefault();
现在,如上所述,这不包括特别标记为我位置之外的推文。半径,但我还想排除没有位置数据集的推文。我在这里做错了什么,或者我只是需要提取不需要的数据然后在事后过滤它?
答案 0 :(得分:1)
我不认为你应该以这种方式组合起来,试试:
var searchResponse =
Twitter.Search
.Where(x => x.Type == SearchType.Search &&
x.Query == "Trump" &&
x.GeoCode == geostring)
.FirstOrDefault();
答案 1 :(得分:1)
您看到许多坐标为零的原因是因为很多人关闭了他们个人资料中的位置。在Twitter Search API上,无法排除空位置。你可以做的是执行你的查询,然后做一个LINQ to Objects查询来过滤结果,如下所示:
var searchResponse =
await
Twitter.Search
.Where(x => x.Type == SearchType.Search)
.Where(x => x.Query == "Trump") //I know people are tweeting this right now...
.Where(x => x.GeoCode == geostring)
.FirstOrDefaultAsync();
var withGeoCode =
(from resp in searchResponse.Statuses
where resp.Coordinates.Latitude != 0 && resp.Coordinates.Longitude != 0
select resp)
.ToList();
顺便说一句,请注意LINQ到Twitter是async
,这就是为什么我在async
运算符中添加了FirstOrDefaultAsync
关键字。否则,由于竞争条件,您可能会出现错误或未收到结果。有时候,我很惊讶地看到非同步操作符仍然有效。
如果推文未进行地理标记,则Coordinates
Latitude
/ Longitude
属性将为0,您可以在上面的代码中看到。
答案 2 :(得分:1)
如果您搜索特定的地点ID,那么您将只获得来自该地点或较窄地点的地理标记的推文。例如如果您搜索旧金山(5a110d312052166f),加利福尼亚或美国,将返回旧金山的推文。您还将获得旧金山社区的推文。
n.b。这将是少量的推文,因为大多数推文都没有地理标记。
搜索地点:ID,例如地点:402e618bff0d9dc1
https://api.twitter.com/1.1/search/tweets.json?q=place%3A5a110d312052166f
您可以在网站上自行测试
https://twitter.com/search?q=place%3A5a110d312052166f&src=typd