[PHP] SHOEZOO 사이트 스크래핑

[PHP] SHOEZOO 사이트 스크래핑

PHP
[PHP] SHOEZOO 사이트 스크래핑 해당 사이트의 정보를 스크래핑 하여서 가공을 하는 작업입니다. 보시는것처럼 다양한 메뉴가 존재 하지만 원하는 정보를 가져오기 위해서는 각 링크의 속성이나 HTML 태그를 분석해야 합니다. 이번에는 간단하게 할 수 없는것이 브랜드와 사이즈도 있고 사용자가 선택할수 있는 정보가 많습니다. 일단은 목록페이지에서는 각 제품의 링크를 획득한 후에 다시 한번더 제품 상세 페이지에 들어가서 정보를 정확하게 수집을 해야 합니다. 제품 상세페이지를 보시면은 이미지도 5장정도 되고, 사이트를 선택할 수도 있어서 해당 옵션을 모두 가져와서 그에 맞게 각 데이터를 가공해야 합니다. 이 작업이 보기보다 상당히 시간이 소요 되며, 해당 작업을 위해서는 DB를 이용하여서 중복이나 동일이름이지만은 브랜드나 옵션이 다른것을 구분해서 작업을 해야 합니다. 스크래핑을 원하시는분은 공지사항을 참조해주시기 바랍니다.
Read More

