반응형

안녕하세요

 

코딩연습생입니다

 

하 요즘은 24시간이 부족하네요ㅎㅎㅎ

 

주식 분석용 AI도 관리하고..블로그 포스팅.. 가상화폐 자동 매매 봇..ㅎㅎㅎ

 

이번생 한번 잘 살아볼려고 정말 아둥바둥 하네요ㅋㅋㅋ

 

이번에 가상화폐 자동 매매 봇을 돌리면서 서버와 클라이언트를 분리해서

 

좀 대중성(?)을 주어볼려고 생각해낸 아이디어가 클라이언트를 앱으로 제공하는걸 구상중인데

 

파이썬으로 앱에 쉽게 접근하는 방법으로 키비(kivy)가 많이 거론되네요

 

그래서 저도 키비를 한번 시도해 볼려고 합니다

 

그전에 해야 할게 당연히 키비 설치 방법이겠죠ㅎ

 

※ 해당 PC에 파이썬이 설치되어 있다는 가정하여 진행됩니다

 

1. 콘솔에서 아래 명령어를 실행하여 pip, wheel, virtualenv를 확인합니다

python -m pip install --upgrade pip wheel setuptools virtualenv

2. 기본 종속성을 설치합니다

python -m pip install docutils pygments pypiwin32 kivy_deps.sdl2 kivy_deps.glew kivy_deps.gstreamer

 

3. python 3.5 이상에서는 glew 대신 angle backend를 사용할 수도 있다 따라서 다음과 같은 명령어로 설치할 수 있다

python -m pip install kivy_deps.angle

 

4. 키비(kivy)를 설치 한다

python -m pip install kivy

 

5. 키비(kivy) 예제를 설치한다

python -m pip install kivy_examples

반응형
반응형

안녕하세요~

 

파이썬 티스토리 API 사용하기 제 3탄!!

 

본문 내용에 이미지를 넣는 방법을 포스팅해 보도록 하겠습니다

 

현재 포스팅 중인 글은 연재 느낌으로 작성되어 지고 있기 때문에

 

처음 오신분이시라면 이전글을 함께 보고 오셔야 이해가 되실듯 합니다

 

1. 티스토리 API 설정

https://codingman.tistory.com/147?category=762038

 

[Python] 티스토리 API 사용을 위한 Access_token 구하기

안녕하세요 코딩연습생입니다~ 이번 포스팅은 파이썬 언어를 통해 티스토리 API를 사용하여 자동 업로드를 구현해 볼려고 합니다 구현에 앞서 몇가지 준비사항들이 필요한데 1. Token 키를 알아야

codingman.tistory.com

2. 티스토리 API를 이용한 카테고리 ID 조회

https://codingman.tistory.com/152

 

[Python] 티스토리 API를 사용하여 작성글 쓰기(1)

안녕하세요 코딩연습생입니다~ 저번 포스팅에 이어 파이썬 언어를 통해 티스토리 API를 사용하여 자동 업로드를 구현 두번째 포스팅 입니다 https://codingman.tistory.com/147?category=762038 [Python] 티스토

codingman.tistory.com

3. 티스토리 API를 이용한 본문 작성글 올리기

https://codingman.tistory.com/158?category=762038

 

[Python] 티스토리 API를 사용하여 작성글 쓰기(2)

안녕하세요~ 요즘 블로그에 많은 시간을 할애하고 있네요ㅎㅎ 딥러닝 분석을 통한 주식 정보 자동 포스팅 구연하랴...오류수정...개선...끝이 안보이네요ㅎ 거기에 블로그의 원래 취지인 코딩 정

codingman.tistory.com

위의 단계를 모두 보셨다면 본문 내용에 이미지를 첨부하는것은 참 쉽게 적용하실 수 있습니다

 

물론 구현할때는 머리도 아프고 힘들었지만...

 

저와 같은 생각을 하시는 분이 계시다면 이 글을 보고 제가 소비한 시간보다 좀 더 빠르게 적용 하시길 바랍니다

 

일단 본문에 이미지를 넣기 위해서는 어려번의 단계가 필요했는데요

 

저의 경우 파이썬의 어떤한 결과를 txt 파일로 저장하였습니다

 

그리고 그 txt 파일을 png 그림 파일로 변환을 하였고

 

그 변환된 png 파일을 본문의 내용에 업로드 하는 방식으로 구조가 되어 있습니다

 

해당 포스팅 글에서 중요한 부분은 png 파일을 본문에 업로드 하는게 주요 주제이지만

 

제가 개발한 구조에 대한 모든 설명을 업로드 하도록 하겠습니다

 

 1. txt파일을 png 파일로 변환

    - 저는 파이썬의 PIL를 이용하여 이미지에 텍스트를 입히는 구조로 만들었습니다

# coding=utf-8
from PIL import Image, ImageDraw, ImageFont
import textwrap
import requests
import webbrowser
from datetime import datetime
import os
from pandas import DataFrame
import settings
import time
import json

파이썬 제일 상단의 패키지 선언 부분입니다

 

 

