Newsboatの使い方

NewsboatはRSS/Atomフィードリーダーです。端末で軽快に動きます。

* OS:Linux Mint 20.03
* Ver.:newsboat 2.18-2
* 公式HP
https://newsboat.org/releases/2.27/docs/newsboat.html

* 参考リンク
[コマンドラインでrssを閲覧する newsboat](https://k-igrs.hatenadiary.jp/entry/2019/03/18/222643 )


## インストール

```
sudo apt-get install newsboat
```

インストールが終わると次のデレクトリーとファイルができています。

```
~/.newsboat
    cache.db
    config
```


### 稼働確認 エラーメッセージでるか？

urlsを作ってくださいとのメッセージがでます。
イントールが終わった時点ではありません。
```
$ newsboat

newsboat2.18.0を起動中…
設定を読み込み中…完了しました。
キャッシュを読み込み中…完了しました。
/home/hoge/.newsboat/urlsからURLを読み込み中…完了しました。
Error: no URLs configured. Please fill the file /home/hoge/.newsboat/urls with RSS feed URLs or import an OPML file.
```

## urlsというファイルを作成する。

２つ方法があります。

### 直接フィードのリンク先を書き込みする。

urls ファイルの内容   
 
```urls
https://b.hatena.ne.jp/hotentry.rss
https://news.yahoo.co.jp/rss/topics/world.xml
https://news.yahoo.co.jp/rss/topics/domestic.xml
https://news.yahoo.co.jp/rss/topics/business.xml
```

### OPMLファイルを読み込んでフィードのリンク先を書き込みする。

OPMLファイルはRSSで使用する汎用ファイルです。このファイルは他のプログラムで作成します。現在使用しているRSSプログラムがあったら作れるどうか調べてください。

```
$ newsboat -i hoge.opml
Import of hoge.opml finished.
```

OPMLファイルの内容

```
<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
    <head>
        <title>QuiteRSS</title>
        <dateModified>日 4月 24 14:08:07 2022</dateModified>
    </head>
    <body>
        <outline text="QuiteRSS" type="rss" htmlUrl="http://quiterss.org/en/frontpage" xmlUrl="https://quiterss.org/en/rss.xml"/>
        <outline text="はてなブックマーク - 人気エントリー - 総合" type="rss" htmlUrl="https://b.hatena.ne.jp/hotentry/all" xmlUrl="https://b.hatena.ne.jp/hotentry.rss"/>
        <outline text="ライブドアニュース - 主要トピックス" type="rss" htmlUrl="https://news.livedoor.com" xmlUrl="https://news.livedoor.com/topics/rss/top.xml"/>
        <outline text="【海外の反応】 パンドラの憂鬱" type="rss" htmlUrl="http://kaigainohannoublog.blog55.fc2.com/" xmlUrl="http://kaigainohannoublog.blog55.fc2.com/?xml"/>
        <outline text="海外反応！ I LOVE JAPAN" type="rss" htmlUrl="http://blog.livedoor.jp/zzcj/" xmlUrl="http://blog.livedoor.jp/zzcj/index.rdf"/>
        <outline text="Yahoo!ニュース・トピックス - 科学" type="rss" htmlUrl="https://news.yahoo.co.jp/topics/science?source=rss" xmlUrl="https://news.yahoo.co.jp/rss/topics/science.xml"/>
        <outline text="Yahoo!ニュース・トピックス - 経済" type="rss" htmlUrl="https://news.yahoo.co.jp/topics/business?source=rss" xmlUrl="https://news.yahoo.co.jp/rss/topics/business.xml"/>
        <outline text="Yahoo!ニュース・トピックス - 国内" type="rss" htmlUrl="https://news.yahoo.co.jp/topics/domestic?source=rss" xmlUrl="https://news.yahoo.co.jp/rss/topics/domestic.xml"/>
        <outline text="Yahoo!ニュース・トピックス - 国際" type="rss" htmlUrl="https://news.yahoo.co.jp/topics/world?source=rss" xmlUrl="https://news.yahoo.co.jp/rss/topics/world.xml"/>
        <outline text="All About（オールアバウト） [恋愛]" type="rss" htmlUrl="https://rss.allabout.co.jp/aa/latest/ch/relationship/" xmlUrl="https://rss.allabout.co.jp/aa/latest/ch/relationship/"/>
        <outline text="朝日新聞デジタル" type="rss" htmlUrl="http://www.asahi.com/" xmlUrl="http://www.asahi.com/rss/asahi/newsheadlines.rdf"/>
        <outline text="All About（オールアバウト） [人気記事ランキング]" type="rss" htmlUrl="https://rss.allabout.co.jp/aa/ranking/" xmlUrl="https://rss.allabout.co.jp/aa/ranking/"/>
        <outline text="ライフハッカー［日本版］" type="rss" htmlUrl="https://www.lifehacker.jp" xmlUrl="https://www.lifehacker.jp/feed/index.xml"/>
    </body>
</opml>

```

### 画面レイアウト

#### メイン画面 

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23768/5ba9627b-f893-e2fe-7114-e9e64c3a59f7.png)


|キー|機能|
| ------ |------|
|q|閉じる：終了  |
|ENTER |そのフィードの一覧を開く。|
|n|次のフィードの一覧へ移動する。    |
|r|そのフィードの更新を行う。     |
|R|全部のフィードの更新を行う。     |
|A|そのフィードを既読する。     |
|C|全部のフィードの既読する。     |
|/|全部のフィードの検索する。    |
|?|ヘルプ     |



