
ç¹å®ã®noteã¯ãªãšã€ã¿ãŒã®æŽæ°ããã¡ãŒã«ã§åãåãæ¹æ³
noteã«ã¯çŽ æµãªæ¹ãããããããã£ãããã®ã§ããããã®æ¹ã ã®æŽæ°ãèŠéããªãããã«ããããã«çããäœã工倫ããŠããŸããïŒ
å ¬åŒããæŽæ°éç¥ã®ã¡ãŒã«ã¯å±ããŸãããç¹å®ã®ã¯ãªãšã€ã¿ãŒãããããã¯ã¢ãããããã®ã§ããã以å€ã®æ¹ãèŠéããŠããŸãã®ãäžæºã§ããããŸãããèªåããæ¢ãã«è¡ãããšããæ¹æ³ããæéçãªå¶çŽãèãããšãèªåã®äžã§ãã£ããããŠããŸããã§ããã
ã ããç§ã¯ãåçŽã«Chromeã¿ãã§éããŠãããŠF5æŽæ°ã§ç¢ºèªããŠããŸããããã¿ããéããããŠãããããšã«ãªããŸããâŠ

ä»ã¯ããæ¯æ¥æŽæ°ããã§ãã¯ããŠãæŽæ°ããã£ããã¡ãŒã«ã§éç¥ããããä»çµã¿ãèšå®ããã®ã§ãèªåã®èŠããã¿ã€ãã³ã°ã§ç¢ºèªã§ããããã«ãªããŸããã
䟿å©ãªã®ã§ããã®èšå®æ¹æ³ãå ±æããŸãããæ°ã«ãªã£ãã䜿ã£ãŠã¿ãŠãã ããïŒ
æŠèŠ
æŽæ°ã確èªãããã¯ãªãšã€ã¿ãŒãã¹ãã¬ããã·ãŒãã«ãŸãšãã
Google Apps ScriptïŒGASïŒã§ãã¯ãªãšã€ã¿ãŒURLã®RSSããæŽæ°ã確èªããæŽæ°ãããã°æå®ã®ã¡ãŒã«ã«éç¥ããããèšå®ãã
GASãæ¥æ¬¡ã§å®è¡ããããã«èšå®ãã
ãã®èšå®ãå®äºããããããšã¯åŸ ã£ãŠããã ãã§æŽæ°ã®ãç¥ãããã¡ãŒã«ã§å±ããŸãâš
å ·äœçãªèšå®æ¹æ³
1. æŽæ°ã確èªãããã¯ãªãšã€ã¿ãŒãã¹ãã¬ããã·ãŒãã«ãŸãšãã
Googleã¹ãã¬ããã·ãŒããéããŠã1è¡ç®ã«é ç®åãèšå®ããŸãã
A1ã»ã«ïŒname
B1ã»ã«ïŒurl
C1ã»ã«ïŒæçµæ€ç¥url
D1ã»ã«ïŒerror
ãããŠã2è¡ç®ä»¥éã«æŽæ°ã確èªãããæ¹ã®æ å ±ãå ¥ããŸãã
AåïŒã¯ãªãšã€ã¿ãŒã®åå
BåïŒã¯ãªãšã€ã¿ãŒã®URLãâãããæ£ç¢ºã«å ¥åããããšïŒïŒ

2. Google Apps ScriptïŒGASïŒã§ãã¯ãªãšã€ã¿ãŒURLã®RSSããæŽæ°ã確èªããæŽæ°ãããã°æå®ã®ã¡ãŒã«ã«éç¥ããããèšå®ãã
ã¡ãã¥ãŒããŒã®ãæ¡åŒµæ©èœã-ãApps ScriptããéããŸãã

ã³ãŒããå ¥åããç»é¢ã«ãªãã®ã§ãäžèº«ã以äžã³ãŒãã«å€æŽããŸããïŒå ã æžããŠãã£ããfunction myFunction() { }ããæ¶ããŠäžžããšäžæžãããŸããïŒ