텍스트 문서를 이미지에 쓰는 함수를 만들어 줍니다

 

    def make_image(self, message, height, filename):
        # Image size
        W = 500
        H = height
        bg_color = 'rgb(214, 230, 245)'  # 아이소프트존

        # font setting
        font = ImageFont.truetype('NanumSquareRoundR.ttf', size=12)
        font_color = 'rgb(0, 0, 0)'  # or just 'black'
        # 원래 윈도우에 설치된 폰트는 아래와 같이 사용 가능하나,
        # 아무리 해도 한글 폰트가 사용이 안 되어.. 같은 폴더에 다운받아 놓고 사용함.
        # font = ImageFont.truetype("arial.ttf", size=28)

        image = Image.new('RGB', (W, H), color=bg_color)
        draw = ImageDraw.Draw(image)

        lines = message

        # start position for text
        x_text = 10
        y_text = 10

        print(lines)

        # 각 줄의 내용을 적음
        for line in lines:
            line = str(line).replace("\\n", "").replace("{", "").replace("}", "")

            print(line)

            width, height = font.getsize(line)
            draw.text((x_text, y_text), line, font=font, fill=font_color)
            y_text += height
            # height는 글씨의 높이로, 한 줄 적고 나서 height만큼 아래에 다음 줄을 적음

        save_path = os.path.join(settings.BASE_DIR, "tistory/png/")

        #파일이 존재하면 삭제 후 저장
        if os.path.isfile(save_path + '{}.png'.format(filename)):
            os.remove(save_path + '{}.png'.format(filename))
            image.save(save_path + '{}.png'.format(filename))
        else:
            # 안에 적은 내용을 파일 이름으로 저장
            image.save(save_path + '{}.png'.format(filename))

폰트 파일은 네이버 나눔스퀘어라운드R 폰트를 사용하였는데 검색하면 무료로 사용이 가능합니다

 

혹시 귀찮으신분들은 아래 링크에 첨부해 놓을께요

 

NanumSquareRoundR.ttf
1.01MB

 

 

그 다음 해야할것은 텍스트 파일의 내용을 DataFrame 형식으로 만들어 make_image 함수에 전달 해야 합니다

 

    def set_stockclose(self):
        data_list = []

        f = open(os.path.join(settings.BASE_DIR, "data/list/stockclose_list.txt"), "r")
        while True:
            line = f.readline()
            if not line:
                break
            a, b, c = line.split(sep=';')
            data = {"종목코드 : " + a + "종목명 : " + b + " 예측종가 : " + c}
            data_list.append(data)

        text_hight = len(data_list) * 15

        self.make_image(data_list, text_hight, "stockclose_list")

f라는 경로에 있는 txt 파일을 불러와서 data_list라는 배열에 Dataframe 형태로 넣어주고 그 값을 make_image로

 

넘겨주는 구문 입니다

 

이렇게 하면 지정한 경로에 들어가면 txt의 내용을 담고 있는 png 파일이 생성됩니다

 

 

 

그러면 이제 저 생성된 이미지를 본문 내용에 넣어볼꼐요

 

2. png 파일을 본문 내용에 넣기

   (참고로 티스토리API는 그림 파일만 업로드가 가능하니 참고하세요)

 

    def set_fileupload(self, path):
        blogName = blog_name
        token = access_token

        files = {'uploadedfile': open(path, 'rb')}
        params = {'access_token': token, 'blogName': blogName, 'targetUrl': blogName, 'output': 'json'}
        rd = requests.post('https://www.tistory.com/apis/post/attach', params=params, files=files)

        try:
            item = json.loads(rd.text)
            print(json.dumps(item, indent=4))
            print("----------------------------------------------")
            print(item["tistory"]["replacer"])
            print(item["tistory"]["url"])
            print(item["tistory"]["status"])
        except:
            print("Failed")

        return item["tistory"]["replacer"]

 

 

위와 같이 업로드 함수를 만들어 줍니다

 

