如何在 tweepy API python 中根据输入位置的边界框(城市、国家、地区)过滤推文

How to filter tweets based on input location's boundary box (City, country, area) in tweepy API python

我正在尝试根据输入关键字和位置(变量)过滤推文流。

如果我想根据关键字和特定位置过滤推文,下面一行的位置参数

myStream.filter(track=keywords_to_track, locations=boundary_box)

应该是输入位置有四个坐标的边界框(maxlog, minlog, maxlat, minlag)

如何获得给定位置(变量)的 boundary_box? 要么 还有其他方法可以解决这个问题吗?

我也试过https://www.mapdevelopers.com/geocode_bounding_box.php,但是不行。

我是 tweepy 的新手 API。

# arguments
topic_name = 'kafkatwitter_1'

#input variables
keywords_to_track = ['modi']
location_filter = 'New Delhi'

# twitter authorization
auth = OAuthHandler(API_KEY, API_KEY_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

# init tweepy
api = tweepy.API(auth)
producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
                         value_serializer=lambda x: dumps(x).encode('utf-8'),
                         api_version=(0, 10, 1))
class MyStreamListener(tweepy.Stream):
    def on_status(self, tweet):
        length = len(tweet.text.split(' '))
        if (tweet.lang != 'en') or (length <= 10):
            pass
            print("==filtered==")
        else:
            message = {
                "text": tweet.text,
                "created_at": process_time(tweet.created_at),}
        producer.send(topic_name, value=message)
# Step 2: Creating a Stream
myStreamListener = MyStreamListener()
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)

# Step 3: Starting a Stream
myStream.filter(track=keywords_to_track, locations=boundary_box)

您可以使用 Nominatin API

搜索参数包括:

  • 街道=<门牌号><街道名称>
  • 城市=<城市>
  • 县=<县>
  • 州=<州>
  • 国家=<国家>
  • 邮政编码=<邮政编码>

示例:

GET https://nominatim.openstreetmap.org/?city=Tokio&format=json&limit=1

响应包括边界框

[
    {
        "place_id": 282632558,
        "licence": "Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright",
        "osm_type": "relation",
        "osm_id": 1543125,
        "boundingbox": [
            "20.2145811",
            "35.8984245",
            "135.8536855",
            "154.205541"
        ],
        "lat": "35.6828387",
        "lon": "139.7594549",
        "display_name": "Tokyo, Japan",
        "class": "boundary",
        "type": "administrative",
        "importance": 0.7593311914925306,
        "icon": "https://nominatim.openstreetmap.org/ui/mapicons//poi_boundary_administrative.p.20.png"
    }
]

https://boundingbox.klokantech.com/

[-122.75,36.8,-121.75,37.8] 是旧金山的位置框。
[-74,40,-73,41] 是纽约市的位置框。
[-122.75,36.8,-121.75,37.8,-74,40,-73,41] 是旧金山和纽约市的位置框。

将其分配给变量 boundary_box
locations 参数需要和浮点数组。浮点数可被 4 整除。