// â
éç¥ãåãåãã¡ãŒã«ã¢ãã¬ã¹ã«å€æŽããŠãã ãã
const EMAIL_ADDRESS = "xxxxxxxx@gmail.com";
// â
察象ããŒã¿ãå
¥ã£ãŠããã·ãŒãåã«å€æŽããŠãã ãã
const SHEET_NAME = "ã·ãŒã1";
// Båã®ãããã£ãŒã«URLãããRSSã®URLãçµã¿ç«ãŠã
// æ«å°Ÿã®ã¹ã©ãã·ã¥æç¡ããã§ã« /rss ãä»ããŠããå Žåã®äž¡æ¹ã«å¯Ÿå¿
function buildRssUrl(profileUrl) {
const url = String(profileUrl).trim().replace(/\/+$/, '');
if (!url) return '';
if (/\/rss$/.test(url)) return url;
return url + '/rss';
}
function checkNoteUpdates() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
if (!sheet) {
throw new Error(`ã·ãŒãã${SHEET_NAME}ããèŠã€ãããŸãã`);
}
const values = sheet.getDataRange().getValues();
let updates = [];
const statusColumns = []; // Cåã»Dåã ããæžãæ»ãããã®é
å
for (let i = 1; i < values.length; i++) {
const row = values[i];
const name = row[0]; // Aå: åå
const profileUrl = row[1]; // Bå: noteã®URL
let lastUrl = row[2]; // Cå: æçµæ€ç¥URL
let errorMsg = row[3]; // Då: error
const rssUrl = buildRssUrl(profileUrl);
// Båã空æ¬ã®å Žåã¯ã¹ããã
if (!rssUrl) {
statusColumns.push([lastUrl, errorMsg]);
continue;
}
try {
// ãµãŒããŒè² è·è»œæžã®ããã1ãªã¯ãšã¹ãããšã«1ç§åŸ
æ©
Utilities.sleep(1000);
const response = UrlFetchApp.fetch(rssUrl, { muteHttpExceptions: true });
const responseCode = response.getResponseCode();
if (responseCode === 200) {
const document = XmlService.parse(response.getContentText());
const channel = document.getRootElement().getChild('channel');
if (channel) {
const items = channel.getChildren('item');
const newItems = [];
// å忀ç¥ããèšäºã«å°éãããŸã§ãããã¹ãŠæ°çãšããŠæŸã
// ïŒåååãRSSããæ¶ããŠããå Žåã¯ååŸã§ããå
šä»¶ãæ°çæ±ãã«ãªãïŒ
for (let j = 0; j < items.length; j++) {
const link = items[j].getChild('link').getText();
if (link === lastUrl) break;
newItems.push({
name: name,
title: items[j].getChild('title').getText(),
link: link
});
}
if (!lastUrl) {
// ååå®è¡ïŒCåã空ïŒïŒéç¥ãããææ°èšäºã®èšé²ã ãè¡ã
if (items.length > 0) {
lastUrl = items[0].getChild('link').getText();
}
} else if (newItems.length > 0) {
updates = updates.concat(newItems);
lastUrl = newItems[0].link; // ææ°èšäºãèšé²
}
}
errorMsg = ""; // æ£åžžçµäºæã¯ãšã©ãŒã¡ãã»ãŒãžãã¯ãªã¢
} else {
errorMsg = `HTTP Error: ${responseCode}`;
}
} catch (e) {
errorMsg = `Parse Error: ${e.message}`;
}
statusColumns.push([lastUrl, errorMsg]);
}
// Cåã»Dåã®ã¿æžãæ»ãïŒAã»Båã®æžåŒããªã³ã¯ãå£ããªãïŒ
if (statusColumns.length > 0) {
sheet.getRange(2, 3, statusColumns.length, 2).setValues(statusColumns);
}
if (updates.length > 0) {
sendNotificationEmail(updates);
}
}
// ã¡ãŒã«æ¬æã§ã¿ã€ãã«ã®èšå·ã衚瀺ã厩ããªãããã«ãã
function escapeHtml(text) {
return String(text)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"');
}
function sendNotificationEmail(updates) {
const subject = `ãnoteãæ°ç ${updates.length}ä»¶`;
let htmlBody = `<h2 style="color: #2cb696;">noteæ°çèšäºã®ãç¥ãã</h2>
<p>ãã©ããŒäžã®ã¯ãªãšã€ã¿ãŒãæ°ããèšäºãæçš¿ããŸããã</p>
<ul>`;
updates.forEach(update => {
htmlBody += `<li style="margin-bottom: 10px;">
<b>${escapeHtml(update.name)}</b><br>
<a href="${escapeHtml(update.link)}" target="_blank" style="color: #1a73e8; text-decoration: none;">
${escapeHtml(update.title)}
</a>
</li>`;
});
htmlBody += "</ul><hr><p><small>â»ãã®ã¡ãŒã«ã¯èªåéä¿¡ãããŠããŸãã</small></p>";
MailApp.sendEmail({
to: EMAIL_ADDRESS,
subject: subject,
htmlBody: htmlBody
});
}ãã®ã³ãŒããããããš
â ã¹ãã¬ããã·ãŒããèªã
â¡åURLã®RSSãèŠã«è¡ã
â¢ååãšéãèšäºãããã°ã¡ãŒã«ãéã
ã³ãŒãã®äžéšã«éä»å ã¡ãŒã«ãèšå®ããæ¬ãããã®ã§ãããããèªèº«ã®ã¡ãŒã«ã¢ãã¬ã¹ã«å€æŽããŸãã

