thumbnail image

티스토리 포스팅 alt 속성 입력 프로그램

Taedi

·

2021. 2. 8. 02:00

썸네일이미지

|  다운로드

 

Alt 속성 생성기.zip
4.37MB
Alt 속성 생성기.z01
10.00MB
Alt 속성 생성기.z02
10.00MB
Alt 속성 생성기.z03
10.00MB

※ 분할압축으로 전체 파일을 다운로드하시면 됩니다! 

|  설명

 

  • 미흡한 실력으로 혹시 모를 오류가 존재할 수 있으니 사용 시 주의 부탁드립니다.
  • 포스트 작성 시 사진 파일에 작성한 "이미지 설명"을 alt 속성으로 입력하는 프로그램입니다. 

 

|  사용방법

 

1. 티스토리 에디터에서 1차 포스트 작성

   - 작성 시 이미지 파일에 설명 작성하기

 

2. 티스토리 에디터 'html 모드'로 전환 및 본문 내용 복사

 

3. 프로그램에 html 전문 붙여넣기

 

4. 프로그램에서 'Alt 속성 생성' 버튼 클릭

 

5. 티스토리 에디터에 붙여 넣고'기본모드'로 전환하여 오류 여부 확인

 

6. 게시물 발행

 

|  화면 및 기능 안내

 

alt 속성 입력기 메인화면

 

메뉴 설명
Alt 속성이 이미 존재할 경우? - '변경 안 함' 선택 시 기존의 Alt 속성을 그대로 유지합니다.
- '바꾸기' 선택 시 기존의 Alt 속성은 지우고 이미지 설명과 내용을 일치시킵니다.
생성 후 이미지 설명? - '그대로 두기' 선택 시 이미지 설명은 그대로 유지합니다.
- '지우기' 선택 시 Alt 속성만 입력되고 이미지 설명은 
결과? - '검색 이미지' : html에서 찾아낸 이미지 태그의 숫자가 나타납니다.
- 'Alt 변경' : Alt 속성 변경이 완료된 갯수 입니다.
- 'Alt 유지' : '변경 안 함' 처리 된 갯수 입니다.
- 'Alt 오류' : 이미지 설명이 누락되어 Alt 속성을 입력할 수 없는 경우입니다.
  (변환 된 html에서 '■■이미지 설명이 비어있습니다■■' 라고 표시됩니다.)

 

