앞서 작성한 코드를 클래스로 정리해 보겠습니다.


# -*- coding: utf-8 -*-

import http.client, urllib
import json
import datetime

class TelegramAgent:

  API_URL = "api.telegram.org"
  CONTENT_TYPE = "Content-type"
  APPLICATION_JSON = "application/json"

  BOT_PATH = "/bot%s"
  SEND_MESSAGE_PATH = "/sendMessage"
  SEND_MESSAGE_DATA = '{"chat_id": %s, "text": "%s"}'

  def __init__(self):
    self.bContinue = True
    self.response = None
    self.callback = None
    self.bDumpData = False

  def setToken(self, token):
    self.token = token

  def setCallback(self, callback):
    self.callback = callback

  def setContinue(self, bContinue):
    self.bContinue = bContinue

  def setDumpData(self, bDumpData):
    self.bDumpData = bDumpData

  def packChatId(self, chatId):
    if len(chatId) > 0 and chatId[:1] == "@":
      return "\"%s\"" % chatId
    return chatId

  def postRequest(self, url, path, headers, paramsRaw):
    params = paramsRaw
    conn = http.client.HTTPSConnection(url)
    conn.request("POST", path, params.encode("UTF-8"), headers)
    self.response = conn.getresponse()
    self.data = self.response.read().decode("UTF-8")
    if self.bDumpData:
      print(self.data)
    conn.close()

  def sendCommon(self, actionPath, data):
    path = self.BOT_PATH % self.token + actionPath
    self.postRequest(self.API_URL, path, 
        {self.CONTENT_TYPE : self.APPLICATION_JSON}, data);

  def sendNoData(self, actionPath):
    self.sendCommon(actionPath, "")

  def sendMessage(self, chatId, message):
    chatId = self.packChatId(chatId)
    data = self.SEND_MESSAGE_DATA % (chatId, message)
    self.sendCommon(self.SEND_MESSAGE_PATH, data)

agent = TelegramAgent()
agent.setDumpData(True)
agent.setToken("<텔레그램 봇 토큰>")
agent.sendMessage("@<채널 ID>", "test string [한글]")


<테스트 환경>
- OS : Windows 7
- Python 버전 : 3.6


,

바이너리 생성

mvn package

실행

java -cp target/<파일명>.jar <패키지를 포함한 메인클래스명>

로컬 레파지토리에 업데이트

mvn install


,

파이썬에서 문자열은 바이트 코드와 유니코드로 나뉜다.


파이썬 3에서,

바이트 코드의 타입 -> <class 'bytes'>

유니 코드의 타입 -> <type 'str'>



변환


바이트 코드는 euc-kr, UTF–8 등과 같이 특정 인코딩이 적용된 문자열을 말한다. 파이썬에서 유니코드는 어떤 특정 인코딩에 속하지 않는 유니버셜한 어떤 것을 나타낸다. (다른 언어에서 흔히 UTF–8을 유니코드로 일컫는 것과는 다름에 유의)

  • 유니코드 >>> 바이트 코드로 변환하기 위해서는 encode() 함수가 사용된다.

  • 바이트 코드 >>> 유니코드로 변환하기 위해서는 decode() 함수가 사용된다.

    bstr = str.encode("UTF–8") # 유니코드에서 UTF–8 바이트 코드로 변환 
    str = bstr.decode("UTF–8") # UTF–8 바이트 코드에서 유니코드로 변환


타입 확인

  • type() 함수를 사용하여 어떤 문자열이 유니코드인지 바이트 코드인지 알아낼 수 있다.
    print(type(bstr)) # 바이트 코드일 경우 
    -> <type 'bytes'> 
    
    print(type(str)) # 유니코드일 경우
    -> <type 'str'>


소스 코드 상에서 대입시,


파이썬 2에서는 기본적으로 바이트 코드이고 <type 'str'>로 표기되며, 이에 대비되는 유니코드가 있는 것과 달리,

파이썬 3에서는 기본적으로 유니코드이고 <type 'str'>로 표기된다.


참고


print 함수를 사용하여 바이트 코드를 출력할 경우, 앞에 b'가 붙는 것을 볼 수 있다.


테스트 환경 
- OS : Windows 7 
- Python 버전 : 3.6


,

https://www.aigaming.com/


비트코인도 준다는데.. (응?)


상품이 HD Drone으로 변경되었네요..


,

1. 기본 사용법

runas /profile /user:<사용자명> "<실행 커맨드>"

2. 최초 1회만 패스워드 물어보게 하기

runas /profile /user:<사용자명> /savecred "<실행 커맨드>"

* 사용자명은 관리자 권한을 가진 사용자이어야 한다.


* 하지만 "net start ..." 와 같은 명령에는 통하지 않는다. "cmd net start ..." 이런 식으로 해도 안된다.


,