Tweepy全归档搜索,Twitter高级搜索和GetOldTweets3返回不同数量的Tweets

时间:2019-12-26 21:55:39

标签: python twitter tweepy

在使用带有以下参数的Tweepy,GetOldTweets3和Twitter高级搜索时:

  • 查询:“事故”
  • 地点:“德克萨斯州达拉斯”
  • 因为:“ 2018/1/1”
  • 直到:“ 2018/1/2”

每种搜索方法的推文数量都不同。 Tweepy使用完全存档搜索返回12条Tweets。 GetOldTweets3返回22个Tweets。并使用Twitter高级搜索返回3条推文。推文数量不同有原因吗?

1 个答案:

答案 0 :(得分:1)

Twitter通过其网站进行搜索的操作符与其API的操作符不同。

Searching "Accident near:Dallas,TX since:2018-01-01 until:2018-01-02" on Twitter itself,产生22条推文。如果只查看排名靠前的,则只有3个,是的,但是您可以通过单击“最新”选项卡查看所有这些。该查询使用的near运算符似乎在任何地方都没有明确记录,因此尚不清楚它的工作原理。实际上,位置/地点似乎不再是Advanced Search UI的一部分。从历史上看,这似乎是通过在指定位置的半径范围内(如果未设置within运算符,默认为15英里)进行搜索的。

我假设您正在使用的当前分支/ PR for Tweepy adding API.search_full_archive使用Twitter's premium search APIs的完整归档端点。实际上,api.search_full_archive("Environment_Name", "Accident place:Dallas,TX", fromDate=201801010000, toDate=201801020000)之类的东西确实会返回12条Tweet。但是,这是使用记录在案的place premium search operator,它具有特定的定义行为:

  

匹配标记有指定位置或Twitter地点ID的推文

这意味着它将仅返回专门标记有该位置的推文,而不是包含特定半径内的其他位置。奇怪的是,这些结果实际上包含2条Tweet,这些Tweets会使网站的搜索丢失并且似乎不会因位置搜索而返回。这可能是由于Twitter's search policies造成的,但同样,由于Twitter的网站搜索未记录在案,而且有点像黑匣子,因此很难确定确切原因。

如果您想使用高级搜索API为搜索指定一组坐标和半径,则可以使用point_radius高级搜索运算符来指定。使用Tweepy的API.geo_search method(使用Twitter API的GET geo/search endpoint)和对“ Dallas,TX”的查询,返回的Place object代表德克萨斯州的达拉斯,指定了[-96.7301749064317, 32.819858499999995]的质心。无法保证这些是Twitter网站搜索所使用的坐标,但是经过一些测试,将这些坐标与point_radius一起使用时,将返回与网站搜索结果匹配的精确结果的半径似乎在17到18之间英里。半径为17.5英里,普莱诺(Plano)只有3条额外的推文。

GetOldTweets3不使用Twitter的API,而是直接抓取该网站。这不应被认为是可靠的,并且违反Twitter's Terms of Service

  

明确禁止未经Twitter事先同意而刮擦服务

如果您想要最准确和定义明确的结果,则应使用Twitter的API。如果您想以编程方式检索这些结果而不违反Twitter的TOS,则这是唯一有效的方法。您可以使用placepoint_radiusbounding_box高级搜索来选择按位置搜索的选项,方法是按名称或Twitter地点ID,坐标和半径或边界框专门针对该位置。运算符。请注意,由于某些原因,正如其他2条Tweets所示,某些Tweets可能只能通过特定位置而非区域找到。