ãŸããããã¹ãã¬ããã·ãŒãã®ã·ãŒãåã倿ŽããŠããå Žåã¯ããã®ã·ãŒãåã«å€æŽããŸãã

ä¿åã¢ã€ã³ã³ïŒãããããŒããŒã¯ïŒãæŒããŠãã³ãŒããä¿åããŸãã

ãããŠãããããã°ãã®å³ã«ãããã«ããŠã³ãããcheckNoteUpdatesããéžæããŸãã

ãâ¶å®è¡ããæŒããŸãã

ã»ãã¥ãªãã£ã«é¢ãã確èªãã§ãã®ã§ããæš©éã確èªããæŒããŠã

ã詳现ããæŒããŠã

ããã¹ãŠéžæãã«ãã§ãã¯ãå ¥ããŠãäžã«ã¹ã¯ããŒã«ããŠã次ãžããã¯ãªãã¯ããŸãã


ããã§èš±å¯ããæš©éã¯3ã€ã§ãã
ã»ã¹ãã¬ããã·ãŒãã®åç §ã»ç·šéïŒCåã«ãæçµæ€ç¥urlããæžã蟌ãããã«å¿ èŠ
ã»å€éšãµãŒãã¹ãžã®æ¥ç¶ïŒnoteã®RSSïŒæŽæ°æ å ±ïŒãèªã¿ã«è¡ãããã«å¿ èŠ
ã»ã¡ãŒã«ã®éä¿¡ïŒããªãèªèº«ã«éç¥ã¡ãŒã«ãéãããã«å¿ èŠ
ãã®ã³ãŒããå€éšã«ããŒã¿ãéãããšã¯ãããŸãããã¢ã¯ã»ã¹å ã¯note.comã®RSSã ããã¡ãŒã«ã®å®å ã¯ã³ãŒãã«èªåã§æžããã¢ãã¬ã¹ã ãã§ãã
æ¿èªåŸãã³ãŒãã®ç»é¢ã«æ»ãã®ã§ãããäžåºŠãâ¶å®è¡ããæŒããŸãã

ã³ãŒãã®ç»é¢ã®äžã®æ¹ã«ãå®è¡ãã°ãã衚瀺ããããå®è¡å®äºãããããšã確èªããŸãã

ãŸããã¹ãã¬ããã·ãŒãã®Cåã«èªåã§URLãå ¥ã£ãŠããããšã確èªããŸããDåã«æåãå ¥ã£ãŠããè¡ãããã°ã該åœè¡ã®Båã®URLã誀ã£ãŠãããããä¿®æ£ãå¿ èŠã§ãã

â»è£è¶³â»
URLã远å ãã1åç®ã¯ãã¡ãŒã«ãéä¿¡ãããªããããªèšå®ã«ããŠãããããååã¯ã¡ãŒã«ãå±ããŸããã
ãã®ããŒã«ã§ã¯ãä»åèšå®ããã¿ã€ãã³ã°ä»¥éã«æŽæ°ãããèšäºã®ã¿ããæ°çããšããŠæ±ã仿§ã ããã§ãã
ïŒåºæºæ¥ãèšå®ãããããšæ¯èŒããŠæŽæ°ããããããå€å¥ãã仿§ã§ã¯ãªãç°¡æçãªããŒã«ã§ããããïŒ
3. GASãæ¥æ¬¡ã§å®è¡ããããã«èšå®ãã
æŽæ°ç¢ºèªãæ¯æ¥å®è¡ãããããã«èšå®ããŸãã
å·ŠåŽã®ã¡ãã¥ãŒãããªã¬ãŒããéããå³äžã®ã+ ããªã¬ãŒã远å ããã¯ãªãã¯ããŸãã

