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)
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())}')
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()
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()
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()
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
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)
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')