コード例 #1
0
ファイル: twitter_bot.py プロジェクト: yonchu/twitter_bot
    def nico_video_post(self, search_keyword, prev_datetime):
        logger.debug("Call nico_video_post({}, {})".format(search_keyword, prev_datetime))
        if prev_datetime:
            now_date = datetime.datetime.now()
            if now_date - prev_datetime < datetime.timedelta(1):
                old_prev_datetime = prev_datetime
                prev_datetime = prev_datetime - datetime.timedelta(hours=2)
                logger.debug("Change prev_datetime: {} -> {}".format(old_prev_datetime, prev_datetime))

        with DbManager() as db_manager:
            nico = NicoSearch(db_manager, self.nico_user_id, self.nico_pass_word)
            nico.login()
            # Search latest videos by NicoNico.
            videos = nico.search_videos(search_keyword, prev_datetime)

            tweet_count = 0
            failed_list = []
            for video in reversed(videos):
                # Check if the video is already posted.
                old_post_video = (
                    db_manager.db_session.query(PostVideo)
                    .filter(sqlalchemy.and_(PostVideo.video_id == video.id))
                    .first()
                )

                if old_post_video:
                    logger.debug("Skip posted video: video={}".format(video))
                    continue

                # Add new post_video to database when not registerd
                post_video = PostVideo(video.id)
                logger.info("Add new post_video to database : post_video={}".format(post_video))
                db_manager.db_session.add(post_video)

                # Make message for twitter.
                str_first_retrieve = video.first_retrieve.strftime("%y/%m/%d %H:%M")
                msg = utils.make_tweet_msg(
                    self.TW_NICO_VIDEO_TWEET_FORMAT, str_first_retrieve, title=video.title, url=video.get_url()
                )
                try:
                    self.tweet_msg(msg, is_sleep=True)
                    tweet_count += 1
                    db_manager.db_session.commit()
                except Exception as e:
                    db_manager.db_session.rollback()
                    logger.exception("Tweet failed msg={}".format(msg))
                    failed_list.append((e, msg))

            logger.info("nico_latest_commenting_video(): {} tweet".format(tweet_count))
            if failed_list:
                raise Exception("Tweet faild {}".format(prettyprint.pp_str(failed_list)))
コード例 #2
0
ファイル: twitter_bot.py プロジェクト: yonchu/twitter_bot
    def nico_latest_commenting_video_post(
        self, search_keyword, prev_datetime, number_of_results=3, expire_days=30, max_post_count=1
    ):
        logger.debug(
            "Call nico_latest_commenting_video_post({}, {}, {}, {}, {})".format(
                search_keyword, prev_datetime, number_of_results, expire_days, max_post_count
            )
        )
        with DbManager() as db_manager:
            nico = NicoSearch(db_manager, self.nico_user_id, self.nico_pass_word)
            nico.login()
            # Search latest commenting videos by NicoNico.
            it = nico.search_latest_commenting_videos(
                search_keyword, prev_datetime, number_of_results, expire_days, max_post_count
            )
            tweet_count = 0
            failed_list = []
            for video in it:
                # Make message to tweet.
                str_first_retrieve = video.first_retrieve.strftime("%y/%m/%d %H:%M")
                msg = utils.make_tweet_msg(
                    self.TW_NICO_DETAIL_VIDEO_TWEET_FORMAT,
                    str_first_retrieve,
                    video.view_counter,
                    video.num_res,
                    video.mylist_counter,
                    title=video.title,
                    url=video.get_url(),
                )
                try:
                    self.tweet_msg(msg, is_sleep=True)
                    tweet_count += 1
                    db_manager.db_session.commit()
                except Exception as e:
                    db_manager.db_session.rollback()
                    logger.exception("Tweet failed msg={}".format(msg))
                    failed_list.append((e, msg))

            logger.info("nico_latest_commenting_video(): {} tweet".format(tweet_count))
            if failed_list:
                raise Exception("Tweet faild {}".format(prettyprint.pp_str(failed_list)))
コード例 #3
0
ファイル: twitter_bot.py プロジェクト: yonchu/twitter_bot
    def nico_comment_post(
        self, search_keyword, prev_datetime, max_comment_num=1500, max_tweet_num_per_video=3, filter_func=None
    ):
        logger.debug(
            "Call nico_comment_post({}, {}, {}, {}, {})".format(
                search_keyword, prev_datetime, max_comment_num, max_tweet_num_per_video, filter_func
            )
        )
        with DbManager() as db_manager:
            nico = NicoSearch(db_manager, self.nico_user_id, self.nico_pass_word)
            nico.login()
            # Search latest comments by NicoNico.
            videos = nico.search_videos_with_comments(search_keyword, prev_datetime, max_comment_num)
            tweet_count = 0
            failed_list = []
            for video in videos:
                if filter_func and filter_func(video):
                    continue
                for nico_comment in video.get_latest_comments(max_tweet_num_per_video):
                    # Make message for twitter.
                    msg = utils.make_tweet_msg(
                        self.TW_NICO_COMMENT_TWEET_FORMAT,
                        nico_comment.vpos,
                        nico_comment.post_datetime,
                        comment=nico_comment.comment,
                        title=video.title,
                        url=video.get_url(),
                    )
                    try:
                        self.tweet_msg(msg, is_sleep=True)
                        tweet_count += 1
                    except Exception as e:
                        logger.exception("Tweet failed msg={}".format(msg))
                        failed_list.append((e, msg))

            logger.info("nico_latest_commenting_video(): {} tweet".format(tweet_count))
            if failed_list:
                raise Exception("Tweet faild {}".format(prettyprint.pp_str(failed_list)))