通过指定纬度和经度来提取推文

时间:2019-08-14 15:06:32

标签: python twitter tweepy

我正在通过指定经度,纬度和范围来提取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)

我们将不胜感激任何帮助。

2 个答案:

答案 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