以äžã®ããã«èšå®ããŸãã

å®è¡ãã颿°ãéžæïŒcheckNoteUpdates
ãããã€æã«å®è¡ïŒHead
ã€ãã³ãã®ãœãŒã¹ãéžæïŒæéäž»å°å
æéããŒã¹ã®ããªã¬ãŒã®ã¿ã€ããéžæïŒæ¥ä»ããŒã¹ã®ã¿ã€ããŒ
æå»ãéžæïŒãããã§ãã¯ããŠã»ããæé垯ãèªç±ã«éžæã
å³äžã®ãä¿åããã¯ãªãã¯ããŸãã
ãGoogle hasnât verified this appïŒGoogle ã¯ãã®ã¢ããªãæ€èšŒããŠããŸããïŒãã®ã¡ãã»ãŒãžãåºãã®ã§ããAdvancedããæŒããŠã
ïŒç°å¢ã«ãã£ãŠè±èªã§è¡šç€ºãããããšããããŸãããã¿ã³ã®äœçœ®ã¯åãã§ãïŒ

ãGo to xxxxxïŒunsafeïŒããã¯ãªãã¯ããŸãã

ãSelect allãã«ãã§ãã¯ãå ¥ããŠããContinueããã¯ãªãã¯ããŸãã


ãã®èŠåã¯ãGoogleã審æ»ããŠããªãã¢ããªãã«åºããã®ã§ããä»åã¯ããªãèªèº«ãäœã£ããããªããã䜿ããªãã¹ã¯ãªãããªã®ã§å¯©æ»å¯Ÿè±¡å€ãšããã ãã§ãå±éºãšããæå³ã§ã¯ãããŸããã
æ¿èªèšå®å®äºåŸãããäžåºŠè¿œå ç»é¢ãã§ãã®ã§ãä¿åããã¯ãªãã¯ãã

ããªã¬ãŒã«è¿œå ãããããšã確èªããŸãã

ããã§ãæå®ããæéã«èªåã§æ¯æ¥ãã§ãã¯ãããŠãæŽæ°ãããã°ã¡ãŒã«ã§ãç¥ãããå±ããŸãïŒ
ã³ãŒãã®ç»é¢ã¯ãã¡ãããã¹ãã¬ããã·ãŒããã®ãã®ãããœã³ã³ãéããŠããŠãèªåã§å®è¡ãããŸãïŒïŒ

æŽæ°ããã§ãã¯ãããã¯ãªãšã€ã¿ãŒãå¢ããããå Žåã¯ãã¹ãã¬ããã·ãŒãã®äžçªäžã®è¡ã«è¿œå ããŸãããã ããå®è¡æéã®å¶çŽãããç»é²ã¯æå€§100äººãæšå¥šããŸãã

æŽæ°ãã§ãã¯ãäžèŠã«ãªã£ãå Žåã¯ãè¡ããšåé€ããŠãã ããã
ä»åã¯ãGASã䜿ã£ãæ¥æ¬¡äœæ¥ã®èªååãå ±æããŸããããã®æ¹æ³ã¯ãç¡æã®Googleã¢ã«ãŠã³ãã§å®æœã§ããŸããããæ¯æ¥ã®å®åäœæ¥ãèªååããããå¢ãããŠãããšãææã®Googleã¢ã«ãŠã³ããGoogle Workspaceã®æ¹ãéžæè¢ãåºãããŸãã
éç¥å ãã¡ãŒã«ã ãã§ãªããã£ããã«èšå®ã§ããããStudioãšããæ©èœã§ãæ¯æ¥ãAIã«é¢ãããããã¯ã¹ãèŠçŽããŠéç¥ããŠãã®ãããªã¿ã¹ã¯ãç°¡åã«èªååã§ããŸãã
ããªãŒã©ã³ã¹ã¯ãã¡ãããåäººã®æ¹ã«ãããããã§ããæ©èœããããããããŸããææã§ãããAIã«èª²éãããŠããæ¹ã«ã¯ãæ€èšããŠæã¯ãªãéžæè¢ã ãšæããŸãïŒ
ãå©çšãããŠããªãæ¹ã¯ããã²æ€èšããŠã¿ãŠã¯ãããã§ããããã詳ããã¯ä»¥äžèšäºããåç §ãã ããã
仿¥ã¯ãããŸã§ããŸããã