2019년 9월 6일 금요일

Youtube API 활용 팁

기획에서 Youtube 재생을 컨트롤 하는 것을 주문해서..

이것저것 해본거 정리..

요구 사항은..(나랑 의견이 안 맞긴 했지만...)

1. 동영상은 2개

2. 위에 동영상이 끝나면 자동으로 아래것이 재생

3. Youtube는 iframe 형식으로 사용

===============처리 방법=================

참조 문서 : https://developers.google.com/youtube/iframe_api_reference#Playback_controls

일단!!! 제일 중요한 부분!!! iframe에 들어있는 주소에 쿼리스트링으로 enablejsapi=1 을 붙인다!!! 이거 안 붙여서 1시간 날려먹음..

그리고.. api 호출해주고.. :

<script src="https://www.youtube.com/iframe_api">

이하 제어 스크립트.. 나머지는 주석 참고..


<
script >
    var player1, player2; //동영상 2개에 대한 객체 선언...

//onYouTubeIframeAPIReady 함수는 https://www.youtube.com/iframe_api 에서 자동으로 호출한다.. 별도의 호출 선언 없음..
function onYouTubeIframeAPIReady() {
    // iframe id 넣어줌 (player1)
    player1 = new YT.Player('player1', {
        events: {
            'onStateChange': onPlayerStateChange
        }
    });

    // iframe id 넣어줌 (player2)
    player2 = new YT.Player('player2', {
        events: {
            'onStateChange': onPlayerStateChange
        }
    });
}

function onPlayerStateChange(event) {
    //동영상 플레이어의 상태 변경시 호출됨...
    //console.log(event);
    //console.log(event.target.a.id)
    switch (event.data) {
        case 0:
            //재생 멈춤 상태값..
            //record('video ended');
            //플레이어가 1에서 이벤트가 발생했다면..
            if (event.target.a.id == 'player1') {
                //player2의 상태가 시작되지 않았다면
                if (player2.getPlayerState() != "-1") {
                    player1.stopVideo(); //멈추고
                    player2.playVideo(); //시작...
                }
            } else {
                if (player1.getPlayerState() != "-1") {
                    player2.stopVideo();
                    player1.playVideo();
                }
            }
            break;
        case 1:
            //재생 시작 상태값..
            //record('video playing from '+player.getCurrentTime());
            break;
        case 2:
            //재생 일시정지 상태값..
            //record('video paused at '+player.getCurrentTime());
            break;
    }
}

function record(str) {
    console.log(str);
} <
/script>

끗!


2019년 7월 17일 수요일

아주 가끔 필요한 MS-SQL용 달력 쿼리

회사에서

특정 기간 검색에 대한 일자별 통계를 내 주려고 하는데..

달력을 생성해야 해서리..

이래저래 찾은 거 중에 그냥 제일 간단한 거..

  1. SELECT CONVERT(CHAR(10),dateadd(d,NUMBER,'2019-07-01'),120) dt
  2. FROM master..spt_values
  3. WHERE TYPE = 'P' AND NUMBER <= datediff(d,'2019-07-01','2019-07-17')
  4. ORDER BY 1 DESC

가끔 쓰지만.. 요긴하다..

2019년 5월 21일 화요일

회사 메일서버에 해킹시도가 너무 많이 들어옴.

회사 메일서버 환경은..

CentOS 6.6 + nginx + iredmail (postfix)

기업용 회선이 아니라 일반 회선이라 그런지.. 해킹시도가 많으면..

자꾸 웹 UI 서비스가 맛이 감..

결국 geoip 를 적용하려고 했으나..

생각처럼 잘 안됨..

생각을 바꿔서... fail2ban을 사용하여 차단 설정함..

fail2ban 기본 설정이 생각보다 관대하여 600초 후에 ban을 풀어주길래

영구 차단으로 변경..

이하 참조 링크

https://iskra.sarang.net/180

이하 nginx 관련 fail2ban 설정

https://www.digitalocean.com/community/tutorials/how-to-protect-an-nginx-server-with-fail2ban-on-ubuntu-14-04

2019년 5월 10일 금요일

2019년 3월 21일 목요일

MSXML API 주소

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms764730(v=vs.85)

회사 사이트가 Classic ASP라 어쩔 수 없이 MSXML API를 사용함...

매번 찾기 힘들어서 기록상 남김.

2019년 2월 21일 목요일

[VIBRA]Higher



현재 하는 밴드 자작곡

시간 낭비하고 싶다면 들어주세요..

2018년 11월 9일 금요일

읽기 전용인 input 태그의 값이 변경되었을 때, 감지 방법

진짜.. 이걸로.. 쌩쑈를 다 해서리.. 정리차 적어 놓음..

0. 쇼핑몰 리뉴얼 중 주문 화면에서 우편 번호를 받으면 이게 산간 오지 지역이면 도선료를 추가로 부여해야 하는 상황 발생.

1. 쇼핑몰 솔루션을 자체 마이그레이션 하는 것이기에 알아서 해야 함.

2. daum의 주소찾기 사용 중.

3. 솔루션에서 script로 자체 기능 구현해 놨음.. button 태그 클릭하면 class 감지해서 우편번호 검색기가 뜨게..

4. 문제는 우편 번호를 받는 input 태그가 readonly 속성이라.. 값을 전~~~혀 읽을 수 없음!!

5. 어쩔까 고민하고, 구글링 한 결과.. readonly 속성이 붙은 건 어쩔 수 없고, 키 입력이 안들어오게 막는게 더 낫겠다란 생각이 들음. (readonly 속성을 때면.. 값이라도 읽을 수 있으니..)

6. css로 readonly 속성이 된 것처럼 보이게 하고.. 자~~ 이제 onchange 이벤트로 값을 읽어보자!!!

7. 어? 이거 왜 못 읽지?

8. 이리저리 삽질 시작.. jquery로 이벤트 리스너도 추가. bind도 해보고 triger도 해보고..

9. 안된다!!! 이 쉬운게 안된다니!!! 이게 뭔 상황이지??

10. 좀 더 구글링을 해보니.. change란 이벤트는 키 입력이 이뤄져야 발생이 되고, 값을 고쳐준 경우엔 별도의 처리가 필요하다!~ 란 걸 알게됨..

11. 이하. 조치 내용...

12. 아직도 배울게 많군화~~~~

  1. var $input = $("#rcvPost")//이놈이 오늘의 주인공 우편번호 input box!!   
  2. $("#rcvPost").on('input'function() {
  3.     // Do this when value changes
  4.     console.log("Input text changed!" + $(this).val());
  5. });


이렇게 javascript에서 선언하고..

별도의 함수를 구현해야 한다.. 이하 코드..

  1. (function ($) {
  2.     var originalVal = $.fn.val;
  3.     $.fn.val = function (value) {
  4.         var res = originalVal.apply(this, arguments);
  5.  
  6.         if (this.is('input:text') && arguments.length >= 1) {
  7.             // this is input type=text setter
  8.             this.trigger("input");
  9.         }
  10.  
  11.         return res;
  12.     };
  13. })(jQuery);

이 같이 처리하면.. 값 변경이 일어나면.. 입력이 된 것처럼 동작시킨다..

진짜 끗!!





[낯선] 2026.06.20 이태원 MZK MuzikBar 공연

간만의 공연 이태원 비틀즈가 이전하여 MZK MuzikBar 로 새 단장 오픈을 한 뒤로 2번째 공연 새 베이시스트가 합류한 뒤로 첫 공연이기도 함.. 이래저래 틀린 부분도 많지만.. 그래도 간만에 그럭저럭 잘했다.. https://www.youtub...