그리고 저번 티스토리 API 글 작성하기 2탄에서 본문을 만드는 부분에서 다음과 같이 사용합니다

 

    def get_content(self):
        skyloket_path = os.path.join(settings.BASE_DIR, "tistory/png/skyloket_list.png")
        stockclose_path = os.path.join(settings.BASE_DIR, "tistory/png/stockclose_list.png")
        buylist_path = os.path.join(settings.BASE_DIR, "tistory/png/buy_list.png")
        html_path = os.path.join(settings.BASE_DIR, "tistory/html/html_content.html")
        now = datetime.now()
        nowdate = now.strftime('%Y-%m-%d')
        nowtime = now.strftime('%Y-%m-%d %H:%M:%S')

        html_content = '<p>* 현재 개발 중인 주식 분석 프로그램 실행 결과 값입니다</p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;"><b>&nbsp; 이 자료는 주식 투자 목적이 아닌 프로그램 분석율 계산을 위한 값이므로 절대 신뢰하지 마세요</b></span></p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;"><b>&nbsp; (이자료를 통한 투자 손해에 대해 필자는 배상하지 않습니다)</b></span></p>'
        html_content += '<p>&nbsp;</p>'
        html_content += '<p data-ke-size="size14">※ 해당 정보는 프로그램 결과값이 정리하여 자동으로 포스팅되는 글라는 점을 참고해 주세요</p>'
        html_content += '<p data-ke-size="size14">&nbsp; &nbsp;(' + nowdate + '프로그램이 자동으로 포스팅한 자료 입니다)</p>'
        html_content += '<p>&nbsp;</p>'
        html_content += '<p>▣' + nowdate + '_급등 주가 리스트</p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;">(현재 기준 지난 30일간 주가가 10배 이상 급등한 주가 리스트입니다)</span></p>'
        html_content += '<p>' + self.set_fileupload(skyloket_path) + '</p>'
        html_content += '<p>&nbsp;</p>'
        html_content += '<p><span style="color: #333333;">▣' + nowdate + '_매수 예상 종목</span></p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;">(프로그램에서 현재 기준 매수할 경우 승률이 가장 좋은 리스트 입니다)</span></p>'
        html_content += '<p>' + self.set_fileupload(buylist_path) + '</p>'
        html_content += '<p>&nbsp;</p>'
        html_content += '<p><span style="color: #333333;">▣ 관심 주가별 예상 종가 리스트</span></p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;">(과거 데이터를 이용하여 텐서플로워를 통해 최종 예상 종가를 예측한 값입니다)</span></p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;">(신뢰성은 매우 낮습니다ㅠ 뭔가 알고리즘을 바꿔야 할거 같습니다)</span></p>'
        html_content += '<p>' + self.set_fileupload(stockclose_path) + '</p>'
        html_content += '<p>&nbsp;</p>'
        html_content += '<p>위의 주가 리스트는 ' + nowtime + ' 기준으로 취합된 데이터로 작성된 자료 입니다</p>'
        html_content += '<p>프로그램 결과에 대한 값을 티스토리에 자동 포스팅 중입니다</p>'
        html_content += '<p>프로그램 결과 평일 기준 오전, 오후 두번 포스팅 하고 있습니다</p>'
        html_content += '<p>해당 자료는 테스트 및 분석용으로 사용합니다</p>'
        html_content += '<p>실제 투자에 활용하고자 할 경우 참고만 하시고 최종 분석은 본인이 해야 합니다</p>'
        html_content += '<p>감사합니다</p>'

        html_file = open(html_path, 'w+')
        html_file.write(html_content)
        html_file.close()

 

본문 내용을 보시면 중간 중간에 self.set_fileupload()라는 함수 호출 부분이 있습니다

 

 

이렇게 사용합니다

 

그리고 자동 포스팅을 돌리시면 아래와 같이 중간 함수를 호출한 위치에 다음과 같이 그림파일이 생성되게 됩니다

 

실제 본문 내용을 파이썬에서 ptrint문으로 찍어보시면 티스토리에서 이미지 해당 부분에 html 형태의 이미지 업로드

 

URL 주소가 찍히는 모습을 보실 수 있습니다

 

반응형
반응형

안녕하세요~

 

요즘 블로그에 많은 시간을 할애하고 있네요ㅎㅎ

 

딥러닝 분석을 통한 주식 정보 자동 포스팅 구연하랴...오류수정...개선...끝이 안보이네요ㅎ

 

거기에 블로그의 원래 취지인 코딩 정보 공유까지 할려니 하루가 후딱 지나가고 있습니다

 

휴식과 일의 배율이 참 중요하다는데..코로나로 인해 강제 근무를 더 하게 되는거 같습니다

 

조만간 나올 백신 종전이 될까요?ㅎ

 

사실 개인적으로는 백신이 나와도 선뜻 못 맞을거 같습니다 저는ㅋㅋ

 

이번 포스팅은 저번 포스팅에 이은 2탄~

 

https://codingman.tistory.com/152

 

[Python] 티스토리 API를 사용하여 작성글 쓰기(1)

안녕하세요 코딩연습생입니다~ 저번 포스팅에 이어 파이썬 언어를 통해 티스토리 API를 사용하여 자동 업로드를 구현 두번째 포스팅 입니다 https://codingman.tistory.com/147?category=762038 [Python] 티스토

codingman.tistory.com

파이썬에서 티스토리API를 사용하여 작성글 올리기 입니다

 

저번 포스팅에서 글을 올릴 위치를 지정하기 위한 카테고리 ID 조회까지 구현해 봤는데요

 

이번에는 카테고리 ID를 이용해서 실질적인 글을 올리는 방법에 대해서 포스팅 할려고 합니다

 

해당 포스팅은 분량이 많아 연재식으로 작성 중인데 처음오신분들은 티스토리 API 셋팅 방법 부터 보고 오셔야

 

이해가 되실거라 생각됩니다

 

https://codingman.tistory.com/147?category=762038

 

[Python] 티스토리 API 사용을 위한 Access_token 구하기

안녕하세요 코딩연습생입니다~ 이번 포스팅은 파이썬 언어를 통해 티스토리 API를 사용하여 자동 업로드를 구현해 볼려고 합니다 구현에 앞서 몇가지 준비사항들이 필요한데 1. Token 키를 알아야

codingman.tistory.com

 

