如何跟踪来自特定城市的推文并通过 python 存储在 MongoDB 中?

Posted

技术标签:

【中文标题】如何跟踪来自特定城市的推文并通过 python 存储在 MongoDB 中?【英文标题】:How can I track tweets from a particular city and store in a MongoDB via python? 【发布时间】:2013-05-07 06:35:23 【问题描述】:

我想编写一段代码,从特定位置(例如城市)获取所有推文,并通过 python 将它们放入 MongoDB 中。作为一个完全的编程新手,我已经设法从 Twitter 跟踪特定的主题标签,并使用以下代码将它们存储在 MongoDB 中:

01 import pycurl, json
02 import pymongo
03
04 STREAM_URL = "https://stream.twitter.com/1/statuses/filter.json"
05 WORDS = "track=#occupywallstreet"
06 USER = "myuser"
07 PASS = "mypass"
08
09 def on_tweet(data):
10    try:
11        tweet = json.loads(data)
12        db.posts.insert(tweet)
13        print tweet
14    except:
15        return
16

17 from pymongo import Connection
18 connection = Connection()
19 db = connection.occupywallstreet
20 conn = pycurl.Curl()
21 conn.setopt(pycurl.POST, 1)
22 conn.setopt(pycurl.POSTFIELDS, WORDS)
23 conn.setopt(pycurl.HTTPHEADER, ["Connection: keep-alive", "Keep-Alive: 3000"])
24 conn.setopt(pycurl.USERPWD, "%s:%s" % (USER, PASS))
25 conn.setopt(pycurl.URL, STREAM_URL)
26 conn.setopt(pycurl.WRITEFUNCTION, on_tweet)
27 conn.perform()

如何跟踪地理定位的推文,即来自特定城市的推文?有没有办法可以更改上述代码以满足我的需要?

谢谢!

【问题讨论】:

全面披露:所用代码取自:gramsky.blogspot.co.uk/2011/11/… 当你得到一条推文的 json 时,检查它在城市边界框中的纬度是否在边界框内,然后将推文保存到数据库 【参考方案1】:

在这种情况下你应该使用locations参数:

import pycurl
import json

STREAM_URL = "https://stream.twitter.com/1/statuses/filter.json"
LOCATIONS = "locations=-74,40,-73,41"  # New York
USER = "myuser"
PASS = "mypass"


def on_tweet(data):
    try:
        tweet = json.loads(data)
        db.posts.insert(tweet)
        print tweet
    except:
        return


from pymongo import Connection

connection = Connection()
db = connection.occupywallstreet
conn = pycurl.Curl()
conn.setopt(pycurl.POST, 1)
conn.setopt(pycurl.POSTFIELDS, LOCATIONS)
conn.setopt(pycurl.HTTPHEADER, ["Connection: keep-alive", "Keep-Alive: 3000"])
conn.setopt(pycurl.USERPWD, "%s:%s" % (USER, PASS))
conn.setopt(pycurl.URL, STREAM_URL)
conn.setopt(pycurl.WRITEFUNCTION, on_tweet)
conn.perform()

希望对您有所帮助。

【讨论】:

谢谢,这很好用。但是,它很快就积累了 GB。有没有办法以更紧凑的格式获取数据? 好吧,首先你可以从on_tweet 函数中的推文中只获取必要的数据。另外,想想你真正需要在数据库中存储哪些推文,我敢打赌你并不真的需要来自指定位置的所有推文。如果有帮助,请考虑接受答案。谢谢。 您好,谢谢您的回答。有没有办法只存储来自该位置的带有给定主题标签的推文,例如 LOCATIONS = "location=-74,40,-73,41"(纽约)的“#Yankees”? 在弃用 1.0 twitter API 后不确定您的代码现在是否有效。考虑切换到 1.1,请参阅dev.twitter.com/docs/api/1.1/get/search/tweets。 嗯...作为所有编程的初学者,我不确定我是否理解您的答案。您能否扩展您之前的答案,即在不占用 GB 的情况下从给定位置获取推文的最佳方式是什么?然后:这个答案与 twitter 1.0 API 或 1.1 API 有关吗?谢谢你的教学。

以上是关于如何跟踪来自特定城市的推文并通过 python 存储在 MongoDB 中?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法用来自特定用户的推文触发 AWS lambda 函数

使用 Twitter 流 API,是不是可以只显示来自特定用户的推文?

获取推文作者对特定推文的推文回复

Python:预测来自用户的推文数量

使用 tweepy 流式传输用户的时间线和过滤的推文

如何收听仅包含来自 Twitter 流的地理信息的推文