あきネット

フリーソフトウェアやオープンソースをはじめ、コンピューターやインターネットに関するTIPSや話題を扱います

北のまちから南のまちへと素敵な何かを届けます。
それは、六花かもしれないし、ナナカマドの実かもしれないし、雪の下キャベツかもしれません。

【TIPS】【GNU/Linux】リンクからURLを取り出す

Motivation

リンクを押して飛びたいと思っても、そのリンクがGETで追跡するようにしこまれていることがある。
黙ってCookieでこっそり追跡される気色悪さよりはマシだが、pruneはしたい。

せこい

と言われてもしかたないが

実例

にほんブログ村

こと、八王子の村。
リンククリックをカウントするために追跡する。そういうブログサービスだからしようがないしようっしょ。

[muragon にブログ開設 - あきネット]

(https://link.blogmura.com/out/?ch=01652696&item=000816047232&url=https%3A%2F%2Fakinet.muragon.com%2Fentry%2F1.html)

リンクのURLが、ひ ど い

シェルで、消す

URL デコード

%でコード、じゃなくて、パーセントデコードともいう。

これをシェルでやるのに使うプログラムが意外とわからないで、どこぞのウェブサイトでやっている人は多いと思う。

`nkf --url-input` を使う。日本語漢字フィルター。

$ echo 'https://link.blogmura.com/out/?ch=01652696&item=000816047232&url=https%3A%2F%2Fakinet.muragon.com%2Fentry%2F1.html' | nkf --url-input

結果
https://link.blogmura.com/out/?ch=01652696&item=000816047232&url=https://akinet.muragon.com/entry/1.html

末尾から取り出す

最後の "&" 以下を取り出したい。
村内だけならば、&url= でマッチさせて sed とかで取り出せばいいのだけれど、
一般論として、最後の & 以下を取り出すコードを考えてみる。

`cut` だけだと最初からの順序でしか取り出せないので、最後から数えるにはコツがある。

`rev | cut -d\& -f1 | rev` で、一度ひっくり返してから最初から数えて、もういちどひっくり返す。

ちなみに & はシェルで解釈されるおそれが高いので、エスケープするよ。

$ echo 'https://link.blogmura.com/out/?ch=01652696&item=000816047232&url=https%3A%2F%2Fakinet.muragon.com%2Fentry%2F1.html' | nkf --url-input | rev | cut -d\& -f1 | rev

url=https://akinet.muragon.com/entry/1.html

しあげ

"url=" が要らないので、 'sed' とかでもいいが、この際 'cut' する

$ echo 'https://link.blogmura.com/out/?ch=01652696&item=000816047232&url=https%3A%2F%2Fakinet.muragon.com%2Fentry%2F1.html' | nkf --url-input | rev | cut -d\& -f1 | rev | cut -d= -f2

https://akinet.muragon.com/entry/1.html

もう URL は出ているので、やりたければ `xargs xdg-open` でも `xargs w3m` でもパイプで繋いでやればよい

おわり

単に考えてみただけの記事で、一般に役に立つワンライナーというわけではありません。
それにしても
muragon は コードを書くのがつらいです。
現場からは以上です。