처음 티스토리 API설정이 끝나고 카테고리 ID를 조회하여 찾으셨다면 이제 쉽게 글을 올리실수 있습니다

 

일단 티스토리가 html 형식으로 글을 쓰게 됩니다

 

쉬운 방법은 일단 PC를 통해 샘플 글을 미리 작성을 합니다

 

샘플 글을 작성하신 다음 우측 상단에 기본모드를 html 모드로 변경해 줍니다

 

html 모드로 변경을 하면 아래와 같은 형태로 변경됩니다

 

그럼 컨텐츠 영역에 글을 모두 복사 한뒤 파이썬에서 분자열 변수에 담아서 코딩을 합니다

 

    def get_content(self):
        html_content = '<p>* 현재 개발 중인 주식 분석 프로그램 실행 결과 값입니다</p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;"><b>&nbsp; 이 자료는 주식 투자 목적이 아닌 프로그램 분석율 계산을 위한 값이므로 절대 신뢰하지 마세요</b></span></p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;"><b>&nbsp; (이자료를 통한 투자 손해에 대해 필자는 배상하지 않습니다)</b></span></p>'
        html_content += '<p>&nbsp;</p>'
        html_content += '<p data-ke-size="size14">※ 해당 정보는 프로그램 결과값이 정리하여 자동으로 포스팅되는 글라는 점을 참고해 주세요</p>'
        html_content += '<p data-ke-size="size14">&nbsp; &nbsp;(' + nowdate + '프로그램이 자동으로 포스팅한 자료 입니다)</p>'
        html_content += '<p>&nbsp;</p>'
        html_content += '<p>▣' + nowdate + '_급등 주가 리스트</p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;">(현재 기준 지난 30일간 주가가 10배 이상 급등한 주가 리스트입니다)</span></p>'
        html_content += '<p>&nbsp;</p>'
        html_content += '<p><span style="color: #333333;">▣' + nowdate + '_매수 예상 종목</span></p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;">(프로그램에서 현재 기준 매수할 경우 승률이 가장 좋은 리스트 입니다)</span></p>'
        html_content += '<p>&nbsp;</p>'
        html_content += '<p><span style="color: #333333;">▣ 관심 주가별 예상 종가 리스트</span></p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;">(과거 데이터를 이용하여 텐서플로워를 통해 최종 예상 종가를 예측한 값입니다)</span></p>'
        html_content += '<p data-ke-size="size14"><span style="color: #ee2323;">(신뢰성은 매우 낮습니다ㅠ 뭔가 알고리즘을 바꿔야 할거 같습니다)</span></p>'
        html_content += '<p>&nbsp;</p>'
        html_content += '<p>위의 주가 리스트는 ' + nowtime + ' 기준으로 취합된 데이터로 작성된 자료 입니다</p>'
        html_content += '<p>프로그램 결과에 대한 값을 티스토리에 자동 포스팅 중입니다</p>'
        html_content += '<p>프로그램 결과 평일 기준 오전, 오후 두번 포스팅 하고 있습니다</p>'
        html_content += '<p>해당 자료는 테스트 및 분석용으로 사용합니다</p>'
        html_content += '<p>실제 투자에 활용하고자 할 경우 참고만 하시고 최종 분석은 본인이 해야 합니다</p>'
        html_content += '<p>감사합니다</p>'

        html_file = open(html_path, 'w+')
        html_file.write(html_content)
        html_file.close()

이런식으로 아예 함수로 하나를 만들었습니다

 

그런뒤 해당 변수의 내용을 토대로 html 샘플 파일을 만들었습니다

 

 

이부분이 바로 html 파일로 저장하는 구문입니다

 

그런 다음 아래와 같이 티스토리 API를 동작시킬 함수를 만들어 줍니다

 

    def get_write(self):
        self.get_content()

        #생성된 html 파일의 경로.
        html_path = os.path.join(settings.BASE_DIR, "tistory/html/html_content.html")
        now = datetime.now()  # current date and time
        today = now.strftime("%Y.%m.%d")
        nowtime = now.strftime('%H:%M:%S')
        title = '[주가분석요약] ' + today + '_프로그램을 활용한 주식분석_예상결과(' + nowtime + ')'
        f = open(html_path, "r", encoding='cp949')
        content = f.read()

        print(content)
        #with open(html_path, "r", encoding='ISO-8859-1') as file:
        #    print(file)
        #    content = file.read()

        visibility = "3"  # 발행상태 0비공개-기본, 1보고,3발행
        category_id = "834763"  # 카테고리 아이디 기본값 0
        slogan = title  # 문자주소
        tag = "주가분석, 급등주, 퀸트분석, 종가예측, 관심종목, 주식, 종목," + today + " 주식정보"  # 태그 ,로 구분
        acceptComment = ""  # 댓글 허용 (0, 1 - 기본값)
        password = ""  # 보호글 비밀번호
        url = 'https://www.tistory.com/apis/post/write'
        data = {'access_token': access_token, 'output': 'json', 'blogName': blog_name, 'title': title, 'content': content,
                'visibility': visibility, 'category': category_id, 'slogan': slogan, 'tag': tag,
                'acceptComment': acceptComment, 'password': password}
        r = requests.post(url, data=data)
        print(r, r.text)

 