#### 記事の一覧

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23768/9be1645d-2f8d-7e32-49e0-1f588d09d80a.png)


|キー|機能|
| ------ |------|
|q|閉じる  |
|ENTER |その記事を開く。|
|s|その記事を保存する。    |
|r|その記事の更新を行う。（わかりません?）     |
|n|次の未読の記事へ移動する。    |
|A|フィードを既読する。     |
|/|全部のフィードの検索する。    |
|?|ヘルプ     |


* ここで'o'を押しブラウザーでデータを読むことができる。 

#### 記事の内容

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23768/f96faa70-3ba6-6777-0985-44229088cbd5.png)


|キー|機能|
| ------ |------|
|q|閉じる |
|s|この記事を保存する。    |
|o|ブラウザーで開く。     |
|e|コンテンツをダウンロードする。（わかりません?）     |
|?|ヘルプ     |

### configを書いてみる。

```
browser w3m %u
#browser firefox %u

auto-reload yes

bind-key k prev
bind-key j next

color background          white   black
color listnormal          white   black
color listfocus           yellow  blue   bold
color article             white   black
```

サンプルです。ブラウザーはw3mにしています。
画像が見たいときにはw3mで'M'のコマンドを使います。別のブラウザーが開きます。


ここに参考になる物があります。

```
/usr/share/doc/newsboat/contrib/
```

### 起動時オプション

```
ニュースボート2.22
使用法：./ newsboat [-i <file> | -e] [-u <urlfile>] [-c <cachefile>] [-x <command> ...] [-h]
    -e、-export-to-opmlOPMLフィードをstdoutにエクスポートします
    -r、-refresh-on-start開始時にフィードを更新します
    -i、-import-from-opml =<file>OPMLファイルをインポートします
    -u、-url-file =<urlfile><urlfile>からRSSフィードURLを読み取ります
    -c、-cache-file=<cachefile>は<cachefile>をキャッシュファイルとして使用します
    -C、-config-file =<configfile><configfile>から構成を読み取ります
    -X、-vacuumはキャッシュを圧縮します
    -x、-execute =<command>...コマンドのリストを実行します
    -q、-静かな静かなスタートアップ
    -v、-versionバージョン情報を取得します
    -l、-log-level = <loglevel>特定のログレベルでログを書き込みます（有効な値：1〜6）
    -d、-log-file=<logfile>出力ログファイルとして<logfile>を使用します
    -E、-export-to-file=<file>既読記事のリストを<file>にエクスポートします
    -I、--import-from-file =<file><file>から読んだ記事のリストをインポートします
    -h、-helpこのヘルプ
        --cleanup参照されていないアイテムをキャッシュから削除します
```

### Filter Language


[コマンドラインでrssを閲覧する newsboat](https://k-igrs.hatenadiary.jp/entry/2019/03/18/222643 )

「フィードをフィルタリングするには、フィードリストで「F」を押し、フィルター式を入力して、「Enter」を押します。フィルタをクリアするには、「Ctrl-F」を押します。記事リスト内の記事をフィルタリングするには、「F」を押して式を入力し、「Enter」を押します。フィルタのクリアは以前と同じように機能します。両方のダイアログで機能するのは特定の属性のみであることに注意してください。次の表に、使用可能なすべての属性とそのコンテキストを示します。つまり、フィードに属する属性はフィードリストでのみ照合できますが、記事に属する属性は記事リストでのみ照合できます。」

#### 操作（例）
Fを押して、”Filter:"を表示させる。
その後、たとえば”unread_count > 5”と入力する。
読んでいない記事を５件より大きいフィードを表示対象となる。


### Macro Support

参考リンク
[5.13. Macro Support](https://newsboat.org/releases/2.27/docs/newsboat.html#_macro_support)

「複数の操作を実行するには、いわゆる「マクロ」を定義する必要があります。マクロを呼び出すには、ユーザーはマクロプレフィックス（デフォルトでは "、"）を押してから、マクロのキーを押します。いくつかの例で説明する方が簡単です。」

#### 操作（例）

マクロは、configの中に書いてください。zがマクロのキーとなります。
参考にサンプルを書きました。

```
macro z mark-feed-read ; quit ; next-unread ; open
```
* 現在選択されているフィード内のすべての記事を既読にする。
* 前のダイアログに戻ります（コンテキストによって異なります）。
* 次の未読記事のあるフィードにジャンプします。
* フィードを開きます。

説明
記事リストの画面で、全ての記事に対して既読を行い、フィードリストへ戻ります。次の既読のあるフィードを開きます。

命令が書かれています。
参考リンク
[Appendix B: Newsboat Operations](https://newsboat.org/releases/2.27/docs/newsboat.html#:~:text=Newsboat%20Configuration%20Commands-,Appendix%20B%3A%20Newsboat%20Operations,-Appendix%20C%3A%20Podboat)

configのサンプルです。
```
#browser w3m %u
#browser firefox %u
browser /usr/bin/google-chrome-stable %u

auto-reload yes

bind-key k prev
bind-key j next
bind-key SPACE next-unread

bind-key ESC quit
bind-key a mark-feed-read

macro z mark-feed-read ; quit ; next-unread ; open
```

### Filter Language + Macro
* （入力）  F    unread_count > 5
全てフィードから5件以上の記事があるものを拾い出す。


５件以上あるフィードが出たら、上から順番に読んでいく。
一つのフィードを読む。

* （入力） , z 
次のフィードを読む。

このような使い方をすると効率がよいです。