Пример #1
0
def hatebu():

    # データベースアクセス

    path = os.path.dirname(os.path.dirname( os.path.abspath(__file__))) + "/db"
    connect = sqlite3.connect(path + "/hatena.db")
    cursor = connect.cursor()

    # hatebu_list テーブルからデータを取得
    sql = """ 
    SELECT * FROM hatebu_list
    """ 

    # 取得したデータをパースしてリストに保存

    hatebu_list = []
    con = cursor.execute(sql)
    for row in con:
        tmp_row = {}
        for idx, col in enumerate(cursor.description):
            tmp_row[col[0]] = row[idx]

        hatebu_list.append(tmp_row)            

    connect.close()

    # Slackのチャンネル一覧を取得
    slack = Slack("SlackのToken")
    channel_list = slack.get_channnel_list()

    return template('hatebu', hatebu_list=hatebu_list, channel_list=channel_list)
Пример #2
0
def post_to_channel() -> None:
    """
    Post to slack channel top 10 trending tweets scheduled every 3 hours.
    :return: None
    """
    t = threading.Timer(10800.0, post_to_channel)
    t.daemon = True
    t.start()

    slack = Slack(HOOK_URL)
    msg = get_top10_msg()
    slack.post_to_channel(msg)

    print(f'Posted - {time.strftime("%T", time.localtime())}')
Пример #3
0
    def settlement_notice(self):
        try:
            # holdings stock list
            stockInfoList = self.get_stockInfoList()

            # set finance info from kabtan
            self.set_settlementInfo(stockInfoList)

            # set display message
            sortedStockInfoList = sorted(stockInfoList,
                                         key=itemgetter("profitAnnoDay"))
            mesList = []
            mesLinkParam = []
            stockCount = 1
            for info in sortedStockInfoList:
                mesList.append(" ".join([val for val in info.values()]))
                if stockCount <= self.CHART_DISP_LIMIT:
                    mesLinkParam.append("&symbol" + str(stockCount) + "=" +
                                        info["stockCd"])
                    stockCount += 1

            mesStockInfo = '\n'.join(mesList)
            mesCompareChartLink = '<https://www.morningstar.co.jp/frstock_us/compare.html?term=1Y' + ''.join(
                mesLinkParam) + '|compare chart>'
            mesLineUpChart = '<https://stockcharts.com/freecharts/candleglance.html?$SPX,' + ",".join(
                stock["stockCd"]
                for stock in sortedStockInfoList) + '|line up chart>'

            message = "=== portfolio settlement day ===\n" + mesStockInfo + "\n" + mesCompareChartLink + "\n" + mesLineUpChart

            # slack notice
            slack = Slack()
            slack.post_message_to_channel("general", message)

        except NoSuchElementException as e:
            print('settlement info extraction error.')
            print('例外args:', e.args)

        finally:
            self.driver.quit()
Пример #4
0
    def execute(self):
        driver = self.driver
        slack = Slack()
        try:

            for url in self.capTgtList['url']:
                img_path = SeleniumUtils.capureRange(driver, url)

                # post img to slack
                slack.post_img_to_channel("general", img_path)

        except WebDriverException:
            import traceback
            message = "occurred system error!!\n" + str(traceback.print_exc())
            slack.post_message_to_channel("general", message)
        finally:
            driver.close()
Пример #5
0
    def ipo_request(self):
        driver = self.driver
        slack = Slack()
        try:
            # SBI securities page
            driver.get("https://www.sbisec.co.jp/ETGate")

            for login_info in self.login_info_list:
                self.one_person_ipo_request(driver, login_info)

            # slack notice
            message = "everyone's ipo applied num:" + str(self.applyCount)
            slack.post_message_to_channel("general", message)
        except WebDriverException:
            import traceback
            message = "occurred system error!!\n" + str(traceback.print_exc())
            slack.post_message_to_channel("general", message)
        finally:
            driver.close()
Пример #6
0
def checkRate(jdata, rate):
    """ 取得したデータを評価する
	params:
		jdata 過去のデータ
		rate  現在の為替レート
	"""

    slack = Slack(SLACK_API)

    isOverSellRate = False
    isUnderBuyRate = False

    for row in jdata['data']:
        if (row['rate'] > SELL_RATE):
            isOverSellRate = True
            isUnderBuyRate = False

            if (row['rate'] > MAX_RATE):
                isOverSellRate = False

        elif (row['rate'] < BUY_RATE):
            isOverSellRate = False
            isUnderBuyRate = True

            if (row['rate'] < MIN_RATE):
                isUnderBuyRate = False

        if (row['rate'] < ALERT_RATE):
            isOverSellRate = False

    rateMessage = "為替レートが設定値[{}円]を"
    if (isOverSellRate):
        if (rate > MAX_RATE):
            slack.post_message_to_channel(
                "general",
                rateMessage.format(str(MAX_RATE)) + "超えました")
            print("max rate")
            jdata.update({"data": []})
        elif (rate < ALERT_RATE):
            slack.post_message_to_channel(
                "general",
                rateMessage.format(str(ALERT_RATE)) + "下回りました")
            print("alert")
        elif (rate < BUY_RATE):
            slack.post_message_to_channel(
                "general",
                rateMessage.format(str(BUY_RATE)) + "下回りました")
            print("buy")
    elif (isUnderBuyRate):
        if (rate < MIN_RATE):
            slack.post_message_to_channel(
                "general",
                rateMessage.format(str(MIN_RATE)) + "下回りました")
            print("min rate")
            jdata.update({"data": []})
        elif (rate > SELL_RATE):
            slack.post_message_to_channel(
                "general",
                rateMessage.format(str(SELL_RATE)) + "超えました")
            print("sell")

    return jdata
Пример #7
0
def judge_new_date(current, new):
    """
    はてブから取得した日付がデータベースのlast_postより新しい日付かを判定する
    """

    current_datetime = datetime.datetime.strptime(current, "%Y-%m-%dT%H:%M:%S+09:00")
    new_datetime = datetime.datetime.strptime(new, "%Y-%m-%dT%H:%M:%S+09:00")

    return current_datetime < new_datetime


if __name__ == "__main__":

    hatebu = Hatebu()
    slack = Slack("SlackのToken")

    # データベースアクセス
    path = os.path.dirname(os.path.dirname( os.path.abspath(__file__))) + "/db"
    connect = sqlite3.connect(path + "/hatena.db")
    cursor = connect.cursor()

    sql = """
    SELECT * FROM hatebu_list
    """

    con = cursor.execute(sql)
    for row in con:

        (idx, channel, word, bookmark_count, last_post) = row
        xml = hatebu.get_rss_data(word, bookmark_count)
Пример #8
0
                        choices=['twitter', 'slack'],
                        type=str)

    args = parser.parse_args()

    if args.mode == 'twitter':
        logger.info('Run on Twitter')

        from twitter_bot import Twitter

        twt = Twitter()
        try:
            twt.execute_bot()
        except KeyboardInterrupt:
            logger.info('Terminate nojambot on Twitter')

    else:
        logger.info('Run on Slack')

        from slack_bot import Slack

        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)

        slk = Slack()
        try:
            asyncio.get_event_loop().run_until_complete(slk.execute_bot())
            asyncio.get_event_loop().run_forever()
        except KeyboardInterrupt:
            logger.info('Terminate nojambot on Slack')