해당 구문에서 아까 글을 올리고자 하는 문자열을 html 파일 형태로 저장하고

 

 

주석에 설명되어 있듯이 저장된 html을 읽어오는 구문 입니다

 

그리고 requests 형태로 변경하기 위해 여러가지 변수의 값을 지정했습니다

 

1)  title : 글 제목

2)  content : 본문 내용

3)  visivbility : 발생상태

4)  categort_id : 올리고자 하는 카테고리 ID

5)  slogan : 주석(?) 같은 의미

6)  tag : 글 태그 입력

7)  acceptComment : 댓글 권한 설정

8)  password : 보호글 비밀번호

9)  url : 티스토리 API 동작 주소

10) data : 위의 종합 정보를 requests 형태로 조합

 

Dataframe에 위의 정보 정도로 취합되는거 같습니다

 

해당 구문을 모두 작성하신뒤 

 

 

 

이렇게 __init__ 부분에 다음과 같이 호출을 하게 되면

 

저장해 놓은 html의 내용이 본문의 내용으로 업로드 되어 집니다

 

정상 적으로 글쓰기가 동작했다면 다음과 같은 리턴 값이 오게 됩니다

 

 

여기까지 하셨다면 성공하신겁니다

 

다음 포스팅에서는 본문 내용에 이미지 파일을 넣어서 작성글을 만들어보는 포스팅 방법을 올릴 예정입니다

 

밑에 이미지는 현재 제가 프로그램을 통해 자동 업로드 하고 있는 결과입니다

 

여러분도 정기적인 정보나 대량의 자료를 업로드해야할시 위의 정보로 구현하여 사용해 보시기 바랍니다

 

반응형
반응형

안녕하세요

 

코딩연습생입니다~

 

저번 포스팅에 이어 파이썬 언어를 통해 티스토리 API를 사용하여 자동 업로드를 구현 두번째 포스팅 입니다

 

https://codingman.tistory.com/147?category=762038

 

[Python] 티스토리 API 사용을 위한 Access_token 구하기

안녕하세요 코딩연습생입니다~ 이번 포스팅은 파이썬 언어를 통해 티스토리 API를 사용하여 자동 업로드를 구현해 볼려고 합니다 구현에 앞서 몇가지 준비사항들이 필요한데 1. Token 키를 알아야

codingman.tistory.com

저번 포스팅에서 티스토리 API 사용시 꼭 필요한 Access_Token을 얻는 방법을 소개했습니다

 

이번에는 이어서 글을 올리고자 하는 카테고리 ID를 취득하는 방법을 작성해 보도록 할께요

 

이번 포스팅은 파이썬 환경에서 동작합니다

 

제가 사용한 파이썬의 환경은 아래와 같습니다

 

* 동작 환경

   1) Python 3.6

   2) requests

   3) webbrowser

   4) json

 

저는 example.py라는 파일을 하나 만들고

 

제일 상단에 다음과 같이 패키지를 선언해줬습니다

 

아래 패키지 목록중 settings는 경로를 지정해놓은 별도 py 파일이므로 여기서 설명은 생략 하도록 하겠습니다

# coding=utf-8
from PIL import Image, ImageDraw, ImageFont
import textwrap
import requests
import webbrowser
from datetime import datetime
import os
from pandas import DataFrame
import settings
import time
import json

 

다음 하단에 전 포스팅에서 얻은 정보를 셋팅해 줄겁니다

 

# client_id  == app_id
client_id = ""
# client_secret = Secret_Key
Secret_Key = ""
# code 는 access_token 을 받기 위한 중간 인증코드, 한시간 내 한번만 사용됨.
code = ""
# access_token 최종인증키 유효기간동안 사용가능
access_token = ""

# 티스토리 주소의 아이디나 전체주소
blog_name = "codingman.tistory.com"

# 콜백주소는 자신의 티스토리 주소를 사용해도 되고, 끝에 /는 넣지 않는다.
redirect_uri = "http://codingman.tistory.com"
state_param = "bm"  # 임의의 문자열
output_type = "json"

requests_headers = {  # 없어도 동작됨
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}

 

소스코드가 이해가 안되실거 같아서 빨간색으로 표기된 영역에 알맞은 정보 값을 넣어주시면 됩니다

 

설명은 주석으로 작성되어 있으니 어렵지 않으실거 같습니다

 

이제 파이썬의 코드를 클래스로 만들기 위해 구조를 먼저 선언하겠습니다

 

class message_write:
	    def __init__(self):
        super().__init__()

        # 먼저 코드를 생성하고,
        if not code:
            auth_url = f'https://www.tistory.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code&state={state_param}'
            webbrowser.open(auth_url)
            print('주소창에서 코드 값을 복사하세요. ?code= 이하')
            # r = requests.get(auth_url)
            # print(r.text)

        # 이후에 액세스 토큰을 받아야 한다. 이게 좀 귀찮고 낮설다.
        if code and (not access_token):
            print('acess token 시도중...')
            token_url = f'https://www.tistory.com/oauth/access_token?client_id={client_id}&client_secret={Secret_Key}&redirect_uri={redirect_uri}&code={code}&grant_type=authorization_code'
            r = requests.get(token_url)
            print(r.text)

        self.get_write()
 
 if __name__ == "__main__":
    # 실행
    message_write()
    #get_category()
    #get_write()

 