[C#] 내장 IE 랜더링시 a 태그 새창을 현재창으로 하기

CSharp
[C#] 내장 IE 랜더링시 a 태그 새창을 현재창으로 하기 webbrowser을 이용할 경우에 HTML 태그에서 A 링크가 새창을 바로면은 바로 윈도우 기본 브라우저로 띄워 버립니다.이렇게 될 경우에 원하는 자료를 다시 받으려면은 URL를 다시 이동하거나 해야 하는데 그냥 새창 필요없이 바로 현재창의 페이지를 변경해서 나오도록 하는것입니다. // 새창을 내부에서 처리 하기 private void webBrowser1_NewWindow(object sender, CancelEventArgs e) { string newUrl = webBrowser1.StatusText.ToString(); webBrowser1.Navigate(newUrl ); e.Cancel = true; }
Read More

[PHP] 티스토리 스킨 텍스트큐브에 적용하기

PHP
[PHP] 티스토리 스킨 텍스트큐브에 적용하기 티스토리용 스킨이 마음에 드는것이 있어서 가져와서 적용을해보니 되지 않는 부분이 너무 많았습니다.스킨파일이 HTML 파일에 대해서는 적절하게 수정을 하면은 사용을 할 수 있지만은 치환자에 대해서는 어떻게 손쓸 방법이 없어서... 결국은 PHP 파일을 수정하게 되었습니다. 해당위치에 파일의 원본을 최대한 보전하면서, 스킨의 기능을 이용하기 위해서 수정한것입니다.그래서인지 속도는 다소 느려지는 편입니다. 파일 위치 : interface/common/blog/list.php <!--?php /// Copyright (c) 2004-2016, Needlworks / Tatter Network Foundation /// All rights reserved. Licensed under the GPL. /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) if (!empty($listView)) { dress('list', $listView, $view); } else if (isset($list) && isset($skin)) { // 블로그 ID 가져오기 $blog_id = $context->getProperty('blog.id'); $listView = $skin->list; $itemsView = ''; foreach ($list['items'] as $item) { // 각 글의 페이지 정보를 획득 하도록 함. list($entries, $paging) = getEntryWithPaging($blogid, $item['id']);…
Read More

[MySQL] MySQL 최대 접속수 설정하기

Database
MySQL 최대 접속수 설정하기 ERROR 1040 (08004): Too many connections 에러발생시 해결법 mysql을 재시작 하지 않고 바로 설정 방법 #mysql 을 재시작 안해도 max_connections 값이 바로 적용된다. mysql> set global max_connections=300; mysql 설정파일(my.ini 또는 my.cnf ) 방법 #mysql을 재시작 해 주어야 한다. [mysqld] max_connections = 300 MySQL 접속수 관련 상태를 확인하는 방법 mysql> show variables like '%max_connect%'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | max_connect_errors | 10000 | | max_connections | 100 | +--------------------+-------+ mysql> show status like '%CONNECT%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | Aborted_connects | 200 | | Connections | 300 | | Max_used_connections | 101 | ==> 현재 연결된 접속수 | Ssl_client_connects | 0 | | Ssl_connect_renegotiates | 0 | | Ssl_finished_connects | 0 | | Threads_connected | 101 | ==> 연결되었던 최대 접속수…
Read More

[C#] 모니터 off 하기

CSharp
[C#] 모니터 off 하기 public partial class MainForm : Form { const int WM_SYSCOMMAND = 0x0112; const int SC_MONITORPOWER = 0xF170; const int MONITOR_ON = -1; const int MONITOR_OFF = 2; const int MONITOR_STANBY = 1; [DllImport("user32.dll")] private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam); public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { Console.WriteLine(this.Handle.ToInt32()); int ScreenHeight = 0; System.Windows.Forms.Screen[] screens = System.Windows.Forms.Screen.AllScreens; if (screens.Length >= 1) { foreach (Screen screen in screens) { if (screen.Primary) { ScreenHeight = screen.Bounds.Height; Console.WriteLine(ScreenHeight); } } } else { ScreenHeight = screens[0].Bounds.Height; } } // 모니터 Off private void button1_Click(object sender, EventArgs e) { SendMessage(this.Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF); } }
Read More

[Linux] 리눅스 전체 디스크 사용량 확인

Linux
전체 디스크 사용량을 알기 위해서는 파일시스템(≒볼륨, 파티션)별로 나누어진 용량을 합쳐야 한다. df 명령어를 그대로 쓸 경우 파일시스템 이름이 길 경우 다음 줄로 넘겨서 출력하기 때문에 -P 옵션을 준다. [root@localhost ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/VolGroup00-LogVol00 27678892 4189988 22060220 16% / /dev/xvda1 101086 36768 59099 39% /boot tmpfs 524288 0 524288 0% /dev/shm [root@localhost ~]# df -P Filesystem 1024-blocks Used Available Capacity Mounted on /dev/mapper/VolGroup00-LogVol00 27678892 4189988 22060220 16% / /dev/xvda1 101086 36768 59099 39% /boot tmpfs 524288 0 524288 0% /dev/shm 전체 용량 (KB 단위) #명령어 df -P | grep -v ^Filesystem | awk '{sum += $2} END { print sum " KB" }' #실행 예시 [root@localhost ~]# df -P | grep -v ^Filesystem | awk '{sum += $2} END { print sum " KB" }'…
Read More
[C#] RSS 보기

[C#] RSS 보기

CSharp
[C#] RSS 보기 평소에 블로그를 자주 돌아 다니는 편입니다.그래서 RSS를 모아 보이 위해서 만들었습니다. 제작환경 .Net Framework4.5 C# Winform /  PHP 5.5.X  / Mysql 5.X 테스트환경 : Windows10 , Windows7 일단 프로그램 실행 화면 입니다.Web에서 내역을 볼수도 있지만은 컴퓨터 앞에서 웹브라우저는 켜기 싫고해서 만들었습니다. 서버가 각 RSS 주소에 맞춰서 XML 파싱해서 정보를 서버에 두고 있습니다.프로그램이 서버에 요청해서 그에 맞게 XML를 돌려주는것으로 만들었으며, 제가 프로그램을 켜 주지 않아도 RSS를 갱신해주기 놓치지 않고 확인해 볼 수 있습니다. 알림 기능은 현재 만들다가 말았습니다.프로그램으로 전달해서 notify를 할려다가 포기하고 서버에서 특정 단어가 들어오면은 Telegram bot API를 통해서 제게 알려주도록 되어 있습니다.굳이 해당 프로그램을 실행하지 않아도 스마트폰에서 받을 수 있기에 원하는 글을 놓치지 않아서 좋습니다. 텔레그램에서 받은 정보의 일부분 입니다.URL과 내용을 제 마음대로 가공해서 알려주기고 해당 정보를 보고 굳이 컴퓨터 앞이 아니라도 웹페이지에 접속해서 신선한(?) 글을…
Read More

[PHP] cafe24 SMS 전송을 class로 만들어 보았습니다.

PHP
[PHP] cafe24 SMS 전송을 class로 만들어 보았습니다. SMS 전송 API를 사용할 일이 있었지만 기존에 소스는 모두 절차형이라서 계속 붙이고 하다보니 짜증이 났습니다.물론 절차형으로 간략히 소개해 놓으면은 좋지만은 스쿨호스팅에서는 class로 만들어서 떡하니 공개해주는데 FORM부터 모두 절차를 따르려고 하니 중간에 수정하기도 귀찮고 제 나름대로 변형을해서 사용하기에 계속 다른곳에 적용하기도 벅차서 그냥 한번 만들어보았습니다. 물론, 100%완벽한거은 아니고 당장 필요해서 만들어서 아직 다듬지도 못하고 이름도 대충대충 해 놓은것이라서 그냥 참고만 해주세요. <?php /** * sms 요청 * * @author * @version 2016 * @package */ class smsCAFE24 { private $smsSendUrl1 = "https://sslsms.cafe24.com/sms_sender.php"; // 전송요청 URL private $smsSendUrl2 = "https://sslsms.cafe24.com/sms_sender.php"; // HTTPS 전송요청 URL private $smsSendClintUrl1 = "https://sslsms.cafe24.com/smsSenderPhone.php"; private $smsReMainUrl = "http://sslsms.cafe24.com/sms_remain.php"; // 전송요청 URL private $smsListUrl = "http://smsapi.cafe24.com/sms_list.php"; // 전송요청 URL" private $userId = 'API ID'; //SMS 아이디. private $secure = 'API KEY'; //인증키…
Read More

[Ubuntu] [authz_core:error]

Linux
[Ubunto] [authz_core:error]이번에 아파치 버전을 2.4로 올리면서 만나게 된 에러 입니다. [Tue Feb 02 09:19:51.345040 2016] [authz_core:error] [pid 11157] [client xxx.xxx.xxx.xxx] AH01630: client denied by server configuration: /home/ 기존에 잘 사용하던것을 왜 바꾸는지 알 수 없지만은 배포되는것에 맞춰서 생활을 해야하는것이 사용하는 사람의 입장이지 싶습니다.아래에 맞게 모두 변경을 해 줘야 할것 같습니다. [code] # 2.2 Order deny,allow Deny from all #2.4 Require all denied # 2.2 Order allow,deny Allow from all #2.4 Require all granted # 2.2 Order Deny,Allow Deny from all Allow from example.org #2.4 Require host example.org [/code] 참초 : http://httpd.apache.org/docs/2.4/upgrading.html     Allow from all
Read More

[MySQL] 문자열 치환

Database
[MySQL] 문자열 치환 문자열 치환을 하기 전에 select로 먼저 데이터가 정상적으로 변경되는지 확인을 해보시는것이 좋습니다.UPDATE가 아니기 때문에 실제 DB에서는 변경이 이뤄지지 않으니 검정을 하기에 좋습니다. SELECT REPLACE(컬럼, '변경전문자열', '변경후문자열') AS 가상컬럼명 FROM 테이블 WHERE 컬럼 = '변경전문자열'; 위에서 모든 데이터를 확인을 하였다면은 실질적으로 이제 UPDATE를 하여서 DB에서 값을 변경을 하면 됩니다. UPDATE wp_posts SET 테이블 = REPLACE(컬럼, '변경전문자열', '변경할문자열') WHERE 컬럼 = '값'; UPDATE wp_posts SET 테이블 = REPLACE(컬럼, '변경전문자열', '변경할문자열'); 참초 : http://chongmoa.com/4555
Read More

[PHP] 여러개의 class를 한 class에서 사용하기

PHP
[PHP] 여러개의 class를 한 class에서 사용하기 class를 잘 만들어 놓아서 재 사용을 높이려고 하는데 한곳에서 여러개의 class를 사용하려고 하면은 상속이 1번뿐이여서 귀찮았습니다.그래서 한곳에서 여러개의 class를 사용하도록 한번 만들어 보았습니다. <?php class AA { public function aa() { echo 'aa class'; } } class BB { public function bb() { echo 'bb class'; } } class CC { public function cc() { echo 'cc class'; } } class DD { var $aaExt; var $bbExt; var $ccExt; public function __construct() { $this->aaExt = new AA(); $this->bbExt = new BB(); $this->ccExt = new CC(); } } class EE extends DD { public function __construct() { DD::__construct(); // parent::__construct(); echo $this->aaExt->aa; echo $this->bbExt->bb; echo $this->ccExt->cc; } } $ee = new EE; -- Result --aa classbb classcc clase 위체서 처럼 서로 다른 클래스를 한곳에서 모두…
Read More
[웹브라우저] 크롬브라우저 시크릿 모드로 시작하게 하는 방법

[웹브라우저] 크롬브라우저 시크릿 모드로 시작하게 하는 방법

Windows
크롬브라우저 시크릿 모드로 시작하게 하는 방법 매번하기에 귀찮아서 블로그에 올려두고 누군가 물어보며은 이 페이지 보라고 할 생각 입니다. 위 그림에서 파란색 상에 안에처럼 지금 현재에 있는것에 뒤에 붙여 넣기 하시면 됩니다. " --incognito" 이 마저 실패하면 답 없습니다.
Read More