본문 바로가기
PHP/PHP

[PHP] 주어진 문자열에서 유튜브 ID 추출하기

by 집탱구리 2023. 6. 19.
반응형

※ 주어진 문자열에서 iframe 태그의 존재 여부를 확인하고,

    그 안에 있는 YouTubeID를 추출하는 방법.

 추출한 YouTubeID로 Youtube공유 URL생성

 

YTN기사 인용 - 기사 원본 : https://www.ytn.co.kr/_ln/0108_202306191508088983- youtube원본 : https://www.youtube.com/watch?v=QoT86vGRvbs&t=5s

[날씨] 내륙 사흘째 폭염주의보...서울 또 올 최고 '33.8℃' <iframe width="560" height="315" src="https://www.youtube.com/embed/QoT86vGRvbs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> [앵커] 내륙에 사흘째 폭염특보가 이어지는 가운데 오늘 때 이른 더위가 절정에 달합니다. 서울 기온이 무려 35도까지 치솟는다는 예보인데요, 취재 기자 연결해 자세한 더위 상황과 전망 알아보겠습니다. 정혜윤 기자! 전국에서 가장 더운 곳이 어딘가요? [기자] 경기 양평군 옥천면입니다. 현재 기온 36.4도로 벌써 사람 체온만큼 올랐습니다. 그밖에 영월과 정읍, 광주 기온이 34도를 넘었고, 서울도 33.8도로 어제 이어 하루 만에 올 최고 기온을 경신했습니다. 서쪽 지방 더위는 주말부터 뜨거운 공기가 축적된 가운데 강한 일사와 동풍이 태백산맥을 넘으며 고온건조해지는 푄 현상이 겹친 것이 원인입니다. 오늘 서울 낮 최고 기온은 35도까지 오를 가능성이 있습니다. 예상대로 오른다면 6월 중순 기온으로는 1997년 이후 26년 만에 가장 높은 기록을 세우게 됩니다. 반면 동쪽 지방은 현재 강릉 26도 속초 25도로 더위가 주춤하는 모습입니다. 33도를 웃도는 서쪽 내륙 더위는 오늘을 고비로 내일과 모레 전국에 비가 내리며 한풀 꺾이겠습니다. 서울 기준 내일은 낮 기온은 30도, 모레는 24도까지 기온이 내려가겠고 이후에는 30도 안팎의 초여름 더위가 이어질 것으로 보입니다. 지금까지 YTN 정혜윤 입니다. YTN 정혜윤 (jh0302@ytn.co.kr)

 

- PHP 코드 진행

1. strpos로 iframe존재 확인

2. iframe존재 할 경우 정규식으로 src 추출

3. src에 이 있을 경우 youtube url인지 확인

4. youtube url일 경우 해당 url의 마지막 세그먼트값이 youtube ID이므로 같이 추출한다.

5. youtube ID출력

$baseString = "[날씨] 내륙 사흘째 폭염주의보...서울 또 올 최고 '33.8℃' <iframe width="560" height="315" src="https://www.youtube.com/embed/QoT86vGRvbs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> [앵커] 내륙에 사흘째 폭염특보가 이어지는 가운데 오늘 때 이른 더위가 절정에 달합니다. <-...중략...-> 서울 기준 내일은 낮 기온은 30도, 모레는 24도까지 기온이 내려가겠고 이후에는 30도 안팎의 초여름 더위가 이어질 것으로 보입니다. 지금까지 YTN 정혜윤 입니다. YTN 정혜윤 (jh0302@ytn.co.kr)";

// iframe 태그의 존재 여부 확인
if (strpos($baseString, '<iframe') !== false) {
    // iframe 태그에서 src 값 추출
    preg_match('/<iframe.*?src="(.*?)"/', $baseString, $matches);
    $src = $matches[1];

    // src 값이 YouTube URL인지 확인
    if (preg_match('/^(https?:\/\/)?(www\.)?youtube\.com\/embed\/([a-zA-Z0-9_-]{11})/', $src, $urlMatches)) {
        $youtubeUrl = $urlMatches[0];

        // YouTube URL에서 마지막 세그먼트 추출
        $segments = explode('/', parse_url($youtubeUrl, PHP_URL_PATH));
        $youtubeId = $lastSegment = end($segments);
        $youtubeShareUrl = "https://youtu.be/" . $youtubeId;

        echo "마지막 세그먼트: " . $lastSegment . "\n";
        // 마지막 세그먼트 : QoT86vGRvbs
        echo "공유 URL : ".$youtubeShareUrl;
        // 공유 URL : https://youtu.be/QoT86vGRvbs
    } else {
        echo "올바른 YouTube URL을 찾을 수 없습니다.\n";
    }
} else {
    echo "iframe 태그를 찾을 수 없습니다.\n";
}
반응형

댓글