如何在 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 整除。
我正在尝试根据输入关键字和位置(变量)过滤推文流。
如果我想根据关键字和特定位置过滤推文,下面一行的位置参数
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 整除。