Beispiel #1
0
    def action(self, say=True):
        tweets = set()

        def already_said(id):
            if id in tweets:
                return True
            tweets.add(id)
            q = self.bot.session.query(Tweets).filter(Tweets.id == id)
            return self.bot.session.query(q.exists()).scalar()

        for user in self.users:
            last_tweet = self.bot.session.query(LastTweets).filter(LastTweets.user == user).first()
            try:
                timeline = self.twitter.get_user_timeline(screen_name=user)
            except TwythonError as err:
                if self.err:
                    raise Pasteque("TWITTER IS DOWN OMG OMG OMG\n%s" % err)
                self.err = True
                return
            self.err = False
            for tweet in timeline:
                if tweet['id'] <= last_tweet.last:
                    break
                if say and not (self.avoid_rt and RT in tweet and already_said(tweet[RT]['id'])):
                    if RT in tweet:
                        fmt = u'Tweet de %s retweeté par %s: ' % (tweet[RT][u'user'][u'screen_name'], user)
                    else:
                        fmt = u'Tweet de %s: ' % user
                    self.bot.say({'text': fmt + unescape(tweet['text']),
                                  'xhtml': fmt + Twython.html_for_tweet(tweet)})
                tweets.add(tweet['id'])
            last_tweet.last = timeline[0]['id']
        for tweet in tweets:
            self.bot.session.merge(Tweets(id=tweet))
        self.bot.session.commit()
Beispiel #2
0
    def action(self, say=True):
        tweets = set()

        def already_said(id):
            if id in tweets:
                return True
            tweets.add(id)
            q = self.bot.session.query(Tweets).filter(Tweets.id == id)
            return self.bot.session.query(q.exists()).scalar()

        for user in self.users:
            last_tweet = self.bot.session.query(LastTweets).filter(
                LastTweets.user == user).first()
            try:
                timeline = self.twitter.get_user_timeline(screen_name=user)
            except TwythonError as err:
                if self.err >= self.max_errors:
                    raise Pasteque("TWITTER IS DOWN OMG OMG OMG\n%s" % err)
                self.err += 1
                return
            self.err = 0
            for tweet in timeline:
                if tweet['id'] <= last_tweet.last:
                    break
                if say and not (self.avoid_rt and RT in tweet
                                and already_said(tweet[RT]['id'])):
                    text = tweet['text']
                    if RT in tweet:
                        fmt = u'Tweet de %s retweeté par %s : '
                        initial = tweet[RT][u'user'][u'screen_name']
                        fmt_text = fmt % (initial, user)
                        fmt_html = fmt % (user_url(initial), user_url(user))
                        text = tweet[RT]['text']
                    elif REPLY_NAME in tweet and tweet[
                            REPLY_NAME] is not None and tweet[
                                REPLY_TWEET] is not None:
                        fmt = u'Tweet de %s en réponse à %s : '
                        url_text = '%s/%s/status/%s' % (URL, tweet[REPLY_NAME],
                                                        tweet[REPLY_TWEET])
                        url_html = '<a href="%s">%s</a>' % (url_text,
                                                            tweet[REPLY_NAME])
                        fmt_text = fmt % (user, url_text)
                        fmt_html = fmt % (user_url(user), url_html)
                    else:
                        fmt = u'Tweet de %s : '
                        fmt_text = fmt % user
                        fmt_html = fmt % user_url(user)
                    self.bot.say({
                        'text':
                        fmt_text + unescape(text),
                        'xhtml':
                        fmt_html + Twython.html_for_tweet(tweet)
                    })
                tweets.add(tweet['id'])
            if timeline:
                last_tweet.last = timeline[0]['id']
        for tweet in tweets:
            self.bot.session.merge(Tweets(id=tweet))
        self.bot.session.commit()
Beispiel #3
0
    def action(self, say=True):
        tweets = set()

        def already_said(id):
            if id in tweets:
                return True
            tweets.add(id)
            q = self.bot.session.query(Tweets).filter(Tweets.id == id)
            return self.bot.session.query(q.exists()).scalar()

        for user in self.users:
            last_tweet = self.bot.session.query(LastTweets).filter(LastTweets.user == user).first()
            try:
                timeline = self.twitter.get_user_timeline(screen_name=user)
            except TwythonError as err:
                if self.err >= self.max_errors:
                    raise Pasteque("TWITTER IS DOWN OMG OMG OMG\n%s" % err)
                self.err += 1
                return
            self.err = 0
            for tweet in timeline:
                if tweet['id'] <= last_tweet.last:
                    break
                if say and not (self.avoid_rt and RT in tweet and already_said(tweet[RT]['id'])):
                    text = tweet['text']
                    if RT in tweet:
                        fmt = u'Tweet de %s retweeté par %s : '
                        initial = tweet[RT][u'user'][u'screen_name']
                        fmt_text = fmt % (initial, user)
                        fmt_html = fmt % (user_url(initial), user_url(user))
                        text = tweet[RT]['text']
                    elif REPLY_NAME in tweet and tweet[REPLY_NAME] is not None and tweet[REPLY_TWEET] is not None:
                        fmt = u'Tweet de %s en réponse à %s : '
                        url_text = '%s/%s/status/%s' % (URL, tweet[REPLY_NAME], tweet[REPLY_TWEET])
                        url_html = '<a href="%s">%s</a>' % (url_text, tweet[REPLY_NAME])
                        fmt_text = fmt % (user, url_text)
                        fmt_html = fmt % (user_url(user), url_html)
                    else:
                        fmt = u'Tweet de %s : '
                        fmt_text = fmt % user
                        fmt_html = fmt % user_url(user)
                    self.bot.say({'text': fmt_text + unescape(text),
                                  'xhtml': fmt_html + Twython.html_for_tweet(tweet)})
                tweets.add(tweet['id'])
            if timeline:
                last_tweet.last = timeline[0]['id']
        for tweet in tweets:
            self.bot.session.merge(Tweets(id=tweet))
        self.bot.session.commit()