이렇게 message_write라는 클래스를 만들고

 

모듈별 실행을 위해 __main__을 잡으주고  py파일 제일 먼저 실행될 부분인 __init__에 다음과 같이 코딩해 줍니다

 

다음 각각의 정보를 확인하는 모듈을 넣어볼께요

 

현재 나의 블로그의 정보를 확인하는 모듈입니다

 

    def get_info(self):
        info_url = f'https://www.tistory.com/apis/blog/info?access_token={access_token}&output={output_type}'
        r = requests.get(info_url, headers=requests_headers)
        print(r.text)
        return r.text

 

너무 정보가 뒤죽박죽 나와서 그냥 쉽게 블로그에 대한 속성 값이 나옵니다

 

두번째는 게시된 포스팅글에 대한 속성 값을 조회하는 방법입니다

 

    def get_list(self, page_number):
        url = f'https://www.tistory.com/apis/post/list?access_token={access_token}&output={output_type}&blogName={blog_name}&page={page_number}'
        r = requests.get(url, headers=requests_headers)
        print(r.text)
        return r.text

 

세번째 블로그의 카테고리 ID를 조회 하는 방법입니다

 

    def get_category(self):
        url = f'https://www.tistory.com/apis/category/list?access_token={access_token}&output={output_type}&blogName={blog_name}'
        r = requests.get(url, headers=requests_headers)
        r = r.json()['tistory']['item']['categories']
        for i in r:
            print(f'{i["name"]} ({i["id"]})')
        return r

 

카테고리 명과 (ID) 값을 확인 하실수 있습니다

 

이렇게 현재 나의 블로그의 속성을 확인 하는 방법에 대해 알아 보았습니다

 

이번 포스팅에서 확인한 카테고리 ID를 가지고 글을 업로드하는 방법을 다음시간에 포스팅 해보도록

 

하겠습니다

 

반응형
반응형

안녕하세요

 

코딩연습생입니다~

 

이번 포스팅은 파이썬 언어를 통해 티스토리 API를 사용하여 자동 업로드를 구현해 볼려고 합니다

 

구현에 앞서 몇가지 준비사항들이 필요한데

 

1. Token 키를 알아야 합니다(이번 포스팅 내용)

2. 글을 올리려고 하시는 카테고리 ID를 알아야 합니다

3. 파일 첨부시 이미지 파일만 가능합니다

 

그러면 시작해 보도록 할께요

 

1. token 키를 확인하기

https://www.tistory.com/guide/api/manage/register

 

TISTORY

나를 표현하는 블로그를 만들어보세요.

www.tistory.com

위의 사이트에 접속합니다

 

 

빨간색으로 표기된 부분을 모두 작성합니다

 

서비스명 : 블로그명을 입력합니다

서비스URL : 블로그 전체 주소를 입력합니다

서비스형태 : 웹서비스

서비스권한 : 읽기.쓰기

CallBack :  서비스 URL와 동일하게 입력합니다

 

그 다음 등록을 눌러주세요

 

등록이 완료가 되면 앱 관리 메뉴로 들어가서 상세 내용을 확인 합니다

앱 관리 -> 등록된 서비스명의 설정을 클릭

 

설정 메뉴에서 다음 값을 확인 할 수 있습니다

 

1. App ID, Secret Key

 

AppID와 Secret Key를 알았다면 익스플로러를 실행해서 다음 주소를 입력 합니다

 

https://www.tistory.com/oauth/authorize?client_id={AppID}&redirect_uri={서비스URL}&response_type=code&state=someValue

AppID와 서비스URL은 설정화면에 있는 정보를 넣어주시면 됩니다

 

위의 URL을 접속하시면 아래와 같은 화면이 나오게됩니다

 

이런 창이 드시면 허가하기를 눌러줍니다

 

새로운 창이 뜨면서 위의 url 주소 중 아래 빨간색 영역으로 표기된 부분을 잘 복사해 줍니다

 

 

code 값을 얻으셨다면 이제 마지막 단계만 하시면 Access Token을 얻으실수 있습니다

 

https://www.tistory.com/oauth/access_token?client_id={AppID}&client_secret={SecretKey}&redirect_uri={서비스URL}&code=코드&grant_type=authorization_code

 

해당 주소를 익스플로러에 입력해주시고 디버깅 모드를 여시면 아래와 같이 Access_token을 얻으실수 있습니다

 

 

다음번 포스팅에서는 이번에 얻은 Access_token을 사용하여 파이썬으로 카테고리 ID를 확인하는 방법을 포스팅

 

하도록 하겠습니다

 

 

반응형
반응형

안녕하세요

 

코딩연습생입니다~ 이번 포스팅은 파이썬 언어를 통해 웹크롤링 기술을 사용하여 

 

네이버 주가정보를 엑셀로 가져오는 기능을 구현해 볼려고 합니다

 

