試してみたブログ

AI関連・iPhone/Pixelなどのガジェット・音声入力・サーマルプリンタなど興味をある事をどんどん試してみた際の記録

WordPressのサイトの記事一覧をGASで取得してスプシに転記させる

以前、はてなブログのスプシの出力を実施した。

tameshitemita.blog

Wordpressで書いている地域メディアブログの記事を一覧化したいのでやってみた

WordPress側のREST APIposts を取得(認証不要な公開記事だけならそのままいける)

const WP_ENDPOINT = 'https://XXXXXXXXX/wp-json/wp/v2/posts';
const PER_PAGE = 50;  // 1〜100 の範囲

function importWpPosts() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('posts') || ss.insertSheet('posts');

  sheet.clearContents();
  sheet.getRange(1, 1, 1, 3).setValues([['title', 'url', 'date']]);

  // まず page=1 を叩いて総ページ数を取得
  const firstRes = UrlFetchApp.fetch(`${WP_ENDPOINT}?per_page=${PER_PAGE}&page=1&_fields=title,link,date`);
  const headers = firstRes.getAllHeaders();
  const totalPages = Number(headers['X-WP-TotalPages'] || headers['x-wp-totalpages'] || 1);

  let page = 1;
  let row = 2;

  while (page <= totalPages) {
    const url = `${WP_ENDPOINT}?per_page=${PER_PAGE}&page=${page}&_fields=title,link,date`;
    const res = UrlFetchApp.fetch(url);
    const data = JSON.parse(res.getContentText());

    if (data.length === 0) break;  // 念のための保険

    const values = data.map(p => [
      p.title?.rendered || '',
      p.link || '',
      p.date || ''
    ]);

    sheet.getRange(row, 1, values.length, 3).setValues(values);
    row += values.length;
    page++;
  }
}

振り返り

思ったよりもサクッと一覧化が出来た。また一覧化する事で思ったよりも記事数が少なく感じ、更新の意欲&もっと頑張ろうという気になった。 はてなブログWordpressで運用しているので、定期的に取得して閲覧して振り返っていきたい。