[Python] Pyppeteer를 버리다
·
Study/Python
여하튼 오래 걸리는 작업이다. Selenium보다 Pyppeteer가 빨랐지만, 결국 브라우저가 페이지의 많은 부분을 렌더링 해야만 하는 무거운 작업의 연속이었기에 해결책이 필요했다. 물론 Yahoo! Finance가 짧은 주기로 주가를 실시간 갱신해 주고, 다른 사이트는 이 정도로 신속하게 갱신해 주지 않기에 최대한 이를 활용하면서 속도를 올리고 싶었다. 하지만 너무 느린 속도를 감당할 수 없어서 갱신 주기를 포기하고 좀 더 가벼운 사이트를 찾기로 했다. 쓸만한 사이트를 찾은 것 같다 Stock Analysis라는 사이트를 발견했다. 처리 속도가 빠른 데스크탑에서 비교해도 명백히 이쪽이 빠르다. 아후는 무거운 렌더링 과정 없이 데이터를 가져올 수 없었지만 여기는 lxml을 통해 빠르게 가져올 수 있었다..
[Python] 스크래핑 과정 최적화를 위한 시도
·
Study/Python
동적 웹을 스크래핑하는 과정은 필수적으로 JS 렌더링이 필요하기 때문에 그 부하가 크고 시간이 오래 걸린다. 이전에 Selenium을 썼지만 이 녀석, 너무 느리다. 내 아마존 프리티어 VM이 감당하기엔 너무 큰 짐이 아니었나 싶기도 하다. 그래서 아래와 같은 방법들을 모색해 봤다. 1. 클라우드 변경 조금 더 속도가 빠른 클라우드를 찾기 위해 구글링을 거듭했다. 약간의 돈이라면 지불할 용의도 있었다. 그러다 문득 뇌리에 스친 Oracle Cloud. 1개의 OCPU를 제공한다는 뜻은 2개의 스레드를 돌릴 수 있다는 뜻이다. 일정 사용량을 초과하지만 않으면 평생 무료이기도 하니 이것으로 낙점. 한 달짜리 무료 크레딧도 받은 김에 12 코어짜리 VM도 설정했다. 내 봇엔 너무 과한 스펙이지만 어차피 사라질..
[Python] 봇 개선 및 커맨드 추가
·
Study/Python
새로운 기능으로 주식 정보를 가져오는 명령어를 만드려고 했다가 아주 큰일이 됐다. 굳이 손대고 싶지 않았던 귀찮은 부분들에 손을 대기로 했다. 1. 메인 봇 코드 다이어트 기존엔 명령어를 별도로 빼는 것이 아니라, 아래처럼 그 명령어 함수 안에 구동부를 다 때려 넣은 형식이었다. #region sync @client.tree.command(name='sync', description='Owner only') async def sync(interaction: discord.Interaction): if interaction.user.id == OWNER_ID: await interaction.response.defer(ephemeral=True) await client.tree.sync() await in..
[Python] 웹 파싱 / 기존 기능 개선
·
Study/Python
어떤 웹페이지에서 특정 시간 정보를 가져올 일이 간간히 있는데, 지금까진 그냥 눈으로 보고 손으로 데이터를 변환한 후 사용했다. 너무 미련한 짓인 것 같아서 확실히 자동화해야겠다고 생각했다... 해당 기능을 구현해 봇에 올릴 것이다. 1. 어떤 데이터를 받아올 것인가? FFXIV의 로드스톤엔 점검 관련 공지가 올라온다. 그 공지의 내용에 있는 일정에 대한 정보를 뜯어올 것이다. [続報]全ワールド メンテナンス作業 終了時間変更のお知らせ(8/8) 全ワールド メンテナンス作業 終了時間変更のお知らせ(8/8) | FINAL FANTASY XIV, The Lodestone 全ワールド メンテナンス作業 終了時間変更のお知らせ(8/8) jp.finalfantasyxiv.com 위 공지에서 시간을 나타내는 아래와 같다. 정규식..
[C++/Python] 패킷 자동화
·
Study/C++ & C#
패킷의 변동 사항과 관련해 그와 관련된 부분을 일일이 수정하는 것은 매우 번거롭고 실수가 잦을 수 있는 일일 것이다. 하지만 자동화한다면 실수도 줄 것이고 개발이 보다 편리해질 것이라 기대할 수 있겠다. 자동화하는 과정을 배워보자. 1. proto 파일 관리 사실 이전에 proto 파일을 작성한 것처럼 모든 구조체를 하나에 때려 박는 것은 좋은 선택이 아니다. 프로토콜, 구조체, 열거형 등등을 각자의 특성에 맞게 나눠서 관리하면 더 직관적일 것이다. 열거형부터 정의해 보자. syntax = "proto3"; package Protocol; enum PlayerType { // 항상 0번이 있어야 하기 때문에 NONE 등을 0으로 하는 걸 추천 PLAYER_TYPE_NONE = 0; PLAYER_TYPE_..
[Python] DeepL 번역 API 써보기
·
Study/Python
DeepL 번역이 성능이 썩 괜찮고 가끔 써봄직 하여 봇에 추가해 봤다. 1. 번역 API 선정 사실 처음부터 DeepL을 사용하기로 한 건 아니었다. 후보로 여러 번역기들을 생각해 봤다. GPT 비싸다. 그냥 비싸다. 그리고 번역이 메인인 모델이 아니기 때문에 번역 품질의 신뢰성이 가장 높다고 보기 힘들다. Papago 이미 kd()를 위해 사용하고 있다. 제한 토큰 수가 적기 때문에 패스. Google Translate 번역 품질이 나쁜 것은 아니지만, 마냥 좋다고도 할 수 없고 돈을 내지 많으면 사실상 사용하는 것이 무의미한 수준이다. DeepL 그나마 무료 플랜으로도 제한이 널널하고 번역 품질도 생각보다 괜찮아서 낙점했다. 그래서 DeepL의 홈페이지로 가서 등록하려니... 국내 카드를 안 먹는다..
[Python] 단위 변환
·
Study/Python
우리는 임페리얼 단위를 영구히 퇴출시키기 위해 노력할 필요가 있다. 1. 클래스 from Utils.Log import Logger as lg class unit(): # Convert Imperial to Metric def imperial_to_metric(value, unit): if unit == "in": return value * 2.54, "cm" elif unit == "ft": return value * 0.3048, "m" elif unit == "yd": return value * 0.9144, "m" elif unit == "mi": return value * 1.60934, "Km" elif unit == "gal": return value * 3.78541, "L" elif un..
[Python / GPT] 봇 코드 리팩터링
·
Study/Python
사실 이번 글을 이 카테고리에 써도 되나 모르겠다. 그래도 배우는 것이긴 하니 일단 여기에 쓴다. 1. Log 요즘 GPT 모르는 사람이 없다. 얘가 코드도 짜준다더라. 있는 걸 갖다 넣으면 리팩터링도 해주고. 그래서 내 기존 봇 코드를 이를 활용해 리팩터링 해 보기로 했다. 아래는 기존에 내가 작성한 코드다. class types(Enum): INFO = 1 ERROR = 2 DEBUG = 3 UNKNOWN = 4 class Colors: BLACK = '[\033[30m' RED = '[\033[31m' GREEN = '[\033[32m' YELLOW = '[\033[33m' BLUE = '[\033[34m' MAGENTA = '[\033[35m' CYAN = '[\033[36m' WHITE = '[..
[Python, AWS] csv에서 DynamoDB에로의 교체
·
Study/Python
원래 봇 로그 데이터 저장엔 Pandas를 활용해 csv 형태로 저장했지만, Cloudtype 상에서 csv를 확인한다는 게 여간 귀찮은 일이 아니었다. 접근성이 떨어지는 만큼 보려는 의욕 자체가 떨어진다고 할까... 그래서 이 불편함을 타파하고 나름대로 DB 공부를 해보고자 이걸 DB로 전부 교체하기로 결정했다. 원래는 Cloudtype에서 제공하는 MariaDB 템플릿을 쓰려고 했지만... HeidiSQL 상에서 접속을 시도했는데 안되더라? 클라우드에서 제공한 가이드도 현재의 UI랑 달랐다. 외부에서 TCP 접속이 막힌 느낌이긴 한데 그냥 안 되는 김에 다른 DB를 찾아보기로 했다. 집에 있는 라즈베리파이를 DB로 쓸까 잠깐 스쳐 지나가듯 생각했지만 파기. 적은 트래픽을 사용한다면 무료로 쓸 수 있는..
[Python] 봇에 Epoch Converter 추가
·
Study/Python
근래 타임스탬프를 사용할 일이 많아서 아래의 사이트를 자주 이용하고 있었다. https://www.epochconverter.com/ Epoch Converter Convert Unix Timestamps (and many other date formats) to regular dates. www.epochconverter.com 필요한 기능만 딱 있고 매우 편리한 사이트이지만... 역시 웹사이트에 접속해야 한다는 것 자체가 나에겐 매우 큰 귀찮음으로 다가왔기 때문에, 이를 봇에 올렸다. 1. 클래스 작성 당연히 메인 봇에 코드를 다 때려 넣으면 정신 사나우니 별도의 클래스로 관리한다. from datetime import datetime from math import trunc import time c..