이 웹크롤링은 사용 부분이 참 많은 부분입니다 알아두면 어디든 활용할 부분이 참 많을거 같습니다

 

일단 크롤링이 무엇인지? 어떤 구조로 활용되는것인지 간단히 알아보고 넘어가도록 하겠습니다

 

크롤링(Cwawling) 이란?

  - Web상에 존재하는 Contents를 수집하는 작업

    1) HTML 페이지를 가져와서, HTML/CSS 등을 파싱하고, 필요한 데이터만 추출하는 기법

    2) Open API(Rest API)를 제공하는 서비스에 Open API를 호출해서, 받은 데이터 중 필요한 데이터만 추출하는 기법

    3) Selenium등 브라우저를 프로그래밍으로 조작해서, 필요한 데이터만 추출하는 기법

 

구글에서 이런식으로 정의되어 있는거 같습니다ㅎ

 

일단 크롤링을 사용하기 위한 몇가지 라이브러리를 선언 합니다

 

1) BeautifulSoup

2) pandas

3) csv

4) re

5) requests

 

라이브러리 설치는 간단히 pip 명령어를 사용하여 설치 해주시면 됩니다

 

이제 네이버 주식정보를 크롤링하기 위한 함수를 구현해 보겠습니다

 

아래 함수 소스코드를 참고해주세요

 

여기서 outdirc변수에 불러온 주가정보를 저장할 경로를 지정하는 부분입니다

 

해당 주가코드에서 조회된 모든 내용을 크롤링 합니다

def ReadStock(code):
    try:
        outdirc = settings.APP_CONFIG['HOME'] + settings.CRAWL_CONFIG['ticker_output_csv_path']

        url = f"http://finance.naver.com/item/sise_day.nhn?code={code}"

        with urlopen(url) as u:
            html = BeautifulSoup(u, "lxml")
            last = html.find("td", class_="pgRR")
            s = str(last.a["href"]).split('=')
            lastpage = s[-1]

        df = pd.DataFrame()
        #pages = 10  # int(lastpage)
        pages = int(lastpage)
        print("\n")
        for page in range(1, pages + 1):
            pg_url = f'{url}&page={page}'
            pValue = pd.read_html(pg_url, header=0)[0]
            df = df.append(pValue)
            print(f'downloading.. {page:04d}/{pages:04d} : ({code})', end="\r")
        print("\n")
        df = df.rename(columns={'날짜': 'date',
                                '종가': 'close',
                                '시가': 'open',
                                '고가': 'high',
                                '저가': 'low',
                                '거래량': 'volume'})
        df = df.dropna() #결측값 행 제거
        df[['close', 'open', 'high', 'low', 'volume']] \
            = df[['close','open', 'high', 'low', 'volume']].astype(int)

    except Exception as e:
        print('Exception :', str(e))
        return None
    return df

   

크롤링이 발생되어야 할 구문에 다음과 같이 적용하여 실행 하면 됩니다

 

stockValue = naver.ReadStock(stock_code)

 

stock_code는 상장코드로 기억의 6자리 코드를 넣어 주시면 됩니다

 

이렇게 해서 실행하면 제가 설정한 경로 안에 주식코드 6자리 형태의 csv 파일이 생성이 됩니다

 

파일을 열어보면

 

 

이렇게 파이썬 크롤링을 통한 종가 정보를 가져올 수 있습니다

반응형
반응형

안녕하세요

 

코딩연습생입니다~ㅎ

 

이번 포스팅은 제목에서 언급한것 처럼 Python에서 pymssql을 사용한 mssql DB 데이터를 Select하는 방법을

 

포스팅해 보도록 하겠습니다

 

첫번째는 파이썬을 설치 해야 합니다

 

https://www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

해당 싸이트에 접속한 뒤에 아래 버튼을 통해 다운로드 받습니다

 

 

구버전을 다운로드 하시고자 한다면 화면을 좀 더 아래로 내리면 버전별 다운로드가 가능합니다

 

 

여기서 버전을 선택하여 Download를 눌러주시면 됩니다

 

다운 받은 설치 파일 실행하여 설치 합니다

 

 

Install Now를 클릭하여 설치

 

정상 적으로 설치가 되셨으면 시작버튼을 누루면 다음과 같은 목록이 나옵니다

 

 

다음 정상적인 설치가 되었는지 확인을 위해서 PowerSheel을 관리자 권한으로 실행 합니다

 

파워쉘에서 다음 명령어를 실행합니다

(명령어 뒤에 V는 꼭 대문자로 해주셔야 합니다)

python -V

 

이렇게 명령어를 치게 되면 현재 설치된 python의 버전 정보가 나타나야 합니다

 

위와 같이 표기가 되어야 정상 구동이 되는 것입니다

 

그 다음 pymssql을 설치하기 위해 pip 명령어를 사용합니다

 

pip install pymssql

 

위의 명령어를 치시면 설치가 진행 됩니다

 

저는 이미 설치 해논 상태라 설치가 되어 있다고 나오네요

 

설치를 완료 하셨다면 정상적으로 설치가 되었는지 확인해야겠지요?

 

python
import pymssql

 

