2013-05-13 5 views
3

Я хотел бы написать фрагмент кода, который захватывает все твиты из определенного места (например, города) и помещает их в MongoDB через python. Как полный новичок в программировании, мне удалось отследить определенные хештеги из Twitter и хранить их в MongoDB используя следующий фрагмент кода:Как я могу отслеживать твиты из определенного города и хранить в MongoDB через python?

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() 

Как я могу отслеживать для геопривязанных твитов, то есть твиты от конкретного города? Есть ли способ, которым я могу изменить приведенный выше код в соответствии с моими потребностями?

Спасибо!

+0

ПОЛНОЕ РАСКРЫТИЕ: используемый код взят из: http://gramsky.blogspot.co.uk/2011/11/how-to-use-twitters-filtered-streaming.html – user2377030

+0

, когда вы получаете json твита проверьте, что он длинный в ограничивающей рамке города, если они имеют ограничительную рамку, а затем сохраняют твит к db. –

ответ

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() 

Надежда, что помогает.

+0

Спасибо, это хорошо работает. Тем не менее, он очень быстро отталкивает ГБ. Есть ли способ получить данные в более компактном формате? – user2377030

+0

Ну, сначала вы можете получить только необходимые данные из твита в функции 'on_tweet'. Также подумайте о том, какие твиты вам действительно нужно хранить в базе данных, я уверен, вам не нужны все твиты из указанного места. Подумайте о принятии ответа, если это поможет. Благодарю. – alecxe

+0

Привет, спасибо за ответ. Есть ли способ хранить твиты с заданным хэштегом из этого местоположения, например «Янки» из LOCATIONS = «location = -74,40, -73,41» (Нью-Йорк)? – user2377030

Смежные вопросы