2016-07-29 32 views
0

Ich habe das folgende Python-Skript, das Tweepy verwendet, um Tweets zu erhalten und sie unter Verwendung von PyMongo in MongoDB zu speichern. Was passiert, wenn ich dieses Skript ausführe, wird meine MongoDB-Instanz heruntergefahren und das Skript stoppt mit Fehlern. Ich habe keine Ahnung, warum das passieren würde, denn selbst wenn das Skript beendet wird oder es zu Fehlern bei Tweepy kommt, sollte es den laufenden Status von MongoDB nicht beeinflussen. Diese Linie wird als erster Triggerpunkt identifiziert: stream.filter(locations=[-119.970703, 48.994636, -109.951172, 59.955010])Tweepy-Skript, das den herunterladenden MongoDB-Dienst beeinflusst

Script

import tweepy, sys, json, traceback 
from bson.json_util import loads as json_to_bson 
from hashlib import sha1 
from datetime import datetime 
from pymongo import MongoClient 
from time import sleep, strptime, mktime 

client = MongoClient() 
mode = None 

class Stream(tweepy.StreamListener): 
    def on_status(self, data): 
     save(data) 

    def on_error(self, code): 
     pause() 

def now(): 
    return str(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) 

def pause(): 
    sys.stdout.flush() 
    sleep((60*15)+5) 

def save(data): 
    bson = json_to_bson(json.dumps(data._json)) 
    tweet_date = strptime(bson['created_at'], "%a %b %d %H:%M:%S +0000 %Y") 
    tweet_date = str(datetime.fromtimestamp(mktime(tweet_date))) 

    bson['created_at'] = tweet_date 
    bson['text_hash'] = sha1(bson['text'].encode('punycode')).hexdigest() 
    bson['collected_at'] = now() 
    bson['collection_type'] = mode 

    if client.grebe.tweets.find_one({'text_hash': bson['text_hash']}) == None: 
     client.grebe.tweets.insert_one(bson) 

def api(): 
    CONSUMER_KEY = 'key' 
    CONSUMER_SECRET = 'secret' 
    ACCESS_TOKEN_KEY = 'tokenkey' 
    ACCESS_TOKEN_SECRET = 'tokensecret' 

    auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 
    auth.set_access_token(ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET) 
    return tweepy.API(auth) 

def main(): 
    mystream = Stream() 
    stream = tweepy.Stream(api().auth, mystream) 
    stream.filter(locations=[-119.970703, 48.994636, -109.951172, 59.955010]) 

main() 

Fehler

File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 445, in filter 
    self._start(async) 

File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 361, in _start 
    self._run() 

File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 294, in _run 
    raise exception 

AutoReconnect: connection closed 

Antwort

0

nicht ganz sicher, doch warum, aber die folgende Antwort auf eine Frage über die Erlaubnis Probleme mit der MongoDB-Sperre haben zur Lösung dieses Problems beigetragen: https://stackoverflow.com/a/15982017/863923