1311월/19

php 로그인, 크롤링 by Snoopy

간혹 업체의 report api가 구비되지 않아서 크롤링을 한다거나, 주기적인 업데이트를 위해 크롤링이 필요한 경우가 있다. 그와중에 로그인 후 크롤링을 할 경우까지 종종 등장한다. 이때 오래되었으나 snoopy 라이브러리를 이용하면 좋다. Snoopy download https://sourceforge.net/projects/snoopy/ 바로 import하여 사용한다. <?php require_once(‘lib/Snoopy.class.php’); $snoopy = new Snoopy; $snoopy->agent = “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)”; //login $loginUri = ‘http://www.bluebee.co.kr/loginTest.php’; $snoopy->httpmethod = “POST”; $auth[‘id’] = ‘bluebee’; $auth[‘password’] = ‘1234’; $snoopy->submit($loginUri, $auth); $snoopy->setcookies(); //로그인에 쿠키를 사용하는 경우가 있으니 쿠키정보를 저장 $loginResult = json_decode($snoopy->results); $report_data = array(); if($loginResult->{‘ret’} != “ok”) { echo ‘Login 실패!’; exit; } else { //리포트 데이터 크롤링 $reportUri = ‘http://www.bluebee.co.kr/reportTest.php’; $snoopy->httpmethod = “POST”; $report[‘sdate’] = ‘2019-11-01’; $report[‘edate’] = ‘2019-11-13’; $snoopy->submit($reportUri, $report); preg_match(‘/<tr class=”reportR”>(.*?)<\/tr>/is’, $snoopy->results, $result_report_tr); if(sizeof($result_report_tr) > 1) { preg_match_all(‘/<td[^>]*>(.*?)<\/td>/is’, $result_report_tr[1], $result_report_td); /*데이터 정리*/ } } ?> 로그인이 필요한 경우 간편하게~ 대충 이런 형태로 간단하게 뽑아낼 수 있겠다.   오류 발생 대처 방법 PHP Deprecated: The each() function is deprecated. php버전에 따라 오류발생 가능 Snoopy.class.php 의 each 관련 사항을 모두 foreach로 수정 예) while (list($key, $val) = each($links[2])) { => foreach($links[2] as $key => $val) { 그외 딱히 이슈될건 없다.

037월/19

TensorFlow on Anaconda3 5.2.0

아나콘다 설치 : https://repo.continuum.io/archive/index.html Anaconda3-5.2.0-Windows-x86_64.exe (python 3.6.5) 관리자 권한으로 설치 후 확인 > conda –version conda 4.5.4 > python –version Python 3.6.5 :: Anaconda ,Inc.  Anaconda Prompt 관리자 실행 후 업데이트 > conda update -n base conda > conda update –all > python -m pip install –upgrade pip 아나콘다 가상환경 구성 > conda create -n bluebee1 python=3.6 > conda activate bluebee1 base로 돌아오려면.. > conda deactivate 가상환경에 TensorFlow 설치 > conda install tensorflow 설치확인 > python >>> import tensorflow as tf >>> tf.__version__ ‘1.13.1’ jupyter notebook ide설치 > conda install jupyter notebook 실행 > jupyter notebook 기본 브라주에서 실행되는것을 확인. 준비끝 jupyter notebook 기본 디렉터리 변경 설정파일 path 알아보기 > jupyter notebook –generate-config Writing default config to : 경로 해당 경로의 jupyter_notebook_config.py 열어서 수정 c.NotebookApp.notebook_dir = ” 항목에 디렉터리 지정 예) c.NotebookApp.notebook_dir = ‘D:/project/jupyter’

112월/19

android adb를 이용한 shell 접근

adb를 이용하여 기기에서의 shell 명령이 가능하다. 우선 디바이스 리스트를 가져오자. C:\Users\bluebee\AppData\Local\Android\Sdk\platform-tools>adb devices 그다음 기기에 shell을 아래와 같이 날린다. 예제는 기기의 알람 상황 살펴보기. adb -s devicename shell dumpsys alarm | find “bluebee” 이렇게 진행해도 되겠다. adb -s devicename shell run-as packagename

