井戸端コマンド
井戸端閲覧支援のシェルスクリプト
wget と jq が必要
試用
$ wget -q -O - https://scrapbox.io/api/code/villagepump/井戸端コマンド/ido.sh | bash
ダウンロード
$ wget -q https://scrapbox.io/api/code/villagepump/井戸端コマンド/ido.sh
使い方
wget とjq のコマンドパスを環境に合わせてフルパスで指定する
スクリプトに実行権限をつける
$ chmod +x ido.sh
コマンド名は ido.sh より ido にしたほうがよい
コマンド入力のタイプ数を減らす
$ ./ido.sh count
ページ総数を表示
$ ./ido.sh list
ページタイルのリストを表示
$ ./ido.sh text
直近の編集されたページを表示
$ ./ido.sh text 井戸端
ページ名を直接指定できる
$ ./ido.sh text Scrapboxが合わない人 Scrapboxが合わない企業
ページ名は複数指定できる
$ ./ido.sh today
今日の日付の井戸端日記を表示する
$ ./ido.sh hamo
ハモ
code:ido.sh
#!/bin/bash
#
# 井戸端閲覧支援スクリプト
# copyright 2023 s.suto
# CC-BY 4.0
# Linux での設定
WGET='/usr/bin/wget'
JQ='/usr/bin/jq'
#
# 例えばMacならこうなる
# WGET='/opt/homebrew/bin/wget'
# JQ='/opt/homebrew/bin/jq'
ProjectName="villagepump"
Skip=4
Limit=100
cmdname=basename $0
function usage()
{
echo "Usage: ${cmdname} today|text|json|count|list|hamo" 1>&2
echo "使い方" 1>&2
echo "ido" 1>&2
echo " usage と同じ" 1>&2
echo "ido usage" 1>&2
echo " 使い方を表示" 1>&2
echo "ido count" 1>&2
echo " ページ総数を表示" 1>&2
echo "ido list" 1>&2
echo " ページタイルのリストを表示" 1>&2
echo " 表示数はシェル変数 \$Limit で指定" 1>&2
echo "ido text [PageTitle PageTitle...]" 1>&2
echo " ページタイトル(PageTitle)を指定して、内容をテキスト形式で表示" 1>&2
echo " ページタイトルを指定しない場合は、直近に更新されたページをひとつ表示する" 1>&2
echo "ido json [PageTitle PageTitle...]" 1>&2
echo " ページタイトル(PageTitle)を指定して、json形式で表示" 1>&2
echo " ページタイトルを指定しない場合は、直近に更新されたページをひとつ表示する" 1>&2
echo "ido hamo" 1>&2
echo " ハモのページを表示" 1>&2
echo "ido today" 1>&2
echo " 今日の井戸端日記ページを表示" 1>&2
echo "ido project" 1>&2
echo " プロジェクト名(シェル変数 \$ProjectName )を表示" 1>&2
echo "ido skip" 1>&2
echo " スキップ数(シェル変数 \$Skip )を表示" 1>&2
echo " 通常は、ピン留めページ数を指定する" 1>&2
echo "ido limit" 1>&2
echo " リミット数(シェル変数 \$Limit )を表示" 1>&2
echo " 1000以上は指定しても 1000 になる" 1>&2
echo "ido wget" 1>&2
echo " wgetコマンドのパスを表示" 1>&2
echo "ido jq" 1>&2
echo " jqコマンドのパスを表示" 1>&2
exit 1
}
# APIを叩いて、ページ総数を表示する
function count()
{
$WGET -q -O - https://scrapbox.io/api/pages/$ProjectName\?limit=1 | $JQ -r '.count'
exit 0
}
# APIを叩いて、ページリストを表示する
function list()
{
$WGET -q -O - https://scrapbox.io/api/pages/$ProjectName\?limit=$Limit\&skip=$Skip | $JQ -r '.pages[].title'
exit 0
}
# APIを叩いて、ページ内容を表示する
function text()
{
if $# -eq 0 ; then
PageTitle=$($WGET -q -O - https://scrapbox.io/api/pages/$ProjectName\?limit=1\&skip=$Skip | $JQ -r '.pages[].title'| $JQ -Rr '@uri')
$WGET -q -O - https://scrapbox.io/api/pages/$ProjectName/$PageTitle/text
else
for arg in $@
do
PageTitle=$(echo $arg | $JQ -Rr '@uri')
$WGET -q -O - https://scrapbox.io/api/pages/$ProjectName/$PageTitle/text
done
fi
exit 0
}
# APIを叩いて、ページ内容をJSONで表示する
function json()
{
if $# -eq 0 ; then
PageTitle=$($WGET -q -O - https://scrapbox.io/api/pages/$ProjectName\?limit=1\&skip=$Skip | $JQ -r '.pages[].title'| $JQ -Rr '@uri')
$WGET -q -O - https://scrapbox.io/api/pages/$ProjectName/$PageTitle | $JQ
else
for arg in $@
do
PageTitle=$(echo $arg | $JQ -Rr '@uri')
$WGET -q -O - https://scrapbox.io/api/pages/$ProjectName/$PageTitle | $JQ
done
fi
exit 0
}
subcommand="$1"
shift
case $subcommand in
usage)
usage
;;
hamo)
text ハモ
;;
today)
text $(date "+%Y/%m/%d")
;;
text)
text "$@"
;;
json)
json "$@"
;;
count)
count
;;
list)
list
;;
project)
echo "ProjectName: $ProjectName"
;;
skip)
echo "Skip: $Skip"
;;
limit)
echo "Limit: $Limit"
;;
wget)
echo "WGET: $WGET"
$WGET --version
;;
jq)
echo "JQ: $JQ"
$JQ --version
;;
*)
usage
;;
esac
exit 0
# EOF
https://img.shields.io/badge/井戸端コマンド-4EAA25.svg?logo=gnubash&style=for-the-badge&logoColor=white