위의 명령어를 순서로 사용해 줍니다

 

이렇게 pymssql에 패키를 불러와 다음 명령어를 대기하는 상태가 되어야 합니다

 

다음 파이썬 py 파일을 하나생성합니다

 

그리고 제일 상단에 pymssql 패키지를 불어와야 합니다

 

import pymssql

간단하죠?

 

그다음 함수를 만들어서 MSSQL에 접속을 시도 할겁니다

 

conn = pymssql.connect(server='localhost', database='SAC_VISION')

 

로컬의 SAC_VISION이라는 DB에 접속하겠다는 구문 입니다

 

여기서 혹 로컬이 아닌 네트워크 서버에 붙으신다면 server 뒤에 localhost가 아닌 IP 주소를 입력하시고

user='ID', password='패스워트'를 넣어주시면 됩니다

 

다음 커서를 생성하고

 

cursor = conn.cursor()

 

쿼리를 돌릴 execute를 생성합니다

 

        cursor.execute("SELECT CONVERT(INT, MODEL_NO), CONVERT(INT, VARIABLE_1), VARIABLE_2, "
                      +"       CONVERT(INT, AREA_X)+CONVERT(INT, POINT_X), CONVERT(INT, AREA_Y)+CONVERT(INT, POINT_Y), "
                      +"       CONVERT(INT, AREA_X)+CONVERT(INT, AREA_WIDTH)+CONVERT(INT, POINT_X),"
                      +"       CONVERT(INT, AREA_Y)+CONVERT(INT, AREA_HEIGHT)+CONVERT(INT, POINT_Y)"
                      +"  FROM [VISION_MODEL]"
                      +" WHERE REPLACE(VISION_NO,' ', '') = '" + str(k_vision_no) + "'"
                      +"   AND REPLACE(MODEL_METHOD,' ', '') = 'CLASSIFICATION'")

 

쿼리 내용은 따라 하지 않으셔도 됩니다~ 

 

※ 본인이 조회 할려는 Query를 사용하세요

 

row = cursor.fetchone()

 

그리고 한개씩의 값을 row라는 변수에 담아 줍니다

 

while row:
            list_roi.append(row)
            row = cursor.fetchone()
        conn.close()

 

이렇게 해서 실행하시게 되면 해당 쿼리의 결과값을 받으실수 있는데요

 

제가 만든 전체 함수를 올려드리 활용하여 알맞게 수정하여 사용하시기 바랍니다

 

def Read_CSV_ALL_Section(self, _cam_info = 1, _path = None):
        list_roi = []
        k_vision_no = _cam_info

        conn = pymssql.connect(server='localhost', database='SAC_VISION')
        cursor = conn.cursor()
        cursor.execute("SELECT CONVERT(INT, MODEL_NO), CONVERT(INT, VARIABLE_1), VARIABLE_2, "
                      +"       CONVERT(INT, AREA_X)+CONVERT(INT, POINT_X), CONVERT(INT, AREA_Y)+CONVERT(INT, POINT_Y), "
                      +"       CONVERT(INT, AREA_X)+CONVERT(INT, AREA_WIDTH)+CONVERT(INT, POINT_X),"
                      +"       CONVERT(INT, AREA_Y)+CONVERT(INT, AREA_HEIGHT)+CONVERT(INT, POINT_Y)"
                      +"  FROM [VISION_MODEL]"
                      +" WHERE REPLACE(VISION_NO,' ', '') = '" + str(k_vision_no) + "'"
                      +"   AND REPLACE(MODEL_METHOD,' ', '') = 'CLASSIFICATION'")

        row = cursor.fetchone()
        
        while row:
            list_roi.append(row)
            row = cursor.fetchone()
        conn.close()
        
        return list_roi

 

저는 저에게 맞는 방법으로 구현하것이라 소스코드를 그래도 사용하시면 오류가 나실겁니다~

 

꼭 수정하셔서 사용하세요~

반응형
반응형

Anaconda3에서 기본 설치시 파이선 3.7버전이 설치 되게 된다

 

하지만 텐서플로우나 특정 버전을 사용해야 할 경우 파이썬 버젼을 변경해야 하는데

 

이번 포스팅에서 Python 버전을 변경하는 방법을 설명 하도록 하겟습니다

 

1. 첫번재로 Anaconda 설치시 같이 설치 되는 명령 프롬프트를 실행 하세요

   - Anaconda Prompt 관리자 권한으로 실행 하세요

 

2. 명령 프롬프트에 다음 명령어를 실행 하세요

   - 저는 3.6버전을 설치 합니다

   - 아래 명령어를 실행하게 되면 3.6버전의 가장 마지막 버전이 설치되어 집니다

conda install python=3.6

 

3. 설치 최종 확인

    - 다음 구문이 뜨게 되면 'Y'를 입력해 주세요

 

4. 설치를 진행 합니다

    - 약간 수분이 걸릴수 있으니 'done'라는 말이 뜰때까지 기다려 주세요

 

5. 적용 버전 확인 하기

    - 아래 명령어를 실행해서 변경된 Python의 버전을 확인 합니다

python -V

반응형

+ Recent posts