[PHP] node.js를 윈도우 서버에 설치하고 peppeteer 라이브러리를 이용하여 og:image를 추출해 보자

페이지 정보

shadow2fox shadow2fox 103 1 2 2025.06.13 19:52:21

평점

  • 평점 : 5점 (1명 참여)

본문

📝 node.js를 윈도우 서버에 설치하고 peppeteer 라이브러리를 이용하여 og:image를 추출해 보자

일반적으로 curl로 HTML 메타 태그를 파싱할 수 있으나 Meta 플랫폼 서비스(페이스북, 스레드 등)는 대부분의 콘텐츠를 로그인 사용자 기반의 클라이언트 렌더링으로 제공해서 curl이나 일반 HTTP 요청으로는 HTML 메타 태그를 추출할 수 없다.

1. Node.js 설치

https://nodejs.org/ko 접속하여 LTS 버전 다운로드 후 Node.js를 설치한다.

node.js를 윈도우 서버에 설치하고 peppeteer 라이브러리를 이용하여 og:image를 추출해 보자node.js를 윈도우 서버에 설치하고 peppeteer 라이브러리를 이용하여 og:image를 추출해 보자node.js를 윈도우 서버에 설치하고 peppeteer 라이브러리를 이용하여 og:image를 추출해 보자node.js를 윈도우 서버에 설치하고 peppeteer 라이브러리를 이용하여 og:image를 추출해 보자node.js를 윈도우 서버에 설치하고 peppeteer 라이브러리를 이용하여 og:image를 추출해 보자

설정 마지막 단계 tool for Native Modules의 체크 박스를 선택하지 않고 설치한다.

2. Puppeteer 설치

 

cmd 창이나 터미널 창을 열어 아래 명령어를 입력한다.



mkdir C:\puppeteer

cd C:\puppeteer

npm init -y

npm install puppeteer

3. ogimage.js 작성

puppeteer가 설치된 폴더에 아래 소스 코드로 ogimage.js 파일을 작성한다.


const puppeteer = require('puppeteer');

(async () => {
  const url = process.argv[2];

  if (!url || !url.startsWith('http')) {
    process.exit(0);
  }

  const browser = await puppeteer.launch({
    headless: true,
    args: ['--no-sandbox', '--disable-setuid-sandbox']
  });

  const page = await browser.newPage();

  // 일반적인 브라우저처럼 가장 널리 호환되는 User-Agent 설정
  await page.setUserAgent(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
  );

  try {
    await page.goto(url, { waitUntil: 'networkidle2', timeout: 15000 });

    // og:image만 추출
    const ogImage = await page.evaluate(() => {
      const meta = document.querySelector('meta[property="og:image"]');
      return meta ? meta.content : '';
    });

    console.log(ogImage || '');
  } catch (err) {
    console.log('');
  } finally {
    await browser.close();
  }
})();

4. PHP에서 활용


$node = 'C:\\Program Files\\nodejs\\node.exe';
$script = 'C:\\puppeteer\\ogimage.js';
$url = '이미지를 추출할 url 주소';

$command = "\"$node\" \"$script\" \"$url\"";
exec($command, $output, $result_code);

if ($result_code === 0 && !empty($output))
    $og_image = trim(implode("\n", $output));

$url은 preg_match를 활용해서 추출한다.

추출한 $og_image의 이미지 주소를 이용해 서버에 다운로드 하고 가공해 활용하도록 한다.

추천인 2
  • skyfield4u
    하늘구장
  • 소현세자
shadow2fox
10
shadow2fox - 회원등급 : 자연/Level 147 - 포인트 : 2,614,655
레벨 147
경험치 3,242,124

Progress Bar 51.76%

- 가입일 : 2015-03-10 12:21:44
- 서명 : 인간에게 가장 큰 선물은 자기 자신에게 기회를 주는 것이다. - 크리스 가드너, Chris Gardner -
- 자기소개 : There's never a shortcut to happiness.

댓글1

하늘구장님의 댓글

skyfield4u
하늘구장 2025.06.13 23:19

윈도우 서버 이용자라서 저도 한번 도전해 보고 싶네요

멋진 팁 고맙습니다

축하합니다. 첫 댓글로 29경험치를 획득하였습니다.

Total 762126 페이지