더보기
from PyQt5 import QtCore, QtGui, QtWidgets
import re, webbrowser
import icon
hintword = "여기에 html을 붙여 넣고 \"Alt 속성 생성\" 버튼을 눌러주세요."


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1000, 800)
        MainWindow.setWindowIcon(QtGui.QIcon(':/icon.png'))
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setMaximumSize(QtCore.QSize(1677215, 16777215))
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.gridLayout.addLayout(self.verticalLayout_3, 1, 1, 1, 1)
        self.tedtOri = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.tedtOri.setPlainText("")
        self.tedtOri.setObjectName("tedtOri")
        self.gridLayout.addWidget(self.tedtOri, 0, 0, 1, 1)
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.btnRun = QtWidgets.QPushButton(self.centralwidget)
        self.btnRun.setObjectName("btnRun")
        self.verticalLayout_2.addWidget(self.btnRun)
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
        self.groupBox.setSizePolicy(sizePolicy)
        self.groupBox.setMinimumSize(QtCore.QSize(0, 0))
        self.groupBox.setObjectName("groupBox")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.groupBox)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.rad1 = QtWidgets.QRadioButton(self.groupBox)
        self.rad1.setObjectName("rad1")
        self.gridLayout_3.addWidget(self.rad1, 0, 0, 1, 1)
        self.rad2 = QtWidgets.QRadioButton(self.groupBox)
        self.rad2.setObjectName("rad2")
        self.gridLayout_3.addWidget(self.rad2, 1, 0, 1, 1)
        self.verticalLayout_2.addWidget(self.groupBox, 0, QtCore.Qt.AlignTop)
        self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_3.setObjectName("groupBox_3")
        self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_3)
        self.gridLayout_5.setObjectName("gridLayout_5")
        self.rad3 = QtWidgets.QRadioButton(self.groupBox_3)
        self.rad3.setObjectName("rad3")
        self.gridLayout_5.addWidget(self.rad3, 0, 0, 1, 1)
        self.rad4 = QtWidgets.QRadioButton(self.groupBox_3)
        self.rad4.setObjectName("rad4")
        self.gridLayout_5.addWidget(self.rad4, 1, 0, 1, 1)
        self.verticalLayout_2.addWidget(self.groupBox_3)
        self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_2.setObjectName("groupBox_2")
        self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox_2)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.labTotal = QtWidgets.QLabel(self.groupBox_2)
        self.labTotal.setObjectName("labTotal")
        self.gridLayout_4.addWidget(self.labTotal, 0, 0, 1, 1)
        self.labAlt = QtWidgets.QLabel(self.groupBox_2)
        self.labAlt.setObjectName("labAlt")
        self.gridLayout_4.addWidget(self.labAlt, 2, 0, 1, 1)
        self.labError = QtWidgets.QLabel(self.groupBox_2)
        self.labError.setObjectName("labError")
        self.gridLayout_4.addWidget(self.labError, 3, 0, 1, 1)
        self.labKeep = QtWidgets.QLabel(self.groupBox_2)
        self.labKeep.setObjectName("labKeep")
        self.gridLayout_4.addWidget(self.labKeep, 1, 0, 1, 1)
        self.verticalLayout_2.addWidget(self.groupBox_2)
        self.btnHelp = QtWidgets.QPushButton(self.centralwidget)
        self.btnHelp.setObjectName("btnHelp")
        self.verticalLayout_2.addWidget(self.btnHelp)
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout_2.addItem(spacerItem)
        self.gridLayout.addLayout(self.verticalLayout_2, 0, 1, 1, 1)
        self.tedtMod = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.tedtMod.setObjectName("tedtMod")
        self.gridLayout.addWidget(self.tedtMod, 1, 0, 1, 1)
        self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        # ------------------------------------------------
        # UI 이벤트 설정
        # ------------------------------------------------
        self.btnRun.clicked.connect(self.btnRun_clicked)
        self.btnHelp.clicked.connect(self.btnHelp_clicked)     
        QtWidgets.qApp.focusChanged.connect(self.on_focusChanged)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Alt 속성 생성기"))
        self.tedtOri.setPlainText(_translate("MainWindow", hintword))
        self.btnRun.setText(_translate("MainWindow", "Alt 속성 생성"))
        self.groupBox.setTitle(_translate("MainWindow", "Alt 속성이 이미 존재할 경우"))
        self.rad1.setText(_translate("MainWindow", "변경 안 함"))
        self.rad2.setText(_translate("MainWindow", "바꾸기"))
        self.groupBox_3.setTitle(_translate("MainWindow", "생성 후 이미지 설명"))
        self.rad3.setText(_translate("MainWindow", "그대로 두기"))
        self.rad4.setText(_translate("MainWindow", "지우기"))
        self.groupBox_2.setTitle(_translate("MainWindow", "결과"))
        self.labTotal.setText(_translate("MainWindow", "검색 이미지 : "))
        self.labKeep.setText(_translate("MainWindow", "Alt 변경"))
        self.labAlt.setText(_translate("MainWindow", "Alt 유지 : "))
        self.labError.setText(_translate("MainWindow", "Alt 오류 : "))
        self.btnHelp.setText(_translate("btnHelp", "사용법"))
        self.rad1.setChecked(True)
        self.rad3.setChecked(True)
        self.rad1.setFocus()


    def on_focusChanged(self, old, now):
        txt = self.tedtOri.toPlainText()
        if now == self.tedtOri:
            if txt == hintword:
                self.tedtOri.clear()
        else:
            if txt == "":
                self.tedtOri.setPlainText(hintword)

    def btnRun_clicked(self):

        # 결과 초기화
        cTotal = 0; cAlt = 0; cKeep = 0; cError = 0

        # 변경할 포스트 html을 변수화
        txt = self.tedtOri.toPlainText()
        if txt == hintword:
            return

        imgs = re.findall('\[##_Image.*?_##\]', txt)    # [##_Image ~~ ] 형식 찾기

        for img in imgs:
            cTotal += 1
            preimg = img

            # 기존에 alt 속성이 있는지 확인
            prealt = re.search('alt=".*?"', img)
            if prealt != None and len(prealt.group()) <= 6:
                # alt 속성이 있지만 공백일 경우
                img = img.replace(prealt.group(),'')
            elif prealt != None and len(prealt.group()) > 6:
                if self.rad1.isChecked():
                    cKeep += 1
                    continue # 다음으로
                elif self.rad2.isChecked():
                    img = img.replace(prealt.group(),'')

            # alt 속성 입력
            rpoint = re.search('\"\|.*?\|\|_##', img).group()
            des = rpoint.strip('"|_#')
            if des != '':
                if self.rad4.isChecked():
                    img = re.sub('\"\|(.*)\|\|_##', r'" alt="\1"|||_##', img)
                else:
                    img = re.sub('\"\|(.*)\|\|_##', r'" alt="\1"|\1||_##', img)
                cAlt += 1
            elif des == '':
                # 이미지 설명이 공백일 경우
                img = re.sub('\"\|(.*)\|\|_##', r'" alt="■■이미지 설명이 비어있습니다■■"|\1||_##', img)
                cError += 1

            txt = txt = txt.replace(preimg,img,1)

        self.tedtMod.setPlainText(txt)
        self.bulletin(cTotal, cAlt, cKeep, cError)

    def btnHelp_clicked(self):
        webbrowser.open('https://tae-di.tistory.com/16')

    def bulletin(self, a, b, c, d):
        self.labTotal.setText("검색 이미지 : " + str(a))
        self.labAlt.setText("Alt 변경 : " + str(b))
        self.labKeep.setText("Alt 유지 : " + str(c))
        self.labError.setText("Alt 오류 : " + str(d))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
반응형

티스토리 아이디로 코멘트를 남기려면

여기를 눌러주세요!

8 Comments

닫기 아이콘
사이드 프로필 배경이미지
아바타 이미지

Taedi's Log

#태디 #코딩린이

자습한 내용을 기록하는 공간이라 다소 먼 길로 돌아가는 방법들이 존재할 수 있습니다🐹 Python, Web에 관심을 갖기 시작했습니다🐶