【问题标题】:Why these two APIs(twitter geo/search APIs) return different result sets?为什么这两个 API(twitter 地理/搜索 API)返回不同的结果集?
【发布时间】:2018-11-19 14:35:29
【问题描述】:

我正在从特定区域获取推文,但我得到的结果集非常不同。第一种方法是在给定半径内给出经度和纬度。这些是城市(拉合尔,PK)内的经度和纬度,并绘制5公里半径。 5公里只是这个城市的一小部分。这样,我一天就获得了大约 60,000 条推文。

方法1

import tweepy
consumer_key= 'xxxxxxxxxxxxxx'
consumer_secret= 'xxxxxxxxxxxxx'
access_token='xxxxxxxxxxxxxxx'
access_token_secret='xxxxxxxxxxxxxxxxxxxx'
api = tweepy.API(auth,wait_on_rate_limit = Truewait_on_rate_limit_notify= True)
public_tweets = tweepy.Cursor(api.search, count=100, geocode="31.578871,74.305184,5km",since="2018-06-09",show_user = True,tweet_mode="extended").items()
for tweet in public_tweets:
    print(tweet.full_text)

第二种方法,我使用twitter geo search api,通过查询Lahore,粒度=“city”。现在我正在获取整个城市的推文。但现在我一天只收到 1200 条推文。我还从过去 7 天中提取了 15,000 条推文。这是一个非常大的区别,整个城市只给了我 1200 条推文,而同一个城市的一小部分给了我超过 60,000 条推文。我还打印了地点 ID 以验证我是否获得了准确的多边形。这些是多边形( 74.4493870, 31.4512220 74.4493870, 31.6124170 74.2675860, 31.6124170 74.2675860, 31.4512220) 我在https://www.keene.edu/ 上画了这些来验证。是的,这些是拉合尔市的准确多边形。

方法2

import tweepy
consumer_key= 'xxxxxxxxxxxxxx'
consumer_secret= 'xxxxxxxxxxxxx'
access_token='xxxxxxxxxxxxxxx'
access_token_secret='xxxxxxxxxxxxxxxxxxxx'
api = tweepy.API(auth,wait_on_rate_limit = Truewait_on_rate_limit_notify= True)

places = api.geo_search(query="Lahore", granularity="city")

for place in places:    
    print("placeid:%s" % place)
public_tweets = tweepy.Cursor(api.search, count=100,q="place:%s" % place.id,since="2018-06-09",show_user = True,tweet_mode="extended").items()
for tweet in public_tweets:
    print(tweet.full_text)

现在首先告诉我为什么结果会有很大差异。我使用的是标准 Api 版本。

其次,告诉我这些 (api) 是如何获取推文的。因为只有不到 1% 的推文带有地理标签,而且并非所有个人资料上的用户都会给出确切的城市和国家/地区。一些用户提到火星和地球等。那么这些 api 如何工作以获取特定区域的推文。在半径范围内搜索或通过查询城市/国家/地区。我研究了 twitter api docs 和 tweepy docs 来研究这些 api 如何在后台工作以收集特定区域的推文,但我没有找到任何有用的材料。

【问题讨论】:

    标签: python twitter geolocation geocoding tweepy


    【解决方案1】:

    第一种方法有更多结果的原因是,如果推文没有任何地理信息,那么使用地理编码搜索将退回到配置文件(正如您已经猜到的)并尝试将其解析为纬度/经度。

    在此处查看文档:

    https://developer.twitter.com/en/docs/tweets/search/guides/standard-operators.html

    地理定位:搜索运算符“near”在 API,但是有一种更精确的方法可以通过给定的方式限制您的查询 使用模板指定的地理编码参数的位置 “纬度、经度、半径”,例如“37.781157,-122.398720,1mi”。 在进行地理搜索时,搜索 API 将首先尝试 在查询的地理编码中查找具有纬度/经度的推文,并在 如果没有成功,它将尝试查找由 个人资料位置可以反向地理编码为纬度/经度的用户 在查询的地理编码中,这意味着可以接收推文 不包括纬度/经度信息。

    另一方面,使用 place_id 搜索似乎是在寻找那个确切的地方。这是基本的 api 调用语法: https://developer.twitter.com/en/docs/tweets/search/guides/tweets-by-place

    地点 api 的工作方式与地理编码中的纬度/经度非常不同。以下页面阐明了可与推文相关联的两种位置数据之间的差异:

    https://developer.twitter.com/en/docs/tutorials/filtering-tweets-by-location

    特定于推文的位置信息分为两大类:

    Tweets with a specific latitude/longitude “Point” coordinate
    Tweets with a Twitter “Place” (see our blog post on Twitter Places: More Context For Your Tweets and our documentation on Twitter
    

    地理对象了解更多信息)。

    ...

    带有 Twitter“地点”的推文包含一个多边形,由 4 个 定义一般区域(“地点”)的经纬度坐标 用户正在发布推文。此外,该地方将有 显示名称、类型(例如城市、社区)和国家代码 对应于场所所在的国家/地区等 字段。

    另外,本节:注意Place IDs的复数用法

    地点:

    按名称或 ID 过滤特定地点。发现“地方” 与特定区域相关联,使用 Twitter 的 reverse_geocode REST API 中的端点。然后将您找到的地点 ID 与 地点:运营商跟踪包含特定地点的推文 参考。如果您使用地名而不是数字 ID, 确保引用任何包含空格或标点符号的名称。

    【讨论】:

      猜你喜欢
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多