Exemple #1
0
async def update_db(data):
    parsed = json.loads(data)
    print(parsed['text'])

    vote, coin = is_vote(parsed["text"])
    if None in [vote, coin]:
        return

    print(f'New vote detected : {coin}')

    async with create_engine(
            user="******",
            database="deviant",
            host="127.0.0.1",
            password="******",
            port=5432,
    ) as engine:
        mgr = SQLModelManager.instance()
        mgr.database = engine

        user, created = await User.objects.get_or_create(id=int(parsed['id']))
        if created:
            user.name = parsed["user"]["name"]
            user.screen_name = parsed["user"]["screen_name"]
            user.followers_count = parsed["user"]["followers_count"]
            user.statuses_count = parsed["user"]["statuses_count"]
            await user.save()

            new_record = Tweet()
            new_record.id = parsed["id"]
            new_record.text = parsed["text"]
            new_record.created_at = tdate_to_timestamp(parsed["created_at"])
            new_record.user = user
            new_record.coin = coin.upper()
            await new_record.save(force_insert=True)
Exemple #2
0
def update_tweet():
    new_tweet = Tweet()
    new_tweet.id = request.form['id']
    new_tweet.text = request.form['text']
    db.session.query(Tweet).filter_by(id=new_tweet.id).update(
        {"text": new_tweet.text})
    db.session.commit()
    return tweet_schema.jsonify(new_tweet)
Exemple #3
0
async def update_db():
    last_retweet_from_db = await get_last_retweet_from_db()
    retweets_from_twitter = api.retweets(TWEET_ID, count=100)
    if not last_retweet_from_db:
        new_retweets = [
            r
            for r in retweets_from_twitter
            if r.created_at > datetime(2019, 8, 31, 0, 0)
        ]
    else:
        new_retweets = [
            r
            for r in retweets_from_twitter
            if r.created_at > last_retweet_from_db.created_at
        ]
    my_logger.debug(f"{len(new_retweets)} retweets to insert in db")

    async with create_engine(
        user="******",
        database="deviant",
        host="127.0.0.1",
        password="******",
        port=5432,
    ) as engine:
        mgr = SQLModelManager.instance()
        mgr.database = engine

        for retweet in new_retweets:
            user, created = await User.objects.get_or_create(id=int(retweet.user.id))
            if created:
                my_logger.debug(f"New User created {retweet.user.screen_name}")
                user.name = retweet.user.name
                user.screen_name = retweet.user.screen_name
                user.followers_count = retweet.user.followers_count
                user.statuses_count = retweet.user.statuses_count
                await user.save()

            new_record = Tweet()
            new_record.id = retweet.id
            new_record.text = retweet.text
            new_record.created_at = retweet.created_at
            new_record.user = user
            new_record.retweet = True
            my_logger.debug(f"New retweet created {retweet.text}")
            await new_record.save(force_insert=True)
    def _handle_tweets(self, user):

        try:
            tweets = self.api.user_timeline(user.screen_name, count=200)
        except tweepy.error.TweepError:
            print('Error downloading tweets for {}'.format(user.screen_name))
            return

        for tweet_data in tweets:
            tweet = self.session.query(Tweet).get(tweet_data.id)

            if tweet is None:
                tweet = Tweet()
                is_new = True
            else:
                is_new = False

            tweet.id = tweet_data.id
            tweet.text = tweet_data.text
            tweet.retweet_count = tweet_data.retweet_count
            tweet.user = user

            self.session.add(tweet)
            self.session.commit()

            if is_new:
                print('Saving entities for tweet {}'.format(tweet.id))
                self._handle_entities(tweet, tweet_data)
                self.session.commit()
            else:
                print('Skipping entities for tweet {}'.format(tweet.id))

        print('Downloaded {} tweets for user {}'.format(
            len(tweets), user.screen_name))

        self.session.commit()