1010월/18

Android Chrome Inspect with Developer

종종 android 폰에서 크롬 디버깅이 필요할때가 있다. 1. 우선, adb가 개발 pc에 설치되어있지 않다면 아래 adb fastboot 을 다운로드받아 간편하게 설치해보자. https://forum.xda-developers.com/showthread.php?t=2317790 설치 후 콘솔에서 adb start-server adb kill-server 바로 adb 사용이 가능하다.   2. 그다음, 연결하고자 하는 스마트폰의 usb드라이버를 최신으로 설치한다. LG G6의 경우, LGMobileDriver_WHQL_Ver_4.2.0.exe 를 설치한다.   3. 스마트폰은 당연히 USB debugging 이 ON 되어야 한다. LG G6의 경우, 설정 > 시스템 > 휴대폰정보 > 소프트웨어 정보 > 빌드 번호 연속터치 그러면 개발자 모드가 열리게 되고, 그안에서 USB debugging을 ON 한다.   4. 이제 PC에서 크롬을 열고, chrome://inspect/#devices 에 접속한다. LGM-G600S 가 remote target에 추가되었다. 스마트폰의 크롬탭이 모두 보이게 되고, 해당 inspect 를 클릭하면, 디버깅에 유용하다.  

076월/18

ubuntu rsync

테스트서버에서 실서버로의 sync가 필요했다. 고민할것도 없이 rsync를 셋팅한다. 일단 rsync가 활성화되있는지 확인 #systemctl list-unit-files | grep rsync enable안되어 있다면 #sudo systemctl enable rsync.service 재부팅시에도 시작되게.. #update-rc.d rsync enable 참고로 제거는.. #update-rs.d -f rsync remove rsync사용을 위한 xinetd 설치 #apt-get install xinetd 그리고 rsync서비스 작성 #vi /etc/xinetd.d/rsync service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = –daemon log_on_failure += USERID } #service xinetd restart 소스 경로 작성(들어올 부분) #vi /etc/rsyncd.conf [test_source] path=/home/tester/ comment=test_source uid=tester gid=tester use chroot=yes read only=no write only=yes hosts allow=허용IP max connections=15 timeout=300 rsync gogo #/usr/bin/rsync -av –exclude=.git –exclude=.gitattributes –exclude=.gitignore –delete /home/tester/ www.bluebee.co.kr::tester_source >> /home/tester/log/rsync.log 2>&1 소스가 실서버로 착착착~

046월/18

git pull after push

아무래도 git push 이후에 즉각 웹서비스를 올려야겠다. hook을 이용하여 push 를 하도록 한다. #mkdir /var/opt/gitlab/git-data/repositories/…/….git/custom_hooks #cd /var/opt/gitlab/git-data/repositories/…/….git/custom_hooks #vi post-receive #!/bin/sh cd /home/html/web/ || exit unset GIT_DIR git pull origin master exec git-update-server-info exit 0 #chmod +x pre-receive #chown git.git pre-receive 이제 git에 push작업 끝나면 custom hook이 발생하여 post-receive에 작성해둔 명령어를 실행하게 된다.   참고) git, dev서버 – user : git, group : 알아서 live, www서버 – user : 알아서, group : 알아서

295월/18

ubuntu-16.04 GitLab 설치

