Closed6

Nest.jsでwebサイト情報を抜き出すには??

キンジョウ/金城翔太郎キンジョウ/金城翔太郎
open-graph-scraper.module.ts
import { Module } from '@nestjs/common';
import { OpenGraphScraperService } from './open-graph-scraper.service';

@Module({
  providers: [OpenGraphScraperService],
  exports: [OpenGraphScraperService],
})
export class OpenGraphScraperModule { }

moduleでserviceモジュールをimportしてあげて、依存関係を解決させる

キンジョウ/金城翔太郎キンジョウ/金城翔太郎
open-graph-scraper.service.ts
/* eslint-disable @typescript-eslint/no-var-requires */
import { Injectable } from '@nestjs/common';
const ogs = require('open-graph-scraper');

@Injectable()
export class OpenGraphScraperService {
  async getOpenGraphData(url: string) {
    const options = { url: url };
    try {
      const data = await ogs(options);

      const { result } = data;

      // ここで必要なデータを処理
      return result;
    } catch (err) {
      throw new Error('Open Graph data fetch failed: ' + err.message);
    }
  }
}
キンジョウ/金城翔太郎キンジョウ/金城翔太郎

呼び出し元

article.service.ts
const res = await this.openGraphScraperService.getOpenGraphData(
      data.articleLink,
    );
    console.log(res);
// 下記はresの中身
{
  ogTitle: 'Open Graph protocol',
  ogType: 'website',
  ogUrl: 'https://ogp.me/',
  ogDescription: 'The Open Graph protocol enables any web page to become a rich object in a social graph.',
  ogImage: [
    {
      height: '300',
      type: 'image/png',
      url: 'https://ogp.me/logo.png',
      width: '300'
    }
  ],
  charset: 'utf-8',
  requestUrl: 'http://ogp.me/',
  success: true
}

このスクラップは2023/11/25にクローズされました