æ¬è¨äºã¯
ãAdvent Calendar 2025ã
5æ¥ç®ã®è¨äºã§ãã
ðð
4æ¥ç®
â¶â¶ æ¬è¨äº â¶â¶
6æ¥ç®
ð
ð
ããã«ã¡ã¯ãããã³ãã¨ã³ã¸ãã¢ã®æ¥é«ã§ãã
æ¨å¹´ã«ç¶ãã¦ã¢ããã³ãã«ã¬ã³ãã¼ã«å·çããã¦ããã ããã¨ã«ãªãã¾ããã
ä»åã¯APIãã¼ã¹ã®æ¥æ¬è£½ãããã¬ã¹CMSã§ããmicroCMSã®ãã¼ã¿ç§»è¡ã«ã¤ãã¦ãç´¹ä»ãã¾ãã
- ã¯ããã«
- åæ
- ãã¼ã¿ç§»è¡æ¹æ³
- ã¾ã¨ã
ã¯ããã«
microCMSã使ç¨ãã¦ãããµã¤ããæ¹ä¿®ããéã«ãmicroCMSã§ç®¡çãã¦ãããã¼ã¿ã®æ§æã夿´ããå¿
è¦ãããã¾ããã
ãã§ã«ç»é²ããã¦ãããã¼ã¿ã«ã¤ãã¦ãæ°ããæ§æã«å¤æ´ããªãã¦ã¯ãªããªãã®ã§ããããã¼ã¿ã®éãå¤ããæä½æ¥ã ã¨ãªããªã大å¤ãã
ã¨ãããããªèæ¯ãããã大éã®ãã¼ã¿ãã©ã®ããã«ç§»è¡ãããæ¤è¨ãããã¨ã«ãªãã¾ããã
åæ
管çç»é¢ã§ç§»è¡å
ã®ã³ã³ãã³ã(API)ã¨åãç°å¢ã«ç§»è¡å
ã®ã³ã³ãã³ã(API)ã使ãã¦ããã¾ãã
ç§»è¡å
ã¨ç§»è¡å
ã®APIã¹ãã¼ãã®è¨å®ã¯ããããä¸è¨ã®éãã
ç§»è¡å
ã§ã¯æ§ãªããã¨ãã£ã¿ã使ç¨ãã¦ãã¾ããããç§»è¡å
ã§ã¯ãªããã¨ãã£ã¿ã使ç¨ãããã夿´ãã¦ãã¾ãã
ãç§»è¡å ã®ã³ã³ãã³ã(API)ã
ã¿ã¤ãã«ï¼titleï¼
ããã¹ããã£ã¼ã«ãç»åï¼imageï¼
ç»åæ¬æï¼bodyï¼
æ§ãªããã¨ãã£ã¿ã¨ããã¹ãã¨ãªã¢ã®ç¹°ãè¿ããã£ã¼ã«ã
â»æ§ãªããã¨ãã£ã¿ã¨ããã¹ãã¨ãªã¢ã¯ã«ã¹ã¿ã ãã£ã¼ã«ãã¨ãã¦ãã£ã¼ã«ããç¨æãã¦ãã¾ã
ãç§»è¡å ã®ã³ã³ãã³ã(API)ã
ã¿ã¤ãã«ï¼titleï¼
ããã¹ããã£ã¼ã«ãç»åï¼imageï¼
ç»åæ¬æï¼bodyï¼
ãªããã¨ãã£ã¿ã¨ããã¹ãã¨ãªã¢ã®ç¹°ãè¿ããã£ã¼ã«ã
â»ãªããã¨ãã£ã¿ã¨ããã¹ãã¨ãªã¢ã¯ã«ã¹ã¿ã ãã£ã¼ã«ãã¨ãã¦ãã£ã¼ã«ããç¨æãã¦ãã¾ã
ãã¼ã¿ç§»è¡æ¹æ³
ï¼. ç§»è¡ãããã¼ã¿ãã¨ã¯ã¹ãã¼ããã
ã¾ãã¯ç§»è¡å ã®ã³ã³ãã³ã(API)ã«ç»é²ããã¦ãããã¼ã¿ãã¨ã¯ã¹ãã¼ããã¾ãã ä¸è¨ã®ããã«GET APIã使ã£ã¦ãã¼ã¿ãåå¾ããã³ã¼ãã使ãã¾ãã
async function getData() {
try {
const response = await fetch(sourceEndpoint, {
method: 'get',
headers: {
'X-MICROCMS-API-KEY' : key
},
dispatcher,
});
if (!response.ok) {
throw new Error(`ã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹: ${response.status}`);
}
const result = await response.json();
return result;
} catch (error) {
console.log(error.message);
}
}
â»sourceEndpointã«ã¯microCMSã®ç§»è¡å ã®ã³ã³ãã³ã(API)ã®ã¨ã³ããã¤ã³ãããkeyã«ã¯microCMSã®APIãã¼ãè¨å®ãã¾ãã
ï¼. ã¨ã¯ã¹ãã¼ããããã¼ã¿ãç»é²ãã
ãã¼ã¿ã®ç»é²æ¹æ³ã¨ãã¦ã¯ä¸è¨2ãã¿ã¼ã³ãããã¾ãã
- microCMSã®ç®¡çç»é¢ã§CSVãã¡ã¤ã«ãã¤ã³ãã¼ããã
- APIãå©ç¨ãã
ããããè¦ã¦ããã¾ãããã
ãã¿ã¼ã³â ï¼microCMSã®ç®¡çç»é¢ã§CSVãã¡ã¤ã«ãã¤ã³ãã¼ããã
ï¼. CSVãã¡ã¤ã«ã使
ã¤ã³ãã¼ãããCSVãã¡ã¤ã«ãç¨æããããããã¼ã¿ã®ã¨ã¯ã¹ãã¼ãæã«CSVãã¡ã¤ã«ã使ããã³ã¼ãã使ããå®è¡ãã¾ãã
const fs = require('fs');
const path = require('path');
// CSVãã¡ã¤ã«ã使
async function createCSV() {
const key = ['', 'title', 'image','body'];
let rows = [];
// ç§»è¡å
ãããã¼ã¿ãåå¾
const data = await getData();
let contents = [];
if (data) {
contents = data.contents;
}
for (let i = 0; i < contents.length; i++) {
let content = contents[i];
let row = [];
row.push(content.id);
if (content.title) {
row.push(content.title);
} else {
row.push('')
}
if (content.image) {
row.push(content.image.url);
} else {
row.push('');
}
if (content.body) {
let bodyJson = JSON.stringify(content.body);
bodyJson = '"' + bodyJson.replace(/"/g, '""') + '"';
row.push(bodyJson);
} else {
row.push('');
}
rows.push(row);
}
// CSVãã¼ã¿ä½æ
const csvHeader = key.join(',');
const csvBody = rows.join('\r\n');
const csvDataArray = [csvHeader, csvBody];
const csv = csvDataArray.join('\r\n');
return csv;
}
// CSVãã¡ã¤ã«åºå
async function downloadCSV() {
const csv = await createCSV();
const outPath = path.join(__dirname, 'data.csv');
fs.writeFileSync(outPath, csv, 'utf-8');
}
downloadCSV();
ï¼. microCMSã®ç®¡çç»é¢ã§CSVãã¡ã¤ã«ãã¤ã³ãã¼ã
使ããCSVãã¡ã¤ã«ã管çç»é¢ã§èªã¿è¾¼ã¿ã¾ãã
è¯ãç¹ã¨ãã¦ã¯ã ã¤ã³ãã¼ãèªä½ã¯ã³ã¼ããç¨æããå¿
è¦ããªããã¨ã¯ã¹ãã¼ããæä½æ¥ã«ããCSVãã¡ã¤ã«ã®ä½æãå¯è½ã§ããã°å
¨ä½ãéãã¦ã³ã¼ãã£ã³ã°ãã§ããªãæ¹ã対å¿ãããã¨ãã§ãããã¨ãã¨æãã¾ãã
ãã ãã¡ãã®æ¹æ³ã®å ´åããã¼ã¿ã®å
¬éæ¥æãç»é²ãããã¨ãã§ããªãããã§ããã®ã§ãç§»è¡å
ã®ãã¼ã¿ã®å
¬éæ¥æãå¼ãç¶ããã¨ã¯ã§ãã¾ããã§ããã
ãã¿ã¼ã³â¡ï¼APIãå©ç¨ãã
ï¼. ã³ã¼ãã使ããå®è¡
WRITE APIã使ã£ã¦ãã¼ã¿ãç»é²ããã³ã¼ãã使ããå®è¡ãã¾ãã
// postéä¿¡ç¨ã«ãã¼ã¿ãæ´å½¢
function formatData(item) {
let data = {
id: item.id ? item.id : '',
publishedAt: item.publishedAt ? item.publishedAt : '',
title: item.title ? item.title : '',
image: item.image ? item.image.url : '',
body: item.body ? item.body : [],
}
return data;
}
// ãã¼ã¿ã1ä»¶ãã¤ç»é²
async function postData(data) {
const request = {
method: 'post',
headers: {
'X-MICROCMS-API-KEY' : key,
'Content-Type' : 'application/json'
},
dispatcher,
body: JSON.stringify(data),
}
try {
const response = await fetch(targetEndpoint, request);
if (!response.ok) {
throw new Error(`ã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹: ${response.status}`);
}
console.log(response.json());
} catch (error) {
console.error(error.message);
}
}
// ãã¼ã¿ããã¹ã¦ç»é²
async function postAllData() {
const data = await getData();
for (const item of data.contents) {
await postData(formatData(item));
}
}
postAllData();
â»targetEndpointã«ã¯microCMSã®ç§»è¡å
ã®ã³ã³ãã³ã(API)ã®ã¨ã³ããã¤ã³ãããkeyã«ã¯microCMSã®APIãã¼ãè¨å®ãã¾ãã
APIãå©ç¨ãããã¼ã¿ã®ç»é²ã¯CSVã¤ã³ãã¼ãã¨ç°ãªãã¨ã³ã¸ãã¢ã«ãã対å¿ãå¿
é ã«ã¯ãªãã¾ããããã¼ã¿ã®å
¬éæ¥æã«ã¤ãã¦ãç§»è¡ãå¯è½ã§ããã
ã¾ã¨ã
以åã¯ã«ã¹ã¿ã ãã£ã¼ã«ããç¹°ãè¿ããã£ã¼ã«ãã®ãã¼ã¿ã¯CSVãã¡ã¤ã«ã§ã®ã¤ã³ãã¼ããã§ãã¾ããã§ããããæè¿ã®ã¢ãããã¼ãã§ã§ããããã«ãªã£ãããã§ãããã®ãããCSVã¤ã³ãã¼ãã§ã®ç§»è¡ã¨APIã§ã®ç§»è¡ã§ã¯ã»ã¼å·®ããªããªã£ãããã«æãã¾ããã
å人çã«ã¯ãå
¬éæ¥æãå¼ãç¶ãããå ´åãç»é²ããã¦ãããã¼ã¿ã®ã¿ã®ç§»è¡ã§ããã°å¾è
ã®APIãå©ç¨ããæ¹æ³ãç§»è¡æã«ãã¼ã¿ã®è¿½å ã»å¤æ´ãå¿
è¦ã ã£ãããã¨ã³ã¸ãã¢ä»¥å¤ã®æ¹ããã¼ã¿ãç·¨éãããå ´åã¯CSVãã¡ã¤ã«ã§ã®ç§»è¡ãé©ãã¦ããã®ã§ã¯ãªããã¨æãã¾ãã