Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dominikpieper/obsidian-readitlater


https://github.com/dominikpieper/obsidian-readitlater

hacktoberfest obsidian-md obsidian-plugin

Last synced: 1 day ago
JSON representation

Awesome Lists containing this project

README

        

# ReadItLater Plugin for Obsidian

## Table of contents

- [Introduction](#introduction)
- [Content Types](#content-types)
- [Youtube](#youtube)
- [Youtube Channel](#youtube-channel)
- [Vimeo](#vimeo)
- [Bilibili](#bilibili)
- [Twitter](#twitter)
- [Stack Exchange](#stack-exchange)
- [Mastodon](#mastodon)
- [TikTok](#tiktok)
- [Website URL](#website-url)
- [Text Snippet](#text-snippet)
- [API](#api)

## Introduction

Save the web with ReadItLater plugin for Obsidian. Archive web pages for reading later, referencing in your second brain or for other flexible use case Obsidian provides.

ReadItLater can do a lot more than converting web pages to markdown. For every content type there is specific template with carefully selected variables to ease up your archiving process.

### What makes ReadItLater plugin great?

- Simple, but powerful template engine
- Carefully selected predefined template variables to straightforward archiving process
- Compatibility with Obsidian iOS and Android apps
- Downloading images from articles to your Vault
- Batch processing of URLs list

### How to use ReadItLater plugin?

To create single note you can either click on the plugin ribbon icon, select `ReadItLater: Create from clipboard` from command palette or click on `ReadItLater` shortcut in context or share menu. You can also create multiple notes from batch of URLs, delimited by selected delimiter in plugin settings using `ReadItLater: Create from batch in clipboard` command.

If you want just add content to existing note, you can use `ReadItLater: Insert at the cursor position` command to insert content after the current cursor position.

## Template engine

ReadItLater provides for every content type dedicated template that can be edited in plugin settings.

### Variables

Variables are rendered in template using familiar syntax `{{ content }}`. Nested data types can be accessed using dot notation `{{ author.name }}`.

### Filters

Variables output can be modified using filters. Filters are separated by `|` symbol. Filters can be chained, so output of the previous is passed to the next.

blockquote

Adds quote prefix to each line of value.

capitalize

Modifies first character to uppercase and others to lowercase.

```
{{ 'hello world'|capitalize}}

outputs: Hello world
```

numberLexify

Converts number to lexified format.

```
{{ 12682|numberLexify}}

outputs: 12.6K
```

lower

Converts value to lowercase.

```
{{ 'Hello World'|lower}}

outputs: hello world
```

replace

Replaces all occurrences in input value.

```
{{ 'Hello world'|replace('o') }}

outputs: Hell wrld
```

upper

Converts value to uppercase.

```
{{ 'Hello World'|upper}}

outputs: HELLO WORLD
```

## Inbox and Assets directories

You can use template variables in `Inbox dir` and `Assets dir` settings to better distribute content in your Vault.

| Directory template variable | Description |
| --------------------------- | -------------------------------------------------- |
| date | Current date in format from plguin settins |
| fileName | Filename of new note |
| contentType | Slug of detected content type from plugin settings |

## Content Types

Structure of note content is determined by URL. Currenty plugin supports saving content of websites and embedding content from multiple services. Each content type has title and note template with replacable variables, which can be edited in plugin settings.

Available content types are ordered by URL detection priority.

### Youtube

| Title template variable | Description |
| ----------------------- | ------------------------------------------- |
| title | Video title |
| date | Current date in format from plugin settings |

| Content template variable | Description |
| ------------------------- | -------------------------------------------------------------------- |
| videoTitle | Video title |
| date | Current date in format from plugin settings |
| videoDescription | Video description |
| videoURL | Video URL on Youtube.com |
| videoId | Video ID |
| videoPlayer | Embeded player generated by plugin |
| channelId | Channel ID |
| channelName | Channel name |
| channelURL | Channel URL on Youtube.com |
| videoThumbnail | Video thumbnail image URL |
| videoChapters | List of video chapters with linked timestamps |
| videoPublishDate | Video plublish date formatted in content format from plugin settings |
| videoViewsCount | Video views count |

Parsing of HTML DOM has its limitations thus additional data can be fetched only from [Google API](https://developers.google.com/youtube/v3/getting-started). Retrieved API key can be set in plugin settings and then plugin will use the Google API for fetching data.

| Content template variable | Description |
| ------------------------- | -------------------------------------------------------------------- |
| videoDuration | Video duration in seconds |
| videoDurationFormatted | Formatted video duration (1h 25m 23s) |
| videoTags | Formatted list of tags delimited by space |

### Youtube Channel

| Title template variable | Description |
| ----------------------- | -------------------------------------------- |
| title | Channel title. |
| date | Current date in format from plugin settings. |

| Content template variable | Description |
| ------------------------- | ---------------------------------------------------- |
| date | Current date in format from plugin settings. |
| channelId | Channel ID. |
| channelTitle | Channel title. |
| channelDescription | Channel description. |
| channelURL | Channel URL on Youtube.com. |
| channelAvater | URL of channel's avatar (thumbnail) image. |
| channelBanner | URL of channel's banner image. |
| channelSubscribersCount | The number of subscribers that the channel has. |
| channelVideosCount | The number of public videos uploaded to the channel. |
| channelVideosURL | URL to channel's videos on Youtube.com |
| channelShortsURL | URL to channel's shorts on Youtube.com |

### Vimeo

| Title template variable | Description |
| ----------------------- | ------------------------------------------- |
| title | Video title |
| date | Current date in format from plugin settings |

| Content template variable | Description |
| ------------------------- | ------------------------------------------- |
| videoTitle | Video title |
| date | Current date in format from plugin settings |
| videoURL | Video URL on Vimeo.com |
| videoId | Video ID |
| videoPlayer | Embeded player generated by plugin |
| channelName | Channel name |
| channelURL | Channel URL on Vimeo.com |

### Bilibili

| Title template variable | Description |
| ----------------------- | ------------------------------------------- |
| title | Video title |
| date | Current date in format from plugin settings |

| Content template variable | Description |
| ------------------------- | ------------------------------------------- |
| videoTitle | Video title |
| date | Current date in format from plugin settings |
| videoURL | Video URL on Bilibili.com |
| videoId | Video ID |
| videoPlayer | Embeded player generated by plugin |

### X.com (Twitter)

Parser use [X Publish API](https://publish.twitter.com/) to fetch data.

| Title template variable | Description |
| ----------------------- | ------------------------------------------- |
| tweetAuthorName | Post author name |
| date | Current date in format from plugin settings |

| Content template variable | Description |
| ------------------------- | ------------------------------------------------------------------ |
| tweetAuthorName | Post author name |
| date | Current date in format from plugin settings |
| tweetURL | Post URL on X.com |
| tweetContent | Post content |
| tweetPublishDate | Post publish date formatted in content format from plugin settings |

### Stack Exchange

| Title template variable | Description |
| ----------------------- | ------------------------------------------- |
| title | Question title |
| date | Current date in format from plugin settings |

***Note template variables***

| Content template variable | Description |
| ------------------------- | ------------------------------------------- |
| date | Current date in format from plugin settings |
| questionTitle | Question title |
| questionURL | Question URL on selected StackExchange site |
| questionContent | Question content |
| authorName | Question author name |
| authorProfileURL | Question author profile URL |
| topAnswer | Formatted first answer |
| answers | Formatted other answers |

***Answer template variables***

| Content template variable | Description |
| ------------------------- | ------------------------------------------- |
| date | Current date in format from plugin settings |
| answerContent | Answer content |
| authorName | Answer author name |
| authorProfileURL | Answer author profile URL |

### Mastodon

| Title template variable | Description |
| ----------------------- | ------------------------------------------- |
| tootAuthorName | Status author name |
| date | Current date in format from plugin settings |

| Content template variable | Description |
| ------------------------- | ------------------------------------------- |
| tootAuthorName | Status author name |
| date | Current date in format from plugin settings |
| tootURL | Status URL on selected Mastodon instance |
| tootContent | Status content |

If enabled in plugin settings, you can fetch also replies.

***Reply template variable***

| Content template variable | Description |
| ------------------------- | ------------------------------------------- |
| tootAuthorName | Reply author name |
| tootURL | Reply URL on selected Mastodon instance |
| tootContent | Reply content |

### TikTok

| Title template variable | Description |
| ----------------------- | ------------------------------------------- |
| authorName | Video author name |
| date | Current date in format from plugin settings |

| Content template variable | Description |
| ------------------------- | ------------------------------------------- |
| videoDescription | Video description |
| date | Current date in format from plugin settings |
| videoURL | Video URL on TikTok.com |
| videoId | Video ID |
| videoPlayer | Embeded player generated by plugin |
| authorName | Author name |
| authorURL | Author profile URL on TikTok.com |

### Website URL

Will be parsed to readable form using [Mozilla Readability](https://github.com/mozilla/readability) and then converted to markdown. In case website content is marked by [Readbility](https://github.com/mozilla/readability) as not readable, empty note with URL will be created.

If enabled, images will be downloaded to folder (default is `ReadItLater Inbox/assets`) configured in plugin settings. (Supported only on desktop for now)

| Title template variable | Description |
| ------------------------| ---------------------------------------- |
| title | Article title from `` HTML tag |
| date | Current date in format from plugin settings |

| Content template variable | Description |
|---------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| articleTitle | Article title from `` HTML tag |
| articleURL | Article URL |
| articleReadingTime | Estimated reading time in minutes by Readbility.js |
| articleContent | Article content |
| date | Current date in format from plugin settings |
| previewURL | Aritlce preview image URL parsed from [OpenGraph](https://ogp.me/) or [Twitter](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/markup) image `` property |
| publishedTime | Article publish time parsed from [OpenGraph](https://ogp.me/) `` property or [Schema.org](https://schema.org/) JSON and formatted in content format from plugin settings |

### Text Snippet

If your clipboard content is not recognized by any of above parsers plugin will create note with unformatted clipboard content.

| Title template variable | Description |
| ------------------------| ------------------------------------------- |
| date | Current date in format from plugin settings |

| Content template variable | Description |
| ------------------------- | ------------------------------------------- |
| content | Clipboard content |
| date | Current date in format from plugin settings |

## API

To invoke functionality from other plugins we provide an API. You can access it via `this.app.plugins.plugins['obsidian-read-it-later'].api` which is an instance of `ReadItLaterAPI` class defined in [src/ReadItLaterApi.ts](https://github.com/DominikPieper/obsidian-ReadItLater/blob/master/src/ReadItLaterApi.ts).