제목 글쓴이 날짜 조회 추천
이윰  댓글+5🏆 출석부 랭킹 중복 방지하기 shadow2fox 2019.12.16 3,371 4
이윰  댓글+5🏆 유튜브 "이 동영상은 볼 수 없습니다" 해결하기 shadow2fox 2023.02.20 2,312 3
그누•영카트  댓글+2 그누보드(영카트) 5.5.8.3.2 shadow2fox 2023.07.18 826 3
이윰  댓글+4🏆 📸 유튜브 썸네일 생성 개선하기 루루아빠 2021.06.24 3,853 3
에디터  댓글+2🏆 CKEditor 4.x 버전 체크로 인한 콘솔 에러 해결하기 shadow2fox 2023.12.24 1,667 3
이윰  댓글+3🏆 PHP 8.x 지원을 위한 암호화, 복호화 함수 shadow2fox 2021.02.16 3,090 3
그누•영카트  댓글+2 그누보드(영카트) 5.6.8 shadow2fox 2024.11.27 403 3
이윰  댓글+7🏆 유튜브 플레이리스트(playlist) 썸네일 추출과 올바르게 적용하기 shadow2fox 2021.09.01 3,168 3
그누•영카트  댓글+2🏆 그누보드(영카트) 5.5.6 이니시스 통합인증(간편인증) 사용시 필수 패치 shadow2fox 2022.04.20 1,168 3
그누•영카트  댓글+2🏆 그누보드(영카트) 5.5.7.1 (★ 5.5.7 버전 사용자님들께서는 필독해 주세요) shadow2fox 2022.04.30 1,209 3
그누•영카트  댓글+3🏆 다음 카카오 서비스 먹통 사태로 인한 그누•영카트 postcode.v2.js 리소스 로딩 에러 shadow2fox 2022.10.16 1,081 3
이윰  댓글+2🏆 추천 베스트 최신글에서 블라인드 게시글은 제외하기 shadow2fox 2020.11.13 1,720 2
그누•영카트  댓글+2 그누보드(영카트) 5.5.8.2.6 shadow2fox 2023.01.14 734 2
이윰  댓글+2🏆 EXIF 정보 이미지 넓이에 맞게 조정하기 shadow2fox 2020.11.21 2,334 2
그누•영카트  댓글+2🏆 그누보드 5.4.3.1 shadow2fox 2020.11.24 2,290 2
이윰  댓글+5🏆 게시글 작성 시 외부 이미지를 저장하여 썸네일화하기 shadow2fox 2021.01.01 2,946 2
이윰  댓글+2 date 시간 형식으로 출력(~전) 올바르게 해결하기 shadow2fox 2023.03.10 880 2
그누•영카트  댓글+2 그누보드(영카트) 5.5.8.2.8 shadow2fox 2023.03.24 695 2
그누•영카트  댓글+1 그누보드(영카트) 5.5.8.3 shadow2fox 2023.04.20 704 2
이윰  댓글+2 비메오 썸네일 추출 올바르게 적용하기 shadow2fox 2023.04.24 987 2
그누•영카트  댓글+2🏆 그누보드 5.4.4.1 shadow2fox 2021.01.05 2,179 2
이윰  댓글+2 PATH만 지원되는 filemtime을 curl 이용하여  URL을 지원하도록 확장하기 shadow2fox 2023.06.13 715 2
그누•영카트  댓글+2 그누보드(영카트) 5.5.8.3.1 shadow2fox 2023.06.19 904 2
그누•영카트  댓글+2🏆 그누보드 5.4.4.3 shadow2fox 2021.01.06 2,246 2
그누•영카트  그누보드(영카트) 5.5.8.3.3 shadow2fox 2023.08.20 922 2
그누•영카트  댓글+2🏆 그누보드 5.4.4.5 shadow2fox 2021.01.09 2,446 2
에디터  댓글+2 CKEditor 4.x 링크 이용 시 rel 속성 noopener, noreferrer, nofollow 자동으로 삽입하기 shadow2fox 2023.10.15 919 2
PHP  댓글+2 cURL 웹 스크래핑 시 403 error가 발생하여 수집할 수 없을 때 shadow2fox 2023.10.15 902 2
이윰  댓글+2🏆 View 페이지에서 이전글, 다음글 버튼에 제목과 썸네일을 가져오기 shadow2fox 2021.01.10 1,900 2
그누•영카트  댓글+2 그누보드(영카트) 5.5.9 shadow2fox 2023.10.19 702 2