📘

ObsidianのDaily Notesに毎日のニュースを書き込むようにした話

2024/12/10に公開
2

Obsidianは、Markdown形式でノートを整理する強力なツールであり、個人的な知識管理や日々のタスク管理に非常に便利です。今回、私はObsidianのプラグインである「Daily Notes」と「Templater」を組み合わせ、毎日最新のニュースを自動的に書き込む方法を実現しました。

方法

1. Obsidianのプラグインを使ってDaily Notesを作成

Obsidianには「Periodic Notes」というプラグインがあり、これを使うことで、毎日のノート(Daily Notes)を自動で作成できます。Open todayというボタンを押して、毎日決まったテンプレートに基づいてノートを作成しています。テンプレートを登録するためにはCommunity plugin>>Periodic Notes>>Daily Notes>>Daily Note Templateにテンプレートを登録する必要があります。

2. Templaterを使用してJavaScriptを動作させる

ObsidianにはTemplaterという強力なプラグインがあります。Templaterは、Obsidian内でJavaScriptを使って動的なテンプレートが作れます。

Obsidianでニュースを自動的に挿入

Templaterを使用して、このJavaScript関数を毎日のノート作成時に実行し、その結果をノートに追加します。具体的には、以下のようにテンプレートファイルを設定します。<%* %>ここがTemplaterで動かしているJavaScriptの部分です。

# 🌟 Daily Template - {{date:YYYY-MM-DD}} 

## {{date:YYYY年MM月DD日(ddd)hh:mm}}

---

## 📺 News & Updates
<%* 
async function getYahooNews() {
  const rssUrl = "https://news.yahoo.co.jp/rss/topics/top-picks.xml";

  try {
    //Templaterの関数を使ってrequestを送る
    const response = await tp.obsidian.requestUrl(rssUrl);
    if (response.status != 200) {
      return "ニュースの取得に失敗しました。";
    }

    const xml = await response.text;

    // ニュースアイテムを抽出
    const items = xml.match(/<item>([\s\S]*?)<\/item>/g);
    if (items && items.length > 0) {
      let newsList = "### 今日のYahooニュース\n\n";
      for (let i = 0; i < Math.min(items.length, 10); i++) {
        const titleMatch = items[i].match(/<title>(.*?)<\/title>/);
        const linkMatch = items[i].match(/<link>(.*?)<\/link>/);

        const title = titleMatch ? titleMatch[1] : "タイトル不明";
        const link = linkMatch ? linkMatch[1] : "#";

        newsList += `- [${title}](${link})\n`;
      }
      return newsList;
    } else {
      return "ニュースが見つかりませんでした。";
    }
  } catch (error) {
    return `エラーが発生しました: ${error.message}`;
  }
}
const news = await getYahooNews();
tR += news;
%>



---

## 🔥 Today’s Mood & Reflections

---

## ✅ Todo List 
- **今日の達成目標** 🎯:
  - [ ] (最優先タスク)
  - [ ] (重要タスク)
  - [ ] (余裕があればやりたいこと)

---

## 📖 Daily Diary
**今日感じたこと・気づいたこと・思い出したこと**  
- 

---

## ✍️ Quick Memo
**アイデアや気づき、メモしたいこと**  
- 
- 

---

## 🎥 Watch Later
(気になる動画や映画)
- 
- 

---

tags: #{{date:YYYY-MM}} #daily

ここでOpen TodayでDailyが生成されたときにニュースを取得するためにTrigger Templater on new file creationをONにしてください。

最後に

ちなみにデスクトップ版だけではなく、モバイル版のObsidianでも実行できました。
かなりコアな内容ですが、ObsidianでDailyを書いている人の参考になれば幸いです。

追記:2024/12/13

Templaterのtp.obsidian.requestUrl()を使うとcorsのエラーなしにrequestが遅れることが判明しました!
つきましては,記事の内容をtp.obsidian.requestUrl()を使った方法へと大幅に修正しています.コメントありがとうございました!

参考文献

Discussion

unokunok

私もやってみたくて利用させていただきました。
tp.obsidiaon.requestUrl というのがあるので、テンプレートから tp を渡してユーザ関数内で cors エラーにならずに取得できました。
お試しください。

		const response = await tp.obsidian.requestUrl(rssUrl);
		if (response.status !== 200) {
			return "ニュースの取得に失敗しました。";
		}
		const xml = response.text;
kinnkinnkinnkinn

コメントありがとうございます!
tp.obsidian.requestUrlを使うとこちらもcorsのエラーなしに実行できました!記事の内容をtp.obsidian.requestUrlを使った方法に修正しておきますね!