새로운 프로젝트를 협업으로 진행하면서, 오랜만에 git이 필요하게 되었다. 일단 우분투 서버에 메모리가 너무 적으면 안된다. 1GB에서 설치했다가 낭패.. 4GB서버를 셋팅 후, 다시 시도했다. # sudo apt-get install ca-certificates curl openssh-server postfix postfix설정창이 뜨면 그냥 기본으로 두고 진행하면 된다. 이제 repository 셋팅을 위해 curl 로 스크립트를 받아온다. # cd /tmp # curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh 스크립트 실행 # sudo bash /tmp/script.deb.sh The repository is setup! 메세지가 확인된다. 이제 gitlab을 설치하도록 한다. # sudo apt-get install gitlab-ce 음.. 380MB.. 용량이 생각보다 많다. Setting up gitlab-ce (10.8.1-ce.0) … It looks like GitLab has not been configured yet; skipping the upgrade script. *. *. *** *** ***** ***** .****** ******* ******** ******** ,,,,,,,,,***********,,,,,,,,, ,,,,,,,,,,,*********,,,,,,,,,,, .,,,,,,,,,,,*******,,,,,,,,,,,, ,,,,,,,,,*****,,,,,,,,,. ,,,,,,,****,,,,,, .,,,***,,,, ,*,. _______ __ __ __ / ____(_) /_/ / ____ _/ /_ / / __/ / __/ / / __ `/ __ \ / /_/ / / /_/ /___/ /_/ / /_/ / \____/_/\__/_____/\__,_/_.___/ Thank you for installing GitLab! GitLab was unable to detect a valid hostname for your instance. Please configure a URL for your GitLab instance by setting `external_url` configuration in /etc/gitlab/gitlab.rb file. Then, you can start your GitLab instance by running the following command: sudo gitlab-ctl reconfigure For a comprehensive list of configuration options더보기…

213월/18

Laravel 개발이슈(idnadx) 메모

View에서 php구문 사용 @php($a++) @php enter your codes here @endphp <?php a++ ?> Global Variables in Laravel5 1. /config/global.php (임의) 생성 return [ ‘IMP_STATE’ => array ( 1 => ‘진행’ , 2 => ‘정지’ , 0 => ‘미진행’ ) ]; 2. controller에서 config(‘global.IMP_STATE’); 3. view에서 {{ config(‘global.IMP_STATE’) }}

083월/18

ubuntu php7.0 to php7.1

laravel 5.5로 넘어오면서 php 버전에서 waring이 발생한다. ubuntu php7.0을 오랜만에 업그레이드 해보기로 한다. Add Ondrejs PPA Repo $ sudo add-apt-repository ppa:ondrej/php $ sudo apt-get update Install PHP 7.1 $ service apache2 stop $ sudo apt-get install php7.1 php7.1-common php7.1-fpm $ sudo apt-get install php7.1-curl php7.1-xml php7.1-zip php7.1-gd php7.1-mysql php7.1-mbstring $ php -v 아주 간단하다. php7.0의 제거는 신중하게 하도록 한다. php7.0-fpm까지 제거되면 웹서비스가 중단된다. 제거하기전에 /etc/nginx/사이트 설정에서 php7.1-fpm 으로 변경하고 웹서비스가 정상적으로 돌아가는지 반드시 확인한다. 그럼 이제 php7.0 제거..purge. 마지막으로 깔끔하게 오랜만에 재부팅도.. $ sudo apt-get purge php7.0 php7.0-common $ sudo shutdown -r now apache의 경우 make한다. $ a2enmod php7.1 $ service apache2 restart

092월/18

ubuntu vsftp 설정

ubuntu에서의 vsftp 설치 및 sftp 접속 vsftp 설치 $ sudo apt-get update $ sudo apt-get install vsftpd $ sudo apt-get install ufw $ sudo ufw allow 20/tcp $ sudo ufw allow 21/tcp $ sudo ufw allow 100021/tcp $ sudo ufw enable $ sudo ufw status verbose 설치는 끝났고 이제 설정부분~ listen=YES anonymous_enable=NO local_enable=YES write_enable=YES virtual_use_local_privs=YES guest_enable=YES user_sub_token=$USER local_root=/srv/ftp chroot_local_user=YES allow_writeable_chroot=YES hide_ids=YES local_umask=022 file_open_mode=0644 listen_port=10021 pasv_enable=yes pasv_min_port=10022 pasv_max_port=10030 pasv_addr_resolve=YES pasv_promiscuous=YES lock_upload_files=NO $ systemctl restart vsftpd.service ssh 설치해서 sftp로 접근하자. $ sudo apt install ssh $ sudo vi /etc/ssh/sshd_config Port 22 //ssh 포트 설정 IgnoreRhosts yes //자동 로그인 파일을 무시 PermitRootLogin no //root 계정 로그인 금지 접속 테스트 $ ftp <server-public-ip> <ftp-listen-port> # user / password 입력 # passive 모드로 전환 ftp> pass