我正在通过指定经度,纬度和范围来提取Twitter数据。但是,我想从指定两个纬度和经度坐标对的矩形区域提取推文。
代码:
from twitter import *
import sys
import csv
latitude = 51.474144 # geographical centre of search
longitude = -0.035401 # geographical centre of search
max_range = 1 # search range in kilometres
num_results = 1000 # minimum results to obtain
outfile = "output.csv"
import sys
sys.path.append(".")
import config
consumer_key = '*************************'
consumer_secret = '*******************************'
access_key = '***************************************'
access_secret = '*****************************'
twitter = Twitter(auth = OAuth(access_key, access_secret, consumer_key,
consumer_secret))
csvfile = open(outfile, "w")
csvwriter = csv.writer(csvfile)
row = [ "user", "text", "latitude", "longitude" ]
csvwriter.writerow(row)
result_count = 0
last_id = None
while result_count < num_results:
query = twitter.search.tweets(q = "", geocode = "%f,%f,%dkm" % (latitude,
longitude, max_range), count = 1000, max_id = last_id)
for result in query["statuses"]:
if result["geo"]:
user = result["user"]["screen_name"]
text = result["text"]
text = text.encode('ascii', 'replace')
latitude = result["geo"]["coordinates"][0]
longitude = result["geo"]["coordinates"][1]
row = [ user, text, latitude, longitude ]
csvwriter.writerow(row)
result_count += 1
last_id = result["id"]
print("got %d results" % result_count)
csvfile.close()
print("written to %s" % outfile)
我们将不胜感激任何帮助。
答案 0 :(得分:0)
如果Twitter仅允许您在指定半径的圆内进行搜索,那么看来唯一可行的方法是计算矩形的中心半径和对角半径,然后检索这些半径并将其排除在所选半径之外矩形(您可以通过分别验证每个轴来完成此操作。)
幸运的是,他们还通过边界框实现了搜索(请参见this documentation page)。
学习https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/geo-objects可能会帮助您制定请求。
答案 1 :(得分:0)
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import time
import json
import re
from urllib3.exceptions import ProtocolError
access_token = 'xxxx'
access_token_secret = 'xxxx'
consumer_key = 'xxxx'
consumer_secret = 'xxxx'
class StdOutListener(StreamListener):
def on_data(self, data):
print (data)
return True
def on_error(self, status):
print ('Encountered error with status code:',status)
if __name__ == '__main__':
#This handles Twitter authetification and the connection to Twitter Streaming API
l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
while True:
try:
stream.filter(locations = [144.9385,-37.8246,144.9761,-37.7955], stall_warnings=True)
except (ProtocolError, AttributeError):
continue