Beispiel #1
0
 def __init__(self, subreddit):
     self.subreddit_name = subreddit
     self.process_name = 'python_{}'.format(self.subreddit_name)
     self.user_agent = ('{} monitor by /u/uhkhu'.format(subreddit))
     self.r = praw.Reddit(self.user_agent)
     self.r_submission = praw.Reddit('Submission variables testing by /u/uhkhu')
     self.subreddit = self.r.get_subreddit(subreddit)
     self.username = environ.get('REDDIT_USERNAME')
     self.password = environ.get('REDDIT_PASSWORD')
     self.submission_log_file = '{}.txt'.format(self._get_submission_log_file_format())
     self.publisher = Publisher('reddit', ['New Post'])
     self.submission_log = []
     self._read_submission_log_file()
Beispiel #2
0
__version__ = '0.3'

START_EVENT = 'Tests Starting'
START_TITLE = 'Starting tests...'
START_ICON = Resource(resource_stream('nosegrowl2', 'start.png').read())

SUCCESS_EVENT = 'Tests Passed'
SUCCESS_TITLE = '%s tests run OK'
SUCCESS_MESSAGE = 'Completed in %s.%s seconds'
SUCCESS_ICON = Resource(resource_stream('nosegrowl2', 'success.png').read())

FAILURE_EVENT = 'Test Failures'
FAILURE_TITLE = '%s tests run. %s failures, %s errors'
FAILURE_ICON = Resource(resource_stream('nosegrowl2', 'failure.png').read())

publisher = Publisher('nosegrowl2', [START_EVENT, SUCCESS_EVENT, FAILURE_EVENT], icon=START_ICON)
publisher.register()


class NoseGrowl(Plugin):

    name = 'growl'

    def configure(self, options, conf):
        super(NoseGrowl, self).configure(options, conf)

    def begin(self):
        self.start_time = datetime.datetime.now()
        publisher.publish(START_EVENT, START_TITLE, '', icon=START_ICON)

    def finalize(self, result):
Beispiel #3
0
class cSubredditMonitor(object):
    def __init__(self, subreddit):
        self.subreddit_name = subreddit
        self.process_name = 'python_{}'.format(self.subreddit_name)
        self.user_agent = ('{} monitor by /u/uhkhu'.format(subreddit))
        self.r = praw.Reddit(self.user_agent)
        self.r_submission = praw.Reddit('Submission variables testing by /u/uhkhu')
        self.subreddit = self.r.get_subreddit(subreddit)
        self.username = environ.get('REDDIT_USERNAME')
        self.password = environ.get('REDDIT_PASSWORD')
        self.submission_log_file = '{}.txt'.format(self._get_submission_log_file_format())
        self.publisher = Publisher('reddit', ['New Post'])
        self.submission_log = []
        self._read_submission_log_file()

    def login(self, r):
        r.login(self.username, self.password)

    def _get_submission_log_file_format(self):
        return path.join(path.dirname(__file__), 'submission_logs/{0}_checked'.format(self.subreddit))

    def _read_submission_log_file(self):
        # check if log file exists. create new if not
        submission_log_file_format = '{}*'.format(self._get_submission_log_file_format())
        submission_log_file_matches = glob(submission_log_file_format)
        if len(submission_log_file_matches) == 0:
            open(self.submission_log_file, 'a').close()
        # read log file and populate self.submission log    
        log = [line.strip() for line in open(self.submission_log_file)]
        self.submission_log = log

    def log_submission(self, submission_id):
        # if empty file, write
        if stat(self.submission_log_file).st_size == 0:
            with open(self.submission_log_file, 'w') as f:
                f.write('{}\n'.format(submission_id))
        # if not empty, append
        else:
            with open(self.submission_log_file, 'a') as f:
                f.write('{}\n'.format(submission_id))

    def new_gen(self, n=1):
        # read log file each time
        self._read_submission_log_file()
        for submission in self.subreddit.get_new(limit=n):
            seen = False
            if submission.id not in self.submission_log:
                self.log_submission(submission.id)
                print 'New Submission logged: {}'.format(submission.id)
            else:
                seen = True
            yield seen, submission
            
    def monitor(self, submission_limit=1):
        while True:
            try:
                e_occur = 0
                print '{0} New Loop at {1} {0}'.format('*' * 10, time.ctime())
                not_seen = []
                for seen, submission in self.new_gen(submission_limit):
                    if not seen: # and len(submission.comments) < 3:  # new submission potentially unanswered
                        not_seen.append((submission.title, submission.url))
                if len(not_seen) > 0:
                    self._growl_alert(self.subreddit_name, not_seen)
                time.sleep(5)

            except Exception as e:
                e_occur += 1
                print 'error in self.monitor: '
                print e
                if e_occur > 10:
                    sys.exit('Unresolvable Error')
                else:
                    print 'Trying again'

    def _growl_alert(self, subreddit, submissions):
        for text, url in submissions:
            self.publisher.publish('New Post', title='New /r/{} Post'.format(self.subreddit_name), text=text, gntp_callback=url)