プログラミング

ブログの写真貼り付けを究極的に楽にするWSL Bashスクリプト for ShareX

僕は基本的にブログに画像は貼りません。面倒だからです。

ブログで一番面倒な作業は、画像の貼り付けでしょう。ブロガー経験者なら誰もが、文字書くより画像ドロップしてアップロードして貼り付けしてやる作業のが面倒だということはご存知かと思う。

と、いうことは愚かにも、僕がまだアフィリエイトで暮らしていこうと決意していた若き日、すでに対策を講じていた。
このブログを見てくれたことがある方なら気づいているかもしれないが、僕のブログの画像は他のサイトのそれとはちょっと違う。

普通ワードプレスサイトと言うと、画像は大体、/wp-content/に入る。ので、画像を新しいタブで開いてURLを確認してみると、そうなってることがほとんどだ。

しかし僕は、shareXを用いて、画像サーバーを用意してそこに自動アップロードし、そのURLをmarkdown形式で貼り付け、wordpressへアップロードするという手間を省くことに成功した。

速度については、エックスサーバーの同一サーバー上なので問題にはならない。現に、ページ読み込み速度は快調である。

で、しかし。それでも、sharexは欠点がある。
普通自動でクリップボードに貼付けされるURLが貼付けされない場合がある。まぁバグ、または競合だろう。

それに、まだ効率化できそうな点はある。…それらの点をまとめて1コマンドでできるようにしたのが、以下である。

getSharexs(){

  ARG1=${1:-1}

  find "/mnt/c/Users/ifgm2/OneDrive/ドキュメント/ShareX/Screenshots/" -printf "%T+ %p\n" |\
   sort -r |\
    sed -Ee "s/^.*(\/mnt.*\.(jpg|png|gif|mp4))/\1/g" |\
     sed -Ee "s/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}.*(\/|[0-9]{1,2})$//g" |\
      sed -r '/^\s*$/d' |\
        head -n $ARG1 |\
          sed -Ee "s/.*$(date +"%Y")-$(date +"%m").(.*)/https:\/\/yuis.xsrv.jp\/images\/ss\/\1/g" |\
            tac |\
              if [ -z ${2+x} ]; then
                sed -Ee "s/^(.*)$/\!\[\1\]\(\1\)/g"
              else
                sed -Ee "s/^(.*)$/\!\[$2\]\(\1\)/g"
              fi

}

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_c4441713-49a9-4401-bebf-6b983baf302c.png

これが何ができるかというと、複数枚の画像をとっても、それを撮影順にしてmarkdownとしてコピーすることができる。というもの。

例えば,”windows 10のpython3のインストール方法”という記事を書くとして、スクリーンショットを8枚撮影したとする。
普通にやるなら、その8枚を順番にatomに貼り付けて、markdownにして、文章を挿入していくわけだが…

それなら、getSharexs 8 "how-to-install-python3-on-windows10" | clipなどとすればいいわけ。

簡単ですね。

画像って実はめっちゃSEOの要なので、その画像をどれだけストレスフリーに処理できるかって、結構重要です。

蛇足ですが、sharexって動画キャプチャーもできるんですよね。先日知ったのですが。画質も自由自在だし。ホットキーあるし。透かしもないし。
50ドル払わなくてよかった。

追記

半年以上前に公開してたつもりが公開されていなかったので公開しました。現在はバージョンアップして以下のようなスクリプトになっています。

タイトル文字列を指定できるのと、最新n個を取得するというように取得数を指定できるようになってます。

getSharexes(){

  : getSharex [number headn] [string title]

  ARG1=${1:-1}

  find "/mnt/c/_sharex/Screenshots/" -printf "%T+ %p\n" |\
   sort -r |\
    sed -Ee "s/^.*(\/mnt.*\.(jpg|png|gif|mp4))/\1/g" |\
     sed -Ee "s/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}.*(\/|[0-9]{1,2})$//g" |\
      sed -r '/^\s*$/d' |\
        head -n $ARG1 |\
          sed -Ee "s/.*$(date +"%Y")-$(date +"%m").(.*)/https:\/\/yuis.xsrv.jp\/images\/ss\/\1/g" |\
            tac |\
              if [ -z ${2+x} ]; then
                sed -Ee "s/^(.*)$/\!\[\1\]\(\1\)/g"
              else
                sed -Ee "s/^(.*)$/\!\[$2\]\(\1\)/g"
              fi


}