[[Obsidian Web Clipper/模板|Web Clipper 範本]]可以使用變數,從頁面中自動預填資料到範本中。變數可以用於**筆記名稱**、**筆記位置**、**屬性**和**筆記內容**。變數也可以使用[[過濾設定|過濾設定]]進行修改。
使用 [[Obsidian Web Clipper 簡介|Web Clipper]] 擴充功能中的 `...` 圖示,即可存取目前頁面的變數,以供範本使用。你可以使用五種類型的變數:
- [[變數#預設變數|預設變數]]
- [[變數#提示變數|提示變數]]
- [[變數#Meta 變數|Meta 變數]]
- [[變數#選擇器變數|選擇器變數]]
- [[變數#Schema.org 變數|Schema.org 變數]]
## 預設變數
預設變數會根據頁面內容自動產生。這些變數通常適用於大多數網站。
主要的內容變數是 `{{content}}`,它包含文章內容、[[螢光筆|反白內容]],或者如果頁面上有選取的文字,則包含選取的文字。請注意,`{{content}}` 會嘗試擷取頁面的主要內容,但這不一定總是你想要的結果。在這種情況下,你可以使用其他預設變數或選擇器變數來擷取你需要的內容。
| 變數 | 說明 |
| ------------------- | -------------------------------------------------------------------------------------- |
| `{{author}}` | 頁面作者 |
| `{{content}}` | 文章內容、[[螢光筆\|反白內容]]或選取的文字,Markdown 格式 |
| `{{contentHtml}}` | 文章內容、[[螢光筆\|反白內容]]或選取的文字,HTML 格式 |
| `{{date}}` | 目前日期,可使用 `date` 過濾設定進行格式化 |
| `{{description}}` | 說明或摘要 |
| `{{domain}}` | 網域 |
| `{{favicon}}` | Favicon URL |
| `{{fullHtml}}` | 完整頁面內容的未處理 HTML |
| `{{highlights}}` | 含文字和時間戳記的[[螢光筆\|反白內容]] |
| `{{image}}` | 社群分享圖片 URL |
| `{{published}}` | 發佈日期,可使用 `date` 過濾設定進行格式化 |
| `{{selection}}` | 選取的文字,Markdown 格式 |
| `{{selectionHtml}}` | 選取的文字,HTML 格式 |
| `{{site}}` | 網站名稱或發佈者 |
| `{{title}}` | 頁面標題 |
| `{{time}}` | 目前日期和時間 |
| `{{url}}` | 目前 URL |
| `{{words}}` | 字數統計 |
## 提示變數
提示變數利用語言模型,透過自然語言來擷取和修改資料。提示變數需要啟用並設定[[解讀器|解讀器]]。
提示變數使用 `{{"a summary of the page"}}` 語法。提示周圍的雙引號很重要,它可以將提示與預設變數區分開來。提示回應可以使用[[過濾設定]]進行後處理,例如 `{{"a summary of the page"|blockquote}}`。
### 何時使用提示變數
提示變數的優點是極其靈活且易於撰寫,但也有一些取捨:它們執行速度較慢,且根據你選擇的[[解讀器#模型|供應商]]不同,可能有費用和隱私方面的考量。
與其他變數類型不同,提示變數需要由外部語言模型處理,因此它們只有在[[解讀器|解讀器]]執行後才會被替換。
如果你想擷取的資料具有一致的格式,可以用其他變數類型擷取,那麼最好*不要*使用提示變數。
另一方面,如果你想擷取的資料在不同網站上格式*不一致*,提示變數就很有用。例如,你可以建立一個用來儲存書籍的[[Obsidian Web Clipper/模板|範本]],不限定特定的書籍網站。像 `{{"author of the book"}}` 這樣的提示變數可以在任何書籍網站上運作,而選擇器變數通常只適用於特定網站。
### 範例
提示可以使用幾乎任何自然語言查詢。根據你使用的模型,提示可以跨語言查詢或翻譯資料。
- `{{"a three bullet point summary, translated to French"}}` 擷取頁面的三個重點摘要,並翻譯成法文。
- `{{"un resumé de la page en trois points"}}` 使用法文提示擷取三個重點。
提示可以將頁面內容轉換為 JSON,並使用[[過濾設定|過濾設定]]進行操作。例如:
```
{{"return a JSON object for each tweet, that includes the author, tweet_text, date in YYYY-MM-DD format, and images array (if there are any)"|map:tweet => ({text: tweet.tweet_text, author: tweet.author, date: tweet.date})|template:"${text}\n— [[@${author}]], [[${date}]]\n"}}
```
## Meta 變數
Meta 變數允許你從頁面中的 [meta 元素](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta)擷取資料,包括用於填充社群分享預覽的 [Open Graph](https://ogp.me/) 資料。
- `{{meta:name}}` 返回指定名稱的 meta name 標籤的內容,例如 `{{meta:name:description}}` 用於 `description` meta 標籤。
- `{{meta:property}}` 返回指定屬性的 meta property 標籤的內容,例如 `{{meta:property:og:title}}` 用於 `og:title` meta 標籤。
## 選擇器變數
選擇器變數允許你使用 [CSS 選擇器](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_selectors/Selectors_and_combinators)從頁面上的元素擷取文字內容。
語法為 `{{selector:cssSelector?attribute}}`,其中 `?attribute` 是選用的。如果未指定屬性,則返回元素的文字內容。你也可以使用 `{{selectorHtml:cssSelector}}` 來取得元素的 HTML 內容。選擇器變數通常在具有一致 HTML 結構的特定網站或一組網站上效果最好。
- `{{selector:h1}}` 返回頁面上任何 `h1` 元素的文字內容。
- `{{selector:.author}}` 返回頁面上任何 `.author` 元素的文字內容。
- `{{selector:img.hero?src}}` 返回具有 `hero` 類別的圖片的 `src` 屬性。
- `{{selector:a.main-link?href}}` 返回具有 `main-link` 類別的錨點標籤的 `href` 屬性。
- `{{selectorHtml:body|markdown}}` 返回 `body` 元素的完整 HTML,使用 `markdown` [[過濾設定#HTML 處理|過濾設定]]轉換為 Markdown。
- 如果你需要更高的精確度,支援巢狀 CSS 選擇器和組合器。
- 如果多個元素符合選擇器,會返回一個陣列,你可以使用 `join` 或 `map` 等[[過濾設定#陣列與物件|陣列和物件過濾設定]]進行處理。
選擇器變數也可以直接在[[邏輯|範本邏輯]]中使用:
- 在迴圈中:`{% for comment in selector:.comment %}...{% endfor %}`
- 在條件式中:`{% if selector:.premium-badge %}...{% endif %}`
- 在變數賦值中:`{% set items = selector:.list-item %}`
## Schema.org 變數
Schema 變數允許你從頁面上的 [schema.org](https://schema.org/) JSON-LD 擷取資料。Schema.org 資料也可以用來自動[[Obsidian Web Clipper/模板#Schema.org matching|觸發範本]]。
- `{{schema:@Type:key}}` 返回 schema 中該鍵的值。
- `{{schema:@Type:parent.child}}` 返回巢狀屬性的值。
- `{{schema:@Type:arrayKey}}` 返回陣列中的第一個項目。
- `{{schema:@Type:arrayKey[index].property}}` 返回陣列中指定索引位置的項目。
- `{{schema:@Type:arrayKey[*].property}}` 返回陣列中所有項目的特定屬性。
你也可以使用不指定 schema 類型的簡寫表示法:
- `{{schema:author}}` 會匹配在任何 schema 類型中找到的第一個 `author` 屬性。
- `{{schema:name}}` 會匹配在任何 schema 類型中找到的第一個 `name` 屬性。
當你不知道或不在意特定的 schema 類型,但知道你要尋找的屬性名稱時,這種簡寫特別有用。
巢狀屬性和陣列存取在有或沒有指定 schema `@Type` 的情況下都可以使用:
- `{{schema:author.name}}` 會找到第一個 `author` 屬性,然後存取其 `name` 子屬性。
- `{{schema:author[0].name}}` 會存取作者陣列中第一位作者的 `name`。
- `{{schema:author[*].name}}` 會返回所有作者名稱的陣列。