zgabriel의 등록된 링크

키자드에 등록된 총 535개의 포스트를 확인하실 수 있습니다.

Naver Blog

파이참 단축키 모음

* 편집기 글꼴만 확대 : alt + shift + > * 편집기 글꼴만 축소 : alt + shift + < * 화면 전체 확대 : alt + shift + + * 화면 전체 축소 : alt + shift -- * 구문으로 감싸기 : ctrl + alt + t * 프로젝트 전체 검색 : ctrl + shift + f

Naver Blog

파이참 This IDE build has expired 해결

프로젝트에 오랫만에 접속하니 아래와 같은 메세지가 나왔다. This IDE build has expired. Provide another build or select 'JetBrains Installer' from the installation options to install the latest version. 해당 메세지는 현재 원격 서버에 설치되어 있는 파이참 백엔드(IDE) 버전의 사용 기한이 만료되었을 때 발생합니다. 해결 방법은 아래와 같습니다. 1. JetBrains Gateway > SSH 선택 2. 원하는 서버를 선택 후 + 버튼을 클릭 (Open Project) 3. IDE version 을 PyCharm | download latest 선택 4. Project directory 선택 5. Download IDE and Connect 클릭

Naver Blog

json 파일 생성, 읽기, 수정

1. 파일 생성하기 data = { "access_token":"", "access_token_date":"260113", "refresh_token":"", "refresh_token_date":"270101" } with open("token.json", "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=4) print("생성완료") 2. 파일 읽기 with open("token.json", "r", encoding="utf-8") as f: data = json.load(f) print(data["access_token"]) print(data["access_token"]) 3. 파일 수정하기 with open("token.json", "r", encoding="utf-8") as f: data = json.load(f) data["access_token_date"] = "260112" with

Naver Blog

파이썬으로 틱톡 토큰 발급받기

틱톡api 를 사용하기 위해서는 토큰이 필요한데 이 토큰을 발급받는 함수이다. client_key, client_secret, redirect_uri, code 가 필요하며 발급된 토큰의 유효기간은 1일이다. def getToken(client_key, client_secret, redirect_uri, code): url = "https://open.tiktokapis.com/v2/oauth/token/" # 요청에 보낼 데이터 (PHP의 http_build_query와 동일하게 처리됨) payload = { 'client_key': client_key, 'client_secret': client_secret, 'code': code, 'grant_type': 'authorization_code', 'redirect_uri': redirect_uri } # 헤더 설정 headers = { 'Content-Type': 'application/x-www-form-urlencoded',

Naver Blog

파이썬으로 틱톡 토큰 갱신하기

발급받은 토큰은 하루만 사용할 수 있는데 기간을 연장하려면 refresh_token, client_key, client_secret 를 사용해서 갱신해야한다 아래는 함수이다. def reNewToken(refresh_token,client_key, client_secret): url = "https://open.tiktokapis.com/v2/oauth/token/" payload = { 'client_key': client_key, 'client_secret': client_secret, 'grant_type': 'refresh_token', 'refresh_token': refresh_token } headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Cache-Control': 'no-cache' } try: # POST 요청 실행 # data 파라미터에 딕셔너리를 넣으면 자동으로 application/x-www-

Naver Blog

파이썬에서 날짜처리하는 방법정리

파이썬에서 날짜를 다루는 여러가지 방법들을 정리해봤다 - 오늘 날짜 from datetime import datetime today = datetime.now().date() print(today) - y-m-d 형식으로 변경하기 rDate = datetime.strptime(today, "%Y-%m-%d").date() print(rDate) - 타임스탬프 형식으로 오늘 날짜 import time today = time.time() print(today) - 타임스탬프값을 y-m-d 형식으로 변경하기 #1번 formatted_time = datetime.fromtimestamp(1799109545.4763308).strftime('%Y-%m-%d %H:%M') print(formatted_time) #2번 formatted_time2 = time.strftime('%Y-%m-%d %H:%M', time.localtime(1799109545.4763308)) print(formatt

Naver Blog

파이썬에서 mysql 처리 클래스

파이썬에서 mysql 접속 및 쿼리를처리하기 위해 공용으로 사용할 수 있는 클래스를 만들어봤다. 아래는 해당 클래스를 사용하는 예제와 소스이다. #1. 여러개의 rows 를 쿼리해서 사용하기 from _prog.db_handler import MysqlHandler db = MysqlHandler(conf.DB_INFO) rows = db.querys("SELECT * FROM TEST_TABLE order by idx limit 10") for v in rows: print(f"이름: {v['name']}, 이메일: {v['email']}") #2. 한개의 rows 를 쿼리해서 사용하기 row = db.queryrow("SELECT * FROM TEST_TABLE order by idx limit 1") print(row['name']) print(row['email']) #3. 한개 값을 쿼리해서 사용하기 cnt = db.queryone("SELECT count(idx) FROM

Naver Blog

파이썬에서 로그파일 쌓기

파이썬에서 원하는 내용을 로그파일에 쌓는 방법이다. basicConfig 로 로그파일에 대한 세팅을 설정하고 logging.error 함수로 로그를 파일에 쌓는다. current_date 는 일별로 파일을 쌓기위한 처리이다. import logging from datetime import datetime # 로깅 설정 (파일 이름, 기록 방식 등) current_date = datetime.now().strftime('%y%m%d') logging.basicConfig( filename=f'./_log/db_{current_date}.log', level=logging.ERROR, format='[%(asctime)s] %(message)s' ) #로그 남기기 logging.error("로그 테스트2")

Naver Blog

파이썬으로 틱톡영상 업로드하기

파이썬을 이용해서 틱톡에 동영상을 업로드하는 함수를 만들어봤다. API를 사용하는 방법이고 입력 값이 토큰은 이전에 업로드된 함수를 이용해 받아야한다. video_url은 https 로 만들어진 동영상 주소를 입력하면 된다. def uploadVod(access_token, video_url, title): api_url = "https://open.tiktokapis.com/v2/post/publish/video/init/" # 요청 본문 데이터 body = { "post_info": { "title": title, "privacy_level": "SELF_ONLY", "disable_duet": False, "disable_comment": True, "disable_stitch": False, "video_cover_timestamp_ms": 1000 }, "source_info": { "source": "PULL_FROM_URL", "video_url": video_url,

Naver Blog

문자열 검색, 패턴 검색 - re.search

php 의 preg_match 처럼 문자열에서 패턴을 검색하는 조건문이다. import re chkValue = "0134" # 정규표현식 조건문 if re.search(r"0134|0121|0522", chkValue): print("패턴이 일치합니다.") else: print("일치하지 않습니다.")

Naver Blog

이미지속 텍스트 추출 - Image to Text

원하는 자료의 텍스트가 이미지로 되어 있어서 텍스트만 따로 뽑아서 사용하고 싶어서 무료로 기능을 제공하는 서비스를 찾아봤다. 일단, 구글 이미지로 검색에서 이미지로 첨부하면 텍스를 뽑아주는데 이건 한장씩 만 처리해줘서 좀 불편하다. 다음으로 찾은 서비스는 아래의 사이트다. https://imagetotextfree.com/ Image to Text Free - Free Online OCR Tool | Convert Image to Text Free image to text converter. Extract text from images, PDFs, and scanned documents with our powerful OCR tool. No signup, no limits, 100% free forever. imagetotextfree.com 한번에 최대 10장까지 이미지를 처리할 수 있고 무료로 이용가능하다.

Naver Blog

배열 인덱스 값 출력하기

배열의 값을 사용할 때 이 값이 몇번째 값인지 확인이 필요할 경우가 있다. 이럴 경우 아래의 소스와 같이 사용하면 된다. numArray = [[15409874,15409942],[3037434,9305208]] #0부터 시작하는 인덱스 값을 같이 출력해준다 for idx,(sNum,eNum) in enumerate(numArray): print(idx, sNum, eNum) 출력 결과는 아래와 같다. 0 15409874 15409942 1 3037434 9305208 그런데 만약 인덱스 값을 1부터 시작하고 싶으면 아래같이 사용한다. for idx,(sNum,eNum) in enumerate(numArray, start=1): print(idx,sNum, eNum)

Naver Blog

aspera 여러개 파일 업로드 하기

유튜브에 동영상을 업로드 하는데 aspera 를 사용하고 있다. 업로드 하는 파일을 한개씩 aspera 로 업로드는 하는데 최근에 유튜브의 인증서버에 문제가 있는지 자꾸 'failed to authenticate' 이 발생했다. 발생한지 2주가 되어가고 있는데 유튜브에서는 언제나 그렇듯 쌩까고 있어서 개선할 수 있는 방법을 찾고 있는데 현재 업로드 방식은 파일한개를 업로드 할때마다 인증을 해야해서 인증 한번에 여러개의 파일을 업로드 할 수 있는 방법을 찾았다. 명령어는 아래와 같고 -d 옵션은 디렉토리가 없을 경우 디렉토리를 생성해주는 옵션이다. . ascp -T -P 33001 -l 20M -m 1M -i /home/id_rsa ./upload/test.mp4 ./upload/test.jpg ./upload/test.csv [email protected]:/test

Naver Blog

틱톡 API로 동영상 업로드하기 1 : 개발자&APP 등록

틱톡에 API를 사용하여 동영상을 업로드하기 위해서 처음으로 필요한 것은 개발자 등록 및 앱을 등록하는 것이다. 개발자 등록은 아래 사이트에 들어가서 가입해주면 손쉽게 할 수 있다. https://developers.tiktok.com TikTok for Developers Develop for > Communities Create, connect, and explore with the TikTok developer experience. Get started Use cases Leverage TikTok's various integrations to build solutions for your platform. Tap into the TikTok content ecosystem Expand your platform's reach with our integrations to log in with TikT... developers.tiktok.com 가입을 했다면 이제 APP을 등록해보

Naver Blog

틱톡 API로 동영상 업로드하기 2 : Sandbox

1편에서 설명한 app 등록 및 승인이 완료되었다면 이제 테스트 환경을 만들 순서다 바로 서비스에 업로드 하는 건 다시 서비스 인증 절차가 필요하기 때문에 테스트 환경에서 미공개로 업로드 테스트를 한다. 1. 등록한 app을 클릭하며 상세정보 화면에 들어간다 2. 좌측상단 app 이름 옆의 Production, Sandbox 버튼 중 Sandbox 버튼을 클릭 3. Create Sandbox 버튼을 클릭 4. Sandbox 이름을 입력 후 체크박스 체크 후 Confirm 을 클릭한다 . 기존 생성한 app의 설정을 그대로 가져옴 . 체크박스 체크하면 어떤 설정을 복사할지 선택할 수 있다 5. 생성이 완료된 Client key, Client secret 로 동영상 업로드를 테스트 할 수 있다

Naver Blog

틱톡 API로 동영상 업로드하기 3 : Authorize Code (PHP)

기본 환경설정은 완료되었으니 토큰을 받기위한 마지막 단계만 남았다. 바로 Authorize Code 를 발급받아야한다. 이 코드는 사용자가 직접 로그인 페이지에 접속해서 콜백 페이지로 발급받아야 한다. https://developers.tiktok.com/doc/login-kit-web?enter_method=left_navigation TikTok for Developers Register your app Register your app following these steps . Then obtain a client key and secret from the developer portal on https://developers.tiktok.com under Manage apps . Configure redirect URI Redirect URI is required for web apps. After the user completes authorization with Login K

Naver Blog

틱톡 API로 동영상 업로드하기 4 : 토큰 (PHP)

Authorize Code 를 받았다면 그 다음 토큰을 받는건 간단하다. 아래 함수에 기존 정보를 입력하고 호출해주면 된다. 문제는 토큰은 유효기간이 있는 정보이기 때문에 만료되면 재발급해야되는데 다행히 code 부터 발급받는게 아닌 리플레시토큰을 사용해 재발급받으면 된다. 리플레시 토큰의 유효기간은 한달정도되는데 이것까지 만료되면 아마도 코드값부터 새로 발급받아야 할것이기 때문에 잘 관리해야한다. function getToken($client_key, $client_secret, $redirect_uri, $code){ $url = "https://open.tiktokapis.com/v2/oauth/token/"; $post_data = [ 'client_key' => $client_key, 'client_secret' => $client_secret, 'code' => $code, 'grant_type' => 'authorization_code', 'redirect_uri' =>

Naver Blog

틱톡 API로 동영상 업로드하기 5 : 동영상 업로드 (PHP)

틱톡API를 이용해서 동영상을 업로드하는 함수를 만들어봤다. 영상 업로드 방식은 서버에 있는 영상을 업로드하는 방식과 URL이 있는 영상을 업로드하는 방식이 있는데 아래 함수는 두번 째 방법인 URL을 이용한 방법이다. 결과 값으로 ID 값을 리턴해주는데 이 아이디 값은 임시 값이 서비스 ID 값은 처리가 완료되면 이 임시 값을 이용해 조회할 수 있다. 또한, privacy_level 은 sand box 환경에서 테스트하기 위해 SELF_ONLY를 사용했다 function uploadVod($accessToken, $title, $vodURL){ $url = 'https://open.tiktokapis.com/v2/post/publish/video/init/'; $data = [ 'post_info' => [ 'title' => $title, 'privacy_level' => 'SELF_ONLY', //PUBLIC_TO_EVERYONE 'disable_duet' => false, '

Naver Blog

틱톡 API로 동영상 업로드하기 6 : 비디오 아이디 가져오기 (PHP)

영상 업로드에 성공하면 결과 값으로 아이디 값을 받는데 이는 서비스에 사용되는 비디오 아이디 값이 아니다. (아래 주소의 붉은색 값) . https://www.tiktok.com/@sungsikyung.fan/video/7587735650175094032 리턴받은 값은 publish_id 로 업로드 요청 접수증 같은 번호이다 실제 영상 인코딩되고 완전히 게시된 후에 이 값을 이용해 비디오 아이디 값을 받아 올 수 있다. 알아내는 방법을 함수로 만들어 봤다 function getVideoID($pID, $accessToken){ $url = "https://open.tiktokapis.com/v2/post/publish/status/fetch/"; $post_data = json_encode([ 'publish_id' => $pID ]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_P

Naver Blog

TR 에 마우스 오버 시 색 변경하기

table 태그의 row 에 마우스가 오버 될때 색을 변경하고 싶은 경우 아래 이벤트를 tr 또는 td 에 넣어 사용하면 된다. - 마우스 오버 시 . onMouseOver="this.style.backgroundColor='#ACCAF3'" - 마우스 아웃 시 . onMouseOut="this.style.backgroundColor='#E1E2E6'" 예) <tr onMouseOver="this.style.backgroundColor='#ACCAF3'" onMouseOut="this.style.backgroundColor='#E1E2E6'">

Naver Blog

틱톡 API로 동영상 업로드하기 7 : Apply

sandbox 에서 모든 테스트가 완료되었다면 이제 실제 서비스를 준비해야한다. production 모드로 넘어와 아래 이미지처럼 Content Posting API >Usage 에 보면 Apply 를 확인할 수 있다 Apply를 클릭하면 아래와 같이 "Application to request access to Content Posting API" 화면으로 넘어갈 수 있다. 순서대로 입력사항이 나오는데 모든 사항을 입력하여 단계를 완료하자 모든 입력을 완료하면 아래의 이미지가 노출된다. 심사기간은 2~4주가 소요된다고 나와있다. 다시 앱상세 페이지로 넘어오면 Apply 가 아래와 같이 Under review 로 바뀌어 있는 걸 확인 할 수 있다.

Naver Blog

파이참 SSH 비밀번호 변경하기

파이참 원격개발을 하고 있는데 SSH 접속하는 서버의 비밀번호가 변경되어 이를 파이참에도 적용해야해서 방법을 찾아봤다. 방법은 아래와 같다. 1. 파이참 상단 메뉴에서 파일>설정에 접속 2. 좌측 도구>SSH 구성에 접속 3. 비번을 변경하고 싶은 서버를 선택 4. 인증타입 아래에 재설정을 클릭 5. 비밀번호 입력 후 연결 테스트에 성공하면 확인을 누르고 나오면 끝

Naver Blog

django - 템플릿(HTML) 에서 2차원 배열 출력하기

datas = [] datas.append({"key":"key1", "idx":"0", "title":"title1"}) datas.append({"key":"key2", "idx":"1", "title":"title2"}) 위와 같이 선언된 2차원 배열로 저장된 값을 KEY, VALUE 모두 출력하고 싶을 경우가 있다. 그럴 경우 아래와 같이 코딩한다. {% for row in datas %} {% for key, value in row.items %} {{ key }} = {{ value }} || {% endfor %} <br><br> {% endfor %} 결과값은 아래와 같이 출력된다. [key] = [key1] || [idx] = [0] || [title] = [title1] [key] = [key2] || [idx] = [1] || [title] = [title2]

Naver Blog

SFTP 파일 업로드 하기 - phpseclib

PHP 에서 SFTP 서버에 파일을 업로드할일이 생겼다. 기존 FTP 처럼 손쉽게 되면 참~ 좋겠지만 불행히도 쉽지많은 않았다. 결론적으로 서버에 phpseclib를 설치하지 않고 폴더만 복사해 사용할 수 있는 방법을 찾았다. phpseclib3를 사용해야해서 PHP5 버전은 불가능하다. 만약, PHP5 버전에 사용할 수 있는 방법이 있다면 공유 좀 .... 일단, phpseclib 폴더를 서버의 최상위 폴더에 복사한 후 소스는 아래와 같다. --------------------------------------------------------------------------------- ini_set("display_errors","1"); require_once __DIR__ . '/phpseclib/autoloader.php'; use phpseclib3\Net\SFTP; use phpseclib3\Crypt\PublicKeyLoader; // SFTP 서버 정보 $host =

Naver Blog

2차원 배열 일치하는지 비교하기

2차원 배열 2개의 특정 키값이 일치하는지 비교하는 함수를 만들었다. 아래 소스를 참고해보자 $temp1[] = array("key"=>"202504041415595699"); $temp1[] = array("key"=>"202504041410389077"); $temp1[] = array("key"=>"202504041412228233"); $temp2[] = array("key"=>"202504041415595699"); $temp2[] = array("key"=>"202504041412228233"); $temp2[] = array("key"=>"202504041410389077"); $rst= compare_arrays($temp1, $temp2, "key"); if ($rst) { echo "일치"; } else echo "불일치"; function compare_arrays($arr1, $arr2, $key) { //key 값만 추출 $keys1 = array_column

Naver Blog

insert 쿼리시 auto_increment 되는 값 가져오기

mysql 테이블 생성 시 키 값으로 사용하기 위해 auto_increment 값을 만들었는데 이렇게 생성되는 값을 바로 가져와서 사용해야 하는 경우가 발생했다. select max(idx)+1 로 insert 하기 전에 idx 값을 만들어 사용하는 방법도 있으나 이 방법은 단점은 delete 를 할 경우 idx 값이 재사용된다는 것이다. 이럴 경우 mysqli 에서는 아래와 같이 idx 값을 가져올 수 있다. $sql = "insert into test (name) values ('test')"; $conn->query($sql); $new_idx = $conn->insert_id; //auto_increment된 idx 값을 가져온다

Naver Blog

사진 얼굴교환 AI 서비스 추천 - FaceSwap

1. FaceSwap.AI (https://faceswap.ai) . 합성 퀄리티: 최고 수준 (피부 질감, 표정 유지까지 매우 자연스러움) . 사용법: 사진 두 장 업로드 → 자동 합성 . 장점: 프리미엄급 합성 퀄리티 표정, 조명까지 잘 맞춰줌 . 단점: 무료는 하루 몇 장 제한 (계정 없이도 사용 가능) 추천 이유: 진짜 딥페이크처럼 부자연스럽지 않고, 진짜 찍은 사진처럼 보임 2. Icons8 Face Swapper (https://faceswapper.ai) . 합성 퀄리티: 아주 좋음 (다만 감정 반영은 다소 단순) . 사용법: 얼굴 교환하고 싶은 사진 2장 업로드 → 자동 결과 . 장점: 완전 무료 결과 빠름, 사용 쉬움 . 단점: 해상도 낮을 수 있음 피부 질감까지는 디테일이 부족할 때 있음 . 추천 이유: 부담 없이 써보고 싶을 때 가장 좋은 서비스 3. Swapface.org (https://swapface.org) . 합성 퀄리티: 꽤 자연스럽고 영상도 지원

Naver Blog

비디오 태그로 영상 여러개 재생하기 - HLS

video 태그를 사용해서 HLS 형식의 영상 여러개를 순서대로 반복재생하는 소스를 만들어봤다. HLS 형식의 영상 여러개를 VIDEO 태그로 순서대로 반복재생하는 기능이 필요해 간단하게 만들어봤다. <!-- HLS 주소 여러개를 순서대로 반복재생 --> <video id="videoPlayer" controls autoplay muted width="500"></video> <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <script> const videoFiles = [ "HLS영상주소1","HLS영상주소2"," HLS영상주소3", ]; const video = document.getElementById("videoPlayer"); let currentIndex = 0; let hls; function playVideo(index) { const source = videoFiles[index]; if (hl

Naver Blog

비디오 태그로 영상 랜덤선택 재생 - HLS

비디오 태그를 사용해서 주어진 주소 중 랜덤하게 선택해서 영상을 재생해주는 소스이다. 동영상의 HLS 방식을 사용했다. <video id="videoPlayer" width="700" autoplay muted playsinline ></video> <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <script> const videoFiles = [ "영상1.mp4/playlist.m3u8","영상2.mp4/playlist.m3u8", ]; const video = document.getElementById("videoPlayer"); // 랜덤 인덱스 선택 const randomIndex = Math.floor(Math.random() * videoFiles.length); const selectedSource = videoFiles[randomIndex]; let hls; function playVideo(s

Naver Blog

비디오 태그 영상재생 완료 후 컨트롤 노출막기

video 태그 사용 시 control 옵션을 넣으면 마우스를 오버하면 컨트롤이 노출되고 아웃되면 컨트롤이 미노출된다. 그런데, 영상의 재생이 종료되면 컨트롤이 자동으로 노출되는데 이 컨트롤 노출을 막기위해 세팅해봤다. ------------------------------------------------------------------------------------------------ <video id="myVideo" src="video.mp4"></video> <script> const video = document.getElementById('myVideo'); // 컨트롤바를 수동으로 보여주기 video.addEventListener('mouseover', () => { video.setAttribute('controls', true); }); video.addEventListener('mouseout', () => { video.removeAttribute('contr

Naver Blog

동영상 합치기 셸스크립트 - FFMPEG

리눅스에서 ffmpeg 을 이용하여 2개의 동영상을 합쳐야 하는 일이 생겼다. 문제는 두 동영상의 인코딩 정보가 맞지 않으면 오류가 발생한다는거다. 그래서, 몇가지 정보를 비교 후 조건에 맞으면 영상을 합치고 아니면 재인코딩하여 합치도록 스크립트를 작성했다. 소스는 아래와 같으면 입력값으로 영상1, 영상2, 저장영상 을 받는다. --------------------------------------------------------------------------------------- #!/bin/bash # 입력값 처리 input1="$1" input2="$2" output_file="$3" # 입력값 검증 if [ -z "$input1" ] || [ -z "$input2" ] || [ -z "$output_file" ]; then echo "Usage: $0 <input_video1> <input_video2> <output_video>" exit 1 fi printf "\n. 입

Naver Blog

php8 에서 PHPExcel 사용하기

php7버전을 사용하다 php8로 업버전을 하니 PHPExcel 에서 오류가 발생해서 해당 오류와 경고 부분을 모두 수정한 버전을 만들었다. 무설치로 사용할 수 있고 예제 소스는 아래와 같다. ----------------------------------------------------------------------------- include "./PHPExcel.php"; $objPHPExcel = new PHPExcel(); $xls_filename = "test_".date("YmdH"); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.'1','참여일'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'.'1','이름'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C'.'1','휴대폰'); $objPHPExcel->setAc

Naver Blog

기타PHP8에서 ftp_connect 함수 반환 값

PHP7 까지는 ftp_connect 함수를 사용하면 리턴값은 리소스를 반환하였다. 그런데 PHP8부터는 리소스가 아닌 클래스 객체를 반환하도록 변경되었다. . PHP7 이하 : resource 타입 . PHP8 : FTP\Connection 객체 값을 받아서 출력하면 아래와 같은 형식으로 나온다. FTP\Connection Object ( ) 또한, is_resource($conn_id) 같은 형식의 체크는 동작하지 않고 아래와 같이 체크해야한다. $conn_id = ftp_connect($ip); if ($conn_id instanceof FTP\Connection) { echo "FTP 연결 성공"; } else { echo "FTP 연결 실패"; } echo $ conn_id 도 동작하지 않으며 print_r, var_dump를 사용해야하고 echo를 사용하고 싶을 경우 아래와 같이 해야한다. echo spl_object_id($conn_id); // 객체 고유 ID 숫자 출

Naver Blog

파이썬에서 mysql 연동하기

파이썬에서 mysql 연동하는 커넥터의 종류는 여러가지 있으나 보통 아래 2가지중 하나를 사용한다. . Pymysql, mysqlclient 사용법은 둘다 비슷한데 성능이 우수한 mysqlclient 를 많이 사용한다. (c로 만들어져서 빠르다고 한다 ) 일단 기본 소스는 아래와 같다. import MySQLdb db = MySQLdb.connect(host='localhost', user='root', password='1234', db='db name') cur = db.cursor() #SELECT sql = 'select * from member' cur.execute(sql) row = cur.fetchall() print(row) #한줄 데이터 조회 row = cur.fetchone() print(row) #fetchone()을 이용하여 루프를 돌면서 모든 데이터 출력하기 whilt True: row = cur.fetchone() # 데이터를 한줄씩 가져옴 if row:

Naver Blog

유튜브 동영상 유효성 검사하기

보통 사이트에 유튜브를 아래와 같이 임베디드해서 사용하는 경우가 많다 . <iframe src="https://www.youtube.com/embed/id" frameborder="0" allowfullscreen style="left:0;width:100%;height:100%;"></iframe> 문제는 이렇게 가져다 사용할 경우 해당 영상이 삭제되거나 문제가 발생했을 경우 오류 메세지가 그대로 노출되고 오류가 있는지 몰라 대처하기 힘들다는거다 해당 문제를 구글링 해보니 이럴 경우에 사용할 수 있는 소스를 발견했다. 영상을 로드해서 정상이면 유튜브를 플레이 준비하고 비정상이면 본인이 원하는 액션을 주면된다. 소스는 아래와 같다. <div id="player"></div> <!-- 유튜브 유효성 검사 --> <script> var tag = document.createElement('script'); tag.src = "https://www.youtube.com/iframe_api

Naver Blog

table td에서 긴문장 말줄임 표시하기

table 태그에서 td에 긴 문장을 표시할 경우 width 값을 넘으면 여러줄로 표시된다. 이럴 경우 문장을 한줄로 표시하고 지정된 넓이를 넘을 경우 ... 로 표시하고 싶다. 아래와 같이 css 를 사용하면 된다. table { border-collapse: collapse; border-spacing: 0; width: 100%; table-layout: fixed; } td { vertical-align: middle; padding:5px; border: 1px solid #000; overflow:hidden; white-space : nowrap; text-overflow: ellipsis; } overflow:hidden 는 설정한 범위를 넘어서는 것들을 표시하지 않겠다는 것이다. white-space : nowrap; 는 범위를 넘어서는 텍스트를 ... 로 표시해준다 text-overflow: ellipsis; 는 공백 문자가 있는 경우 줄바꿈을 하지 않고 한 줄로

Naver Blog

네이버페이에서 문화상품권 사용하기

문화상품권 네이버페이 포인트 전환방법 문화상품권이 선물로 들어왔다. 그런데, 문제는 문화상품권을 어디에서 사용하지..... 고민하던 중 네이버페이에서 사용이 될 것 같아서 검색해봤는데 역시나 된다. 바로 GO! GO! 일단 네이버페이에 들어간 후 우측화면에 보면 '제휴포인트 전화' 메뉴가 있다. 클릭~ 아래와 같은 팝업창이 노출되는데 중간에 '문화상품권' 아이콘이 있다. (아래 서비스에서도 네이버페이 포인트로 전환할 수 있어요 부분) 그러면 아래와 같이 전환할 수 있는 메인화면이 나온다. 여기에서 '포인트 전환 바로가기' 버튼클릭~ 동의화면에 동의해주시고... 이제 상품권 번호 입력란을 확인 할 수 있다. 위 이미지에 보이듯이 핀번호가 있는 부분을 긁어서 핀번호를 확인해야한다. 이걸 긁으면 이제 오프라인에서 사용할 수 없으니 긁기전에 다시한번 생각해보고 (참고로 전환시 수수료가 발생한다) 동의 후 '전환하기' 버튼을 클릭하면 완료 ~~

Naver Blog

유튜브 라이브 채팅창 내용 가져오기

유튜브 라이브 채팅창의 내용을 가져와 가공하고 싶다면 유튜브 데이터 API의 liveChatMessage 앤드포인트를 사용하여 가져오거나 pytchat 라이브러리를 사용해서 가져오면 된다. 물론, pytchat 를 사용하는 것이 간단하기 때문에 이를 이용해서 가져와보겠다. 일단. pytchat 을 설치하고 -> pip install pytchat 아래와 같이 코딩한다. import pytchat video_id = "유튜브 라이브 아이디" chat = pytchat.create(video_id=video_id) while chat.is_alive(): for chat_message in chat.get().sync_items(): print(f"{chat_message.author.name}: {chat_message.message}") 코드를 실행하면 채팅창의 내용을 가져와 화면에 출력한다.

Naver Blog

KoNLPy 설치하기 - 윈도우, 파이썬

KoNLPy 는 한국어 자연어 처리를 위한 파이썬 패키지다. 한국어 자연어 처리를 위한 여러 작업을 손쉽게 할 수 있도록 해주는데 이번에 댓글의 감정을 판단하기 위해서 설치해봤다. 1. JDK 설치 JAVA 기반의 자연어 처리 도구들을 사용할 수 있도록 해 주는 패키지이기 때문에 기본적을 자바를 사용할 수 있는 환경이 준비되어야 한다. 아래 사이트에 들어가 본인에게 맞는 버전을 설치한다. https://www.oracle.com/kr/java/technologies/downloads/ Download the Latest Java LTS Free Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts. www.oracle.com 2. 환경변수 설정 여러 블로그의 글을 보고 설정해봤으나 나의 경우에는 오류가 발생해서 여러차례의 시행착오를

Naver Blog

2차원 배열 모두 출력하기

2차원 배열에서 key, value 모두 화면에 출력해서 확인하고 싶은 경우가 있다. 그럴 경우 코딩방법이다. datas = [[1,2], [3,4], [5,6]] - 방법 1 for x, y in datas: print(x, y ) - 방법 2 for i in datas: for j in i: print(j, end=' ') print() - 방법3 range 사용하기 for i in range(len(datas)): for j in range(len(a[i])): print(a[i][j], end=' ') print()

Naver Blog

[파이썬] GET, POST 사용하기 - Requests

파이썬에서 GET, POST 를 사용하기 위해 Requests를 사용한다. 아래는 사용에 대한 설명을 해봤다. (당연히 설치가 되어 있어야 한다 - pip install requests) * GET 방식 import requests req = requests.get('https://naver.com') print(req.text) * POST 방식 import requests data = {'source':'ko', 'target':'target', 'html':'html'} headers = {'X-NCP-APIGW-API-KEY-ID': 'ID', 'X-NCP-APIGW-API-KEY':'KEY'} response = requests.post('https://www.naver.com', headers=headers, data=data) print(response.status_code) print(response.text) * Response 객체의 속성 . text : str 객

Naver Blog

[파이썬] &lt;&gt; 안에 한글이 있는 경우 HTML Entities 로 변환하기

네이버 파파고를 사용해서 번역을 개발하고 있는데 < > 안에 한글이 있는 경우 태그로 인식해서 번역을 안하는 오류를 발견했다. 이럴 경우 < 는 <로 >는 > 로 변환해서 번역을 해야할 것 같아서 함수를 만들어봤다. 입력된 문장에서 한글이 들어가 있는 < > 를 발견하면 html entities로 변환해주는 함수이다. import re def prePrecessing(text): # 한글이 포함된 <와 >를 찾는 정규식 패턴 pattern = re.compile(r'(<[^>]*[가-힣]+[^<]*>)') # 한글이 포함된 <와 >를 <와 >로 변환 def replace_brackets(match): return match.group(0).replace('<', '<').replace('>', '>') # 변환된 문자열 반환 return pattern.sub(replace_brackets, text) # 예시 텍스트 text = "이것은 <b>한글</b> <텍스트> 입니다. 그리고

Naver Blog

[김포] 베이커리 카페 몬떼스델피노

Previous image Next image * 경기 김포시 양촌읍 김포한강6로 49-19 몬떼델피노 주말마다 새로운 카페를 찾아다니고 있다. 오늘 찾아간 곳은 라이브카페가 있다고 해서 궁금해서 찾아가봤다. 14:30분에 라이브 시작이라 1시간정도 일찍 가봤다. 대형카페답게 시원하게 높은 층고가 좋았고 야외 좌석들도 꽃들이 있어 좋아보였다. 지난 주에 갔던 글린공원보다 확실히 빵종류가 많았다. 다른 점은 확실히 여기는 평균 나이대가 높아 대충 60대 중반은 되어 보였다. 빵과 커피는 합격점~~ 14:30분이 되어서 기대하던 라이브가 시작했는데 기대했던만큼은 아닌것 같다. 왠지 적당히 부르는 느낌적인 느낌... 라이브는 실망이었지만 다른 것들은 만족 자주 갈만한 카페로 추천

Naver Blog

json 파일 만들기

PHP 에서 JSON 파일을 만드는 소스이다. <?php $data = Array ( "0" => Array ( "cols1" => "value1-1", "cols2" => "value1-2", "cols3" => "value1-3" ), "1" => Array ( "cols1" => "value2-1", "cols2" => "value2-2", "cols3" => "value2-3" ), "2" => Array ( "cols1" => "value3-1", "cols2" => "value3-2", "cols3" => "value3-3" ) ); $json = json_encode($data); $rst = file_put_contents("test.json", $json); ?> 실행하면 서버에 test.json 파일을 생성해준다

Naver Blog

[일산] 포레스트아우팅스

Previous image Next image * 경기 고양시 일산동구 고양대로 1124 포레스트 아웃팅스 작년에 송도점을 갔다왔는데 일산점도 궁금해서 한번 가봤다. 여기가 본점인데 크기는 확실히 송도점보다 작은 것 같은데 분위기는 비슷하다. 주차장은 밀리는데 들어가면 의외로 자리도 많고 사람이 많지는 않다. 장점은 특이한 빵이 많아서 하나씩 모두 먹고 싶다는 것이고 단점은 가격은 살벌하다 4인 식구가 갔는데 5만원이 넘게 나왔다.

Naver Blog

문장에서 &lt; &gt; 를 &lt; &gt; 로 변환하기 - 태그제외

< > 를 포함한 문장을 노출할 때 한글만 있을 때는 문제가 없었는데 < > 안에 영문이 있을 경우 브라우저에서 태그로 인식해 표시되지 않는 오류가 발견되었다. "<example> <샘플> 입니다 " 라는 문장이 있을 경우 화면에는 "<샘플> 입니다." 만 표시되었다. 그래서, < > 기호가 있을 경우 태그인지 판단해서 아니라면 htmlspecialchars() 처리하는 함수를 개발했다. 소스는 아래와 같다. <? function escape_non_html_tags($html) { //예외처리할 태그 리스트 $tagList = [ 'a', 'b', 'i', 'u', 'strong', 'em', 'p', 'div', 'span', 'img', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ul', 'ol', 'li', 'table', 'tr', 'td', 'th', 'thead', 'tbody', 'tfoot', 'br', 'hr', 'input', 'form',

Naver Blog

[django] 등록된 아이피만 사이트에 접속하기 - whitelist

Django에서 특정 IP 주소만 사이트에 접근할 수 있도록 제어하려면 MIDDLEWARE에서 요청을 검사하고, 특정 IP 주소만 허용하거나 차단하는 방법을 사용할 수 있습니다. 이를 위해 사용자 정의 미들웨어를 작성할 수 있습니다. 1. 미들웨어 생성: 프로젝트의 앱 내에 미들웨어 파일을 생성합니다. 예를 들어, middleware.py 파일을 만듭니다. 2. 미들웨어 코드 작성: 특정 IP만 허용하는 로직을 미들웨어에 작성합니다. 예시 코드는 다음과 같습니다. from django.http import HttpResponseForbidden ALLOWED_IPS = ['127.0.0.1', '192.168.0.1'] # 허용할 IP 주소 목록 class IPRestrictionMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): ip = re

Naver Blog

[django] 사용자 아이피 가져오기

웹서비스에 접속하는 사용자 아이피를 가져오는 방법이다. request 를 이용하는 방법으로 HTTP_X_FORWARDED_FOR 값을 체크해서 가져온다. 소스는 아래와 같다. def getIP(request): xffInfo = request.META.get('HTTP_X_FORWARDED_FOR') if xffInfo: ip = xffInfo.split(',')[0] #첫 번째를 선택 else: ip = request.META.get('REMOTE_ADDR') return ip 함수를 실행하면 사용자의 아이피를 리턴한다.

Naver Blog

[django] 사용자 아이피로 접속허용여부 체크하기

특정 사용자만 접속하도록 아이피를 체크하는 기능이 필요해 기능을 만들어봤다. 해당 함수는 허용된 아이피 리스트를 만들고 사용자가 접속하면 아이피를 체크해서 허용 리스트에 포함되어 있는지 체크해서 있으면 PASS 를 없으면 BLOCK을 리턴하도록 만들었다. def ipPassChk(request): ipList = {"222.110.188.63", "222.110.188.64"} xffInfo = request.META.get('HTTP_X_FORWARDED_FOR') if xffInfo: ip_list = xffInfo.split(',') userIP = ip_list[0].strip() else: userIP = request.META.get('REMOTE_ADDR') if userIP in ipList: return "PASS" else: return "BLOCK"

Naver Blog

Django - 커스텀 커맨드 만들기

Django에서는 앱마다 커스텀 커맨드를 만들 수 있다. (아직도 프로젝트, 앱이 헷갈리다 ㅡㅡ;) 간단하게 설명하면 test.py를 콘솔에서 아래와 같이 명령어로 실행시키기 위한 것이다. . python manage.py test 위와 같이 명령어를 실행하면 test.py에 있는 소스가 실행된다. 이제 만드는 방법에 대해서 알아보자 1. 커스텀 커맨드를 만들 앱을 결정해서 해당 폴더에 아래 구조로 폴더 2개를 생성한다 (앱의 하위폴더에 생성하는게 중요하다) -> /management/commands 2. commands 폴더 밑에 test.py 소스를 작성한다. (간단하게 메세지를 출력하는 소스이다) from django.core.management.base import BaseCommand class Command(BaseCommand): def handle(self, *args, **kwargs): def callback(ch, method, properties, body):

Naver Blog

[속초] 시드누아 카페

속초에 오면 항상 방문하는 시드누아 창밖으로 설악산이 보이고 실내도 정원같은 분위기에 정말 맘에드는 카페다 빵, 커피 모두 추천이다 #속초카페 #시드누아 #설악산뷰

Naver Blog

Mysql 5.x 에서 8.x 마이그레이션 하기

디비는 웬만하면 건드리고 싶지 않은데 강제적으로 업데이트 해야하는 일이 발생했다. 빌어먹을 AWS ㅡㅡ; 왜 자꾸 등을 떠미는지... 어쨌든, 마이그레이션을 진행하게 되어서 어떤 쿼리를 수정해줘야 하는지 체크해봤다. 1. 서브쿼리 내 정렬불가 . 8.x 에서 새롭게 변경된 내용은 아닌 듯 하나, 쿼리 확인 과정에서 데이터가 상이했던 부분이라 수정해야함. . 5.x 에서는 서브쿼리 내 order by 처리를 하면 정렬된 데이터를 그대로 활용할 수 있었으나, 업그레이드한 버전에서는 모든 테이블(서브쿼리로 select된 테이블 포함)내 데이터의 정렬은 의미가 없다고 본다 . 서브쿼리로 원하는 데이터가 있다면 단순 정렬이 아니라 집계 함수등을 이용하여 정확한 데이터를 찾아주어야 한다 . 참고자료 https://mariadb.com/kb/en/why-is-order-by-in-a-from-subquery-ignored Why is ORDER BY in a FROM Subquery Ignore

Naver Blog

[김포] 수목원 카페 근린공원

* https://www.instagram.com/gleenpark_cafe/ 글린공원(@gleenpark_cafe) • Instagram 사진 및 동영상 팔로워 3,275명, 팔로잉 5명, 게시물 267개 - 글린공원(@gleenpark_cafe)님의 Instagram 사진 및 동영상 보기 www.instagram.com * 경기 김포시 양촌읍 석모로5번길 34 카페 글린공원 김포 양촌읍에 위치한 수목원 카페이다 대형 카페이기는 한데 요즘 대형 카페에 비하면 대형은 아니고 중형쯤 되는 것 같은데 이게 더 좋은 느낌이다. 캠핑 느낌이 나는 자리들은 이미 다 차서 일반 자리에 앉았는데 나쁘지 않다. 애들을 위해 다음에는 일찍와서 그런 자리에 앉아봐야겠다. 라떼는 5점 빵은 나쁘지는 않은데 요즘 빵 잘하는 카페들이 많아서 그런곳에 비해서는 3점 정도... 다음에는 근처 맛집간 후 들려봐야겠다.

Naver Blog

[파이썬] url encode, decode 하는 방법

파이썬에서 url encode, decode 하는 방법에 대해서 알아보자 from urllib import parse str = "hello" str_encode = parse.quote(str) str_decode = parse.unquote(str_encode) print("original : ", str) print("encode : ", str_encode) print("decode : ", str_decode) 위의 샘플 소스를 보면 알겠지만 parse.quote 를 사용하면 encode parse.unquote를 사용하면 decode 를 할 수 있다. 두 함수 모두 파라미터로 safe, encoding, errors 를 사용 할 수 있는데 safe 는 인코딩 하지 않을 값을 encoding 은 인코딩 방식을 입력합니다. default 는 utf-8 입니다. . parse.quote(str, safe="test", encoding="cp949")

Naver Blog

[파이썬] Papago Website Translation 샘플소스

text translation 은 샘플 소스가 있는데 website 번역은 샘플 소스가 없어서 만들어봤다. b 태그가 한개 들어가 있는 문장을 번역하는데 text translation을 사용하니 위치가 변하는 오류가 나서 네이버에 문의해보니 태그가 들어가 있는 문장은 website 번역을 사용해야한다고 해서 진행해봤다. text translation 과 비슷하면서도 다르다. 통일성 있게 만들었으면 좋겠는데 뭔가 아쉬움이 있다. ---------------------------------------------------------- import requests papagoInfo ={'URL':'https://naveropenapi.apigw.ntruss.com/web-trans/v1/translate', 'ID':'', 'SECRET':''} text = "<b>역사의 시간 속에 풍화된 한 인물의 비극적 삶에 대하여</b>" data = {'source':'ko', 'target':

Naver Blog

[파이썬] 문자열 공백제거 함수

문자열 양 끝에 있는 공백을 제거해주는 함수 //양쪽 공백 제거 temp.strip() //왼쪽 공백 제거 temp.lstrip() //오른쪽 공백 제거 temp.rstrip()

Naver Blog

[django] 문자열 이스케이프 함수

from django.utils.html import escape unsafe_string = '<script>alert("XSS")</script>' safe_string = escape(unsafe_string) print(safe_string

Naver Blog

[django] 한글 로그문제 해결

django 에서 로그를 쌓는데 한글이 있을 경우 쌓이지 않는 문제가 발생했다. 테스트 할때는 보통 프로그래머가 그렇듯이 영문으로만 테스트하니 모르고 있었다. ㅡㅡ; 급하게 구글링 결과 encoding을 설정해주면 된다. settings.py 의 LOGGING.handlers 에서 아래와 같이 추가 'file2': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': BASE_DIR / f'logs/test.log', 'formatter': 'format_basic', 'encoding' : 'utf-8' },

Naver Blog

[파이썬] 한글 문자열 자르기

한글 문자열을 원하는 길이만큼 잘라서 배열로 리턴하는 함수를 만들어봤다. def splitString(text, length=10): return [text[i:i+length] for i in range(0, len(text), length)] #사용법 temp = "국내 정상급 가수들의 공연·불꽃쇼 등 볼거리 가득 나흘간 카약·요트 등 무료 해상 스포츠 체험 제공 워터슬라이드·에어바운스 갖춘 수상 워터파크 운영" result = splitString(temp, 10) print(result)

Naver Blog

[파이썬] if else 문 한줄에 쓰기

if else 문을 간단하게 한줄에 쓰고 싶을 경우가 있다. 파이썬은 구조가 좀 특이한데 아래 소스를 확인하면 알 수 있다. if(test==1): print("True") else: print("False") -> 한줄로 요약 print("Ture") if(test==1) else print ("False") if(test=="1"): print("1") elif(test=="2"): print("2") else: print("3") -> 한줄로 요약 print("1") if(test=="1") else print("2") if(test=="2") else print("3")

Naver Blog

[파이썬] 배열 사용하기

* 배열 초기화 . 1차원 배열 : temp = [] . 2차원 배열 : temp = [[]] * 배열에 값 추가하기 temp.append({"value1":"1", "value2":"2"}) * 배열 합치기 temp1 = {"value1":"1", "value2":"2"} temp2 = {"value1":"1", "value2":"2"} temp3 = temp1 + temp2 * 배열에 키값이 있는지 체크 temp1 = {"value1":"1", "value2":"2"} if("value2" in temp1): print("키 값이 있음")

Naver Blog

[파이썬] 문자열 이스케이프 처리

php 의 addslahses, stripslashes 처럼 이스케이프 처리해주는 함수 #문자열을 이스케이프 처리 def addslashes(s: str) -> str: return re.sub(r"(['\"\\\0])", r'\\\1', s) #이스케이프된 문자열의 백슬래시를 제거 def stripslashes(s: str) -> str: return re.sub(r'\\(.)', r'\1', s) 두번째 방법 ------------------------------------------ # 특수 문자들을 이스케이프합니다. def addslashes(s): return s.replace('\\', '\\\\').replace("'", "\\'").replace('"', '\\"').replace('\0', '\\0') # 백슬래시로 이스케이프된 문자들을 원래대로 돌려놓습니다. def stripslashes(s): return s.replace("\\'", "'").replace('\

Naver Blog

[파이썬] 변수의 데이터 타입확인 하는 방법

변수의 데이터 타입이 어떻게 되는 지 확인이 필요할 경우 isinstance 를 사용하면된다. 사용법은 아래와 같다. * 정수인지 확인 rst = isinstance(100, int) * 실수인지 확인 rst = isinstance(100, float) * 문자열인지 확인 rst = isinstance('BlockDMask', str) * 리스트인지 확인 rst = isinstance([1,2,3], list)

Naver Blog

[파이썬] try except 사용하기

예외처리를하기 위한 방법으로 try except 를 사용하는 법 try: print("처리문 넣기") except Exception as e: print("오류문 출력 - ", e) else: print("에러가 없을 때 수행") finally: print("오류에 상관없이 항상 수행)

Naver Blog

[파이썬] 긴 소스를 개행할 경우

소스를 작성할 때 특히나 긴 문자열을 " " 안에 넣을 경우 가독성을 높이기 위해 개행처리 할 경우가 있다. 이럴 경우 아래와 같이 두가지 방법을 사용하면 된다. 본인이 선호하는 방식을 선택해서 사용하면 된다. long_string = "이것은 매우 긴 문자열입니다. " \ "이 문자열은 여러 줄로 나누어져 있습니다. " \ "그러나 역슬래시를 사용하여 하나의 문자열로 처리됩니다." long_string = ( "이것은 매우 긴 문자열입니다. " "이 문자열은 여러 줄로 나누어져 있습니다. " "괄호 안에 있는 문자열은 자동으로 연결됩니다." )

Naver Blog

[파이썬] 파일저장하기

filepath = "test.txt" #파일 경로를 지정하여 파일열기 with open(filepath, "w") as file: file.write("test input\n") #파일 내용 추가하기 with open(filepath, "a") as file: file.write("test input\n") #인코딩 오류 시 인코딩해서 저장하기 with open(filepath, "a", encoding='utf-8') as file: file.write("test input\n")

Naver Blog

django 내장 템플릿 필터

* add : 변수에 값을 추가함 . {{"2"|add:"3"}} -> 5 . {{"te"|add:"st"}} -> test * addslashes : 따옴표 앞에 슬래시를 추가 . {{ value|addslashes }} * capfirst : 첫번째 문자를 대문자로 바꾼다 . {{ "test"|capfirst }} * center : 주어진 폭의 필드에서 중앙정렬 . {{ value|center:"15" }} * cut : 인수로 주어진 값을 모두 제거 . {{ "test"|cut:"e" }} -> e를 제거해서 tst 출력 * date : 지정된 형식에 따라 날짜 형식을 지정 . {{ value|date:"D d M Y" }} * default : 값이 false 이면 기본값으로 사용 . {{ value|default:'nothing' }} -> value 값이 false 나 빈값이면 nothing 사용 * default_if_none : 값이 None인 경우 기본값을 사용 .

Naver Blog

[django] settings.py 에 선언한 값 가져오기

settings.py 에 선언되어 있는 설정 값을 사용하고 싶을 경우 아래와 같이 코딩한다 from config import settings temp = settings.name //name 으로 선언되어 있는 값을 가져온다 또는 from config import settings temp = getattr(settings, 'name')

Naver Blog

[파이썬] 문자열안에 변수 값넣는 방법

문자열 안에 변수를 넣고 싶을 경우 문자열 " 앞에 f 를 붙이고 문자열안에 변수를 {} 로 감싸주면 변수 값이 문자열안으로 들어간다 temp1 = "test" temp2 = f"This is {temp1}" print(temp2) --> This is test

Naver Blog

[파이썬] 날짜 다루기

import datetime # 현재 시간 가져오기 datetime.datetime.now() # 10분 전 datetime.datetime.now() - datetime.timedelta(minutes=10) # 1시간 후 datetime.datetime.now() + datetime.timedelta(hours=1) # 하루 후 datetime.datetime.now() + current + datetime.timedelta(days=1) # 형식 변화 datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

Naver Blog

[파이썬] 문자열을 날짜로 변경하기

문자열을 날짜로 변경하여 사용하는 방법 import datetime timeStr = "2024-07-24 14:36:01" datetime.datetime.strptime(timeStr, "%Y-%m-%d %H:%M:%S")

Naver Blog

[파이썬] selenium 사용하기

from selenium import webdriver from selenium.webdriver.chrome.options import Options import subprocess from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By subprocess.Popen(r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\chromeCookie"') option = Options() option.add_experimental_option("debuggerAddress", "127.0.0.1:9222") driver = we

Naver Blog

[파이썬] 태그 삭제하기

temp 문자열 안에있는 태그를 삭제하는 소스 tagsFormat = re.compile("<.*?>") temp = re.sub(tagsFormat, "", temp)

Naver Blog

[파이썬] UnicodeEncodeError: 'cp949' codec can't encode character '\u2013'

파일에 텍스트 값을 입력하는데 해당 오류가 발생했습니다. 오류 원인은 한국어 환경에서의 인코딩은 'cp949'로 지정이 된 경우가 많은데, 유니코드('utf-8') 등 다른 인코딩 방법으로 인코딩된 파일을 다루는 경우, 인코딩 버전 불일치로 인하여 해당 에러가 발생할 수 있습니다. 해결방법으로는 encoding 방법을 명시적으로 지정해주시면 해결이됩니다. . with open(fileName, "a", encoding='utf-8') as file:

Naver Blog

[파이썬] 한번에 여러개 문자열 치환기

한번에 하나씩 치환하는 것이 아닌 지정된 모든 문자열을 한번에 치환해 주는 함수이다. replacements 에 치환을 원하는 문자들을 정리해주고 함수를 호출하면 한번에 치환해서 반환해준다. def mreplace(text, replacements): regex = re.compile("|".join(map(re.escape, replacements.keys())), re.IGNORECASE) def rmatch(match): return replacements[match.group(0).lower()] return regex.sub(rmatch, text) #치환 문자열 replacements = { "<p>": "\n", "</p>": "\n", "<div>": "\n", "</div>": "\n", "<":"[", ">":"]", } content = mreplace(content, replacements)

Naver Blog

[파이썬] cloudflare 우회해서 크롤링 하기 - selenium

이전 글에서 zenrows 를 이용해 cloudflare 를 우회해서 크롤링하는 소스를 올렸는데 테스트를 하다보니 잘되는데 프리 이용횟수를 초과하니 막혀버려서 다른 방법을 찾게 되었다. 아래 방법은 selenium 을 이용하는 방법으로 물론 무료이다. 원래 selenium 을 이용할 경우 cloudflare가 bot 으로 인식해서 크롤링이 막히는데 해당 방법은 bot 으로 인식하지 않도록 처리했다. 몇일 테스트를 해봤는데 문제없이 잘 돌아간다. from selenium import webdriver from selenium.webdriver.chrome.options import Options import subprocess from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by i

Naver Blog

mssql에서 jdbc 설치

Win2000 + MSSQL 2000 + Tomcat + JDBC 설치 mssql jdbc 연동까지 골머리 앓는 초급자분들의(저를포함) 고생을 덜어드리고자 직접해본 설치기를 적겠습니다. 아파치와의 연동은 아직 안해봤습니다만... 설명문들이 많이 있으니 참조하시고요... --------------------------------------------------------------------------------------- M$ 사에서 제시하는 2000용 JDBC 파일은 좀 제약적입니다. 예를들어 mssql 7.0 이 DB서버인 경우 사용할 수 없습니다. 반드시 2000 이여야 합니다. (이하버젼용 JDBC프로그램이 있겠지만 여기선 mssql 2000이라고 가정하겠습니다.) --------------------------------------------------------------------------------------- 우선 SQL2000을 원격이든 로컬이든 설치되었다고 가

Naver Blog

Win2000 server+php4+mssql+IIS5 설치

1. CGI 방식으로 PHP4 를 설치하기 1) PHP4를 임의의 디렉토리에 압출해제한다.(예: c:PHP4) 2) IIS 관리콘솔을 열어 해당사이트의 등록정보를 클릭하고 [홈디렉토리] 부분을 선택하고 응용프로그램란의 구성탭을 클릭한다. 추가버튼을 누르고, 실행파일에 php.exe 를 선택하고 다음과 같이 해준다. php.exe %s %s 3) 확장자에 php를 입력하고 완료한다. 4) IIS 를 재시작하고 wwwroot 폴더에 다음과 같은 파일(test.php)을 만든다. <?php phpinfo(); ?> 5) 익스플로러에서 해당파일을 열어 정상적으로 나온면 php4 설치는 완료된 것이다. * PHP 를 이용한 HTTP Autentification 를 수행하고자 한다면, 'ISAPI Filter' 탭에서 추가를 클릭한 다음 필터이름 : PHP, 경로에 'php4isapi.dll' 파일을 선택해 주면 된다. 2. MS-SQL 연동 1) system 폴더(Win9X) or syste

Naver Blog

글자자르기 함수

/*-------------------------------------------------------------- Description : 글자 자르기 함수 Input : $string-자를 글자, $Length-출력 글자수, $EndMark- 뒷문자 --------------------------------------------------------------*/ function StringCut( $String, $Length, $EndMark='' ) { if( strlen( $String ) <= $Length ) return $String; // 자를필요없으면 리턴 for( $i=0; $i<strlen( $String ); $i++ ) { //아스키코드 129 번부터는 2 Byte 문자 //2 Byte 문자인경우 1 Byte 를 더 읽은 샘으로 침. if( ord( substr( $String, $i-1, $i ) ) > 128 ) { $i++; $Length++; } /

Naver Blog

Eclipse Plug-in for XVM

[주의사항] 1. 프로젝트명은 한글상관없음. 그러나 프로젝트 경로에 한글 사용시 run.bat파일이 실행되지 않습니다. 꼭 모든 경로를 영문으로 해주세요. 2. 프로퍼티스창(properties실행시)이 안뜰때...패키지탐색기(네비게이터 바로밑의 아이콘)를 열어서 해당 프로젝트를 마우스로선택한다음 F5키를 눌러서 새로고침해준다. 다시 네비게이터창으로 와서 프로퍼티스를 실행하면 창이 뜹니다. 미들릿이름들이 정확한지 확인하세요. 3. 빌드와 런을 했을때 bin폴더에 바로 생성된것이 안보입니다. 이럴경우 해당프로젝트를 새로고침(F5)해주세요. 바로 보실수 있을껍니다. 4. 코딩시 소스를 작성한후 빌드를 누르면 수정한 부분이 반영이 안됩니다.. 이유는 저장을 안해서입니다.(간단하지만 에디터플러스쓰던 사람은 절망단계까지 가지요..^^;; 에디트플러스는 컴파일하면 자동으로 저장되기때문에...) 이클립스는 저장과동시에 컴파일이 일어나기때문에 처음 빌드배치파일을 만드신 이후에는 빌드 필요없이 그냥

Naver Blog

apmsetup에서 mssql 세팅하기

php.ini 파일을 열어 extension=php_mssql.dll 을 추가한뒤 서버를 다시 시작해 주면 된다

Naver Blog

Linux + C + Mysql

리눅스에서 c 로 mysql 연동 프로그래밍을 할때 기본적으로 컴파일러는 깔려 있으나 mysql에 연결 시키는 헤더파일은 깔려 있지 않다. 이 헤더파일은 mysql 버전에 들어 있는데 mysql 을 설치할때 rpm 버전이 아닌 c compiler가 포함된 버전을 다운받아 설치하면 된다.

Naver Blog

JDK+Tomcat+mssql 세팅

1. java.sun.com 에서 j2se sdk 를 다운 받는다 2. apache.org 에서 tomcat을 다운 받는다 3. microsoft.com 에서 mssql 2000용 jdbc를 다운 받는다 4. j2se sdk, tomcat을 설치한다 5. 내컴퓨터의 등록정보>고급>환경변수에 들어간다 6. 사용자변수를 지정한다 변수이름 : PATH 변수값 : ;c:\j2sdk\bin 7. 시스템변수를 지정한다 변수이름 : CLASSPATH 변수값 : .;c:\j2sdk\lib\tools.jar;c\j2sdk\jre\lib;c:\j2sdk\lib\servlet.jar;c:\Tomcat\co mmon\lib\msbase.jar;c:\Tomcat\common\lib\msutil.jar;c:\Tomcat\common\lib\mssql server.jar 변수이름 : JAVA_HOME 변수값 : c:\j2sdk 변수이름 : PATH 변수값 : .;c:\j2sdk\bin;C:\Program Fi

Naver Blog

[DB POOL] SQL Relay 설치

1. http://www.firstworks.com/ 에서 SQL Relay 와 Rudiments를 다운받는다 2. rudiments 먼저 설치한다 ./configure make make install 3. SQL Relay 를 설치한다 ./configure --help 를 입력하여 옵션을 보고 해당사항을 입력한다 ./configure --enable-small-code --enable-mysql-rpath --enable-php-rpath make make install

Naver Blog

mysql 설치

1. mysql.com 에서 다운로드 2. groupadd mysql 3. useradd -g mysql mysql 4. ./configure --prefix=/usr/local/mysql 5. make 6. make install 7. /usr/local/mysql/bin/mysql_install_db 8. chown -R root /usr/local/mysql 9. chown -R mysql /usr/local/mysql/var 10. chgrp -R mysql /usr/local/mysql 11. cp support-files/my-medium.cnf /etc/my.cnf 12. /usr/local/mysql/bin/mysqld_safe & 13. /usr/local/mysql/bin/mysqladmin -u root password 'new-password' [모든 곳에서 접속가능한 아이디 만들기] mysql 접속> mysql -u root -p grant all privil

Naver Blog

Sqlrelay 에서 mysql, mssql 연동

* Mysql이 설치 되어 있어야 함 [Freetds 설치] * Download : http://www.freetds.org * 참고 : http://plone.org/documentation/how-to/ms-sql-server-on-linux 1. configure -enable-msdblib -sysconfdir=/etc -prefix=/usr/local/freetds 2. make 3. make install 4. vi /etc/profile.local 내용추가 Export FREETDS=/etc/freetds.conf Export SYBASE=/usr/local/freetds Export TDSDUMP=/var/log/freetds.log 5. vi /etc/freetds.conf 내용추가 [myserver] host = SERVER ADDRESS port = 1433 tds version = 7.0 6. 연결테스트 tsql -S myserver -U username ->

Naver Blog

SNMP Trap Destination 설정

SNMP에서 발생하는 Trap의 Destination을 설정하는 방법 1. vi /usr/local/share/snmp/snmpd.conf 2. 다음 내용 추가 trapsink 10.1.1.21 trap2sink 10.1.1.21 informsink 10.1.1.21 3. snmpd 재가동

Naver Blog

SNMP MIB Comfile

1. net-snmp 설치파일 디렉토리로 이동(처음부터 컴파일해서 설치 해야함) 2. 설치파일폴더/agent/mibgroup/ 으로 해당 file copy 3. ./configure --with-mib-modules="filename" ->예제 test.c 파일 ./configure --with-mib-modules="test" 4. make 5. make install 6. /usr/local/sbin/snmpd (snmpd 재가동)

Naver Blog

CPU 사용상태

먼저 /proc/stat 파일을 읽어 들인다 cpu번호 use nice user system idle ------------------------------------------------------------ cpu 1714278 9666 631901 135528477 cpu0 842765 5302 372331 67721763 cpu1 871513 4364 259570 67806714 ----------------------------------------------------------- 여기서 CPU를 사용하면 총합을 사용하는 것이고 CPU별로 내용을 알고 싶으면 해당 번호의 CPU를 사용하면 된다 먼저 proc/stat 값을 읽어온 후 다시 1초 후에 읽어온다 [계산법] total = (1초후 user+nuser+system+idle) - (1초전 user+nuser+system+idle) user = (1초후 user - 1초전 user)*100/total system =

Naver Blog

[SOLARIS] 해상도 변경

1. VGA 카드 종류 확인 # prtconf -F /SUNW,ffb@2,0:ffb0 2. vga 카드 관련 명령어 확인 # ls -l /usr/sbin/*config lrwxrwxrwx 1 root root 9 2002년 8월 29일 /usr/sbin/GFXconfig -> pgxconfig* -r-sr-xr-x 1 root bin 61508 1999년 12월 9일 /usr/sbin/afbconfig* -r-xr-xr-x 1 root bin 27928 2000년 1월 6일 /usr/sbin/auditconfig* -r-xr-xr-x 1 root bin 18968 2000년 3월 30일 /usr/sbin/bdconfig* -r-xr-xr-x 1 root bin 184 2001년 5월 25일 /usr/sbin/dhcpconfig* -rwxr-xr-x 7 root sys 71064 2001년 9월 13일 /usr/sbin/drvconfig* -r-xr-xr-x 1 root bin 135

Naver Blog

IP 설정

ifconfig -a //현재설정 보기 [변경방법 1] 1. netconfig 2. ip랑.. gateway 등등 집어넣구.. 3. /etc/init.d/network restart [변경방법 2] 1. vi /etc/sysconfig/network NETWORKING : 네트웍여부 HOSTNAME : 호스트네임 GATEWAYDEV : 게이트웨이 장치명 GATEWAY : 게이트웨이 IP Address 2. vi /etc/sysconfig/network-scripts/ifcfg-eth0 BROADCAST : Network의 마지막 IP IP ADDR : IP NETMASK : SUBNET MASK NETWORK : Network의 시작 IP ONBOOT : yes는 부팅시 항상 활성화 3. /etc/rc.d/init.d/network restart 또는 reboot

Naver Blog

host name 변경

/proc/sys/kernel/hostname /etc/hosts /etc/HOSTNAME /etc/sysconfig/network 위의 파일들을 열어 이름을 변경시켜 준후 reboot

Naver Blog

[SOLARIS] NTP Setting

#해당 드라이버는 다음과 같은 지침에 의해 식별됩니다. #서버 127.127.XX.0에서 127.127는 NTP에게 이것은 원격 네트워크 피어가 아닌 #로컬임을 지시하고, XX는 NTP distribution에서 설명된 #클럭 유형이라는 것을 지시합니다. 이러한 config file의 제한 지침은 #이 호스트가 지정된 두 IP 주소에만 이야기를 하며 #그 밖의 다른 곳은 신뢰하지 않으므로 어디에도 #시간을 제공하지 않는다고 설명하고 있습니다. #세 가지 유형의 시간 서버 # 1. peer host_address [ key # ] [ version # ] [ prefer ] # 로컬 서버가 호스트 주소로서 지정된 원격 서버와 # 함께 symmetric active 모드로 운영된다는 것을 지정합니다. # 즉, 로컬 서버는 원격 서버에 맞추어 동기화할 수 있습니다. # 2. server host_address [ key # ] [ version # ] [ prefer ] [ mode #

Naver Blog

[Sharepoint 2007] 설치절차

1. IIS 설치 - 설치시 ASP.NET 을 설치하지 않는다 2. .NET 3.0 설치 - IIS 에 웹서비스 확장에 들어가 ASP.NET 2.0 허용선택 3. MSSQL 설치 4. Sharepoint server 2007 설치

Naver Blog

[Sharepoint 2007] IP 변경

1. SharePoint 3.0 Central Administration 실행 2. Operations 3. Global Configuration 4. Alternate access mappings 에 들어가 해당 정보 변경

Naver Blog

[Sharepoint 2007] Upload Size

- 업로드 파일 사이즈 수정 1. 서버의 Central Administration 접속 2. Application Management 클릭 3. SharePoint Web Application Management>Web application general settings 4. Maximum Upload Size 수정

Naver Blog

[Sharepoint 2007] 이메일 추가

Alert Me에 연동되는 이메일추가 방법 정상적인 방법은 알지 못하고 강제적으로 디비에 넣는다 WSS_CONTENT_B ..... 디비의 UserInfo의 tp_Email란에 이메일을 입력한다

Naver Blog

[C] 입력버퍼 비우기

getchar, getch 이용 시 입력버퍼가 비워지지 않아 2번 이용시 그냥 넘어가는 경우가 발생하는데 그럴때는 fflush(stdin); 를 사용하자!!

Naver Blog

Network 이중화

다음은 eth0, eth1을 Bonding 하여 네트워크 이중화하는 절차이다. 자세한 문서는 /usr/src/linux-2.4.21-27.EL/Documentation/networking/bonding.txt 에 있다 1. root 계정으로 접속 2. cd /usr/src/linux-2.4.21-27.EL/ 3. make menuconfig 4. network device support>Bonding driver support 를 built-in[*] 선택한 후 esc 를 눌러 저장한 후 나온다 5. cd /usr/share/doc/kernel-doc-2.4.21/networking/ 6. gcc -Wall -Wstrict-prototypes -O -I/usr/src/linux/include ifenslave.c -o ifenslave 7. cp ifenslave /sbin/ifenslave 8. vi /etc/sysconfig/network-scripts/ifcfg-bond0 에

Naver Blog

텍스트파일로 자료입력

다음은 apm_setup 에서 실행하는 방법이다 LOAD DATA INFILE 'test1.txt' INTO TABLE pininfo FIELDS TERMINATED BY ','; - test1.txt 는 table 폴더 아래 있어야 한다 - ',' 는 필드 구분자이다

1 2 3 4 5 6