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

페이지 정보

shadow2fox shadow2fox 78 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,613,615
레벨 147
경험치 3,239,802

Progress Bar 46.49%

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

댓글1

하늘구장님의 댓글

skyfield4u
하늘구장 2025.06.13 23:19

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

멋진 팁 고맙습니다

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

Total 762139 페이지

제목 글쓴이 날짜 조회 추천
JavaScript  🏆 특정 div의 내용을 일정 시간마다 새로고침하기 루루아빠 2016.03.20 15,410 1
그누•영카트  🏆 영카트 5.3.2.9 shadow2fox 2019.05.30 11,936 0
jQuery  댓글+1🏆 button으로 유튜브 재생 및 정지 제어하기 루루아빠 2016.12.14 10,146 0
jQuery  댓글+2🏆 jQuery를 이용한 링크 자동 클릭(auto click) 루루아빠 2015.06.26 8,725 0
그누•영카트  댓글+5🏆 인기 검색어 특정 게시판 제외, 회원 아이디 제외, 회원의 검색어만 저장 shadow2fox 2021.05.13 7,845 2
에디터  댓글+1🏆 CKeditor 4.x 소스 보기시 자동으로 공백 태그( ) 추가되는 문제 해결하기 루루아빠 2016.01.08 7,814 1
그누•영카트  댓글+1🏆 [PHP 7.2.x] count(): Parameter must be an array or an object that implements Countable 에러 해결하기 shadow2fox 2018.08.19 6,935 0
그누•영카트  댓글+2🏆 그누보드 5.4.4 shadow2fox 2021.01.05 6,905 1
이윰  🏆 modal 오픈시 modal-dialog 아래 background body 스크롤 안되게 하기 루루아빠 2015.07.16 6,863 0
이윰  🏆 이윰빌더와 그누보드 패치시 수정할 파일들 루루아빠 2015.06.23 6,582 0
그누•영카트  🏆 영카트 5.0.41 패치 루루아빠 2015.07.13 6,530 0
그누•영카트  🏆 영카트 5.4.4 shadow2fox 2021.01.05 6,340 0
그누•영카트  🏆 그누보드 5.3.1.9 패치 shadow2fox 2018.10.19 5,828 0
이윰  🏆 Google Maps API Key를 발급받아 이윰 스킨에 적용하기 루루아빠 2016.08.24 5,652 0
제로  🏆 💾 [스킨만들기] write.php(글쓰기 폼) 설명입니다 루루아빠 2005.06.23 5,596 0
제로  🏆 생일인 회원 로그인시 축하송 및 메세지 띄우기 ( 양력●음력 포함 ) 루루아빠 2006.05.23 5,408 0
그누•영카트  🏆 그누보드 5.2.9 패치 루루아빠 2017.07.05 5,353 0
기타  🏆 Font Awesome 4.7.0 - Transportation, Gender, Medical, Currency, Payment, Brand 루루아빠 2017.11.20 5,026 0
그누•영카트  🏆 영카트 5.1.2 (PHP7 대응 MySQLi 지원추가) 패치 루루아빠 2015.10.17 4,946 0
기타  🏆 IE11에서 JWplayer7.x 가 로딩되지 않는 Setup timeout error 해결책 루루아빠 2016.06.01 4,943 0