前置き
今日は第32回シェル芸勉強会のQ6です。
第32回シェル芸勉強会の問題は次のURLにあります。
【問題のみ】jus共催 第32回全くインスタ映えしないシェル芸勉強会 | 上田ブログ
思考を忠実にアウトプットすることを目標にしています。
解答1
yes 'curl -s https://twitter.com/nogiro_iota | grep nogiro_iota/status | sed 3\!d' | sh | awk 'NR!=1&&p!=$0{print "んほぉ!";fflush()}{p=$0}'
解説
まずツイッターを見たらどうなるか知らないと話にならないので、curl
かwget
で雑に取得します。(結果は長すぎるのでここには記載しません。)
curl -s https://twitter.com/nogiro_iota | less
眺めていると、 <user id>/status/
でgrep
すると、ツイートのIDを含む文字列が拾って来れそうです。
$ curl -s https://twitter.com/nogiro_iota | grep nogiro_iota/status | head -n 3 data-permalink-path="/nogiro_iota/status/873701498311516160" <a href="/nogiro_iota/status/873701498311516160" class="tweet-timestamp js-permalink js-nav js-tooltip" title="17:40 - 2017年6月10日" data-conversation-id="873701498311516160"><span class="_timestamp js-short-timestamp " data-aria-label-part="last" data-time="1497141644" data-time-ms="1497141644000" data-long-form="true">6月11日</span></a> data-permalink-path="/nogiro_iota/status/939747564152168450"
上記は、3行だけ抜き出していますが、data-permalink-path
で始まる行と、ツイート時刻を表示する行との2列になっています。
最新のツイートIDがわかれば、ツイートがあったかはわかるので3行目を抜き出します。
なぜ3行目かと言うと、ツイートを固定していると、1つ目のツイートは新規ツイートがあっても更新されないからです。
現にツイートを固定している私のアカウントだと、(先程から気になっている方もおられるかも知れませんが、)1行目のIDは873701498311516160
で、2行目は939747564152168450
になっていて、最初に表示されるツイートはだいぶ前のものです。
$ curl -s https://twitter.com/nogiro_iota | grep nogiro_iota/status | sed 3\!d data-permalink-path="/nogiro_iota/status/939747564152168450"
あとは、定期的にアクセスして、取得されたものが変わったときに出力します。
yes 'curl -s https://twitter.com/nogiro_iota | grep nogiro_iota/status | sed 3\!d' | sh | awk 'NR!=1&&p!=$0{print "んほぉ!";fflush()}{p=$0}'
上記は、これまでのコマンドを伝家の宝刀yes
で大量に作って実行(sh
)し、awk
で結果が異なっているかを判定しています。
(結果が異なっていることの判定にuniq
が使えるか昔試しましたが、パイプを繋ぐとバッファリングされて、無効化する方法がわからなかったです。。。)