NO IMAGE

「いいね!」ボタンの追加をスクリプトで簡略化

20131009h本日、「いいね!」ボタンを「勝手な書評」と「医学に関する津軽弁」のページにも追加しました。

前回は、「いいね!」ボタンを「医院のひとこま」と「雑記帳」のページに関して追加しました。

その際、秀丸エディタの「grepして置換」を使用したのですが、その後のリンク情報の修正は、一ファイルづつ開いて検索置換えで手直ししたので、非常に疲れました。今回はその修正作業を、シェルスクリプトで簡略化することが出来たので、覚え書きです。

まずは、「勝手な書評」ページの場合

フォルダ \09_syohyou 内に存在する記事HTMLファイル数を、エクスプローラで確認すると115件でした。「アーカイブ」(index.html)は除きます。

秀丸エディタでHTMLファイルを開いて、「いいね!」ボタンの記述を追加する場所を検討したところ、以下の記述の間に放り込めば良さそうです。

              <!-- -->
              <hr>

20131008aとりあえず、秀丸エディタの「検索」「grepの実行」で、置換元となる上記の文字列(2行)を検索(カウント)してみました。


20131008b見つかったファイル数は115なので、もれなく置き換えできそうです。


前述の文字列(2行)を、以下のような「いいね!」ボタンの記述(43行)に置き換えます。

              <!-- -->
              <div role="clear"></div>

							<!-- □FaceBook -->
							<div id="fb-root"></div>
							<script>(function(d, s, id) {
							  var js, fjs = d.getElementsByTagName(s)[0];
							  if (d.getElementById(id)) return;
							  js = d.createElement(s); js.id = id;
							  js.src = "//connect.facebook.net/ja_JP/all.js#xfbml=1";
							  fjs.parentNode.insertBefore(js, fjs);
							}(document, 'script', 'facebook-jssdk'));</script>

							<!-- ■Twitter -->
							<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.sawada-naikaiin.com/09_syohyou/yyyymmddv.html" data-lang="ja" data-count="vertical">ツイート</a>
							<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>

							<!-- ■FaceBook -->
							<div class="fb-like" data-href="http://www.sawada-naikaiin.com/09_syohyou/yyyymmddv.html" data-height="The pixel height of the plugin" data-colorscheme="light" data-layout="box_count" data-action="like" data-show-faces="true" data-send="false"></div>

							<!-- ■Google+ -->
							<!-- +1 ボタン を表示したい位置に次のタグを貼り付けてください。 -->
							<div class="g-plusone" data-size="tall"></div>

							<!-- 最後の +1 ボタン タグの後に次のタグを貼り付けてください。 -->
							<script type="text/javascript">
							  window.___gcfg = {lang: 'ja'};

							  (function() {
							    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
							    po.src = 'https://apis.google.com/js/plusone.js';
							    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
							  })();
							</script>

							<!-- ■はてなブックマーク -->
							<a href="http://b.hatena.ne.jp/entry/http://www.sawada-naikaiin.com/09_syohyou/yyyymmddv.html" class="hatena-bookmark-button" data-hatena-bookmark-layout="vertical-balloon" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加"><img src="http://b.st-hatena.com/images/entry-button/button-only@2x.png" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>

							<!-- ■mixi -->
							<div data-plugins-type="mixi-favorite" data-service-key="1f34d1b7f76d90f58d093316c33911e03b177765" data-size="large" data-href="" data-show-faces="false" data-show-count="true" data-show-comment="false" data-width=""></div><script type="text/javascript">(function(d) {var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true;s.src = '//static.mixi.jp/js/plugins.js#lang=ja';d.getElementsByTagName('head')[0].appendChild(s);})(document);</script>

	            <div role="clear"></div>
              <hr>



20131008c(1)秀丸エディタ「grepして置換」で記述追加
秀丸エディタの「検索」「grepして置換」を使用し、置換元に前述の記述(2行)を、置換先に上記の記述(43行)を設定し、対象115ファイルを一気に置き換えます。



20131008d「grepして置換」で「置換」ボタンを押すと、確認画面が表示されるので、2箇所チェックを入れ「OK」ボタンを押します。

対象ファイルは上書されるので、不安な場合は、事前にフォルダごとバックアップしておく事。



20131008e結果、対象115ファイルが置換されました。


ただし、このままでは、全て同じリンク情報になっているので、修正が必要です。
前述の置換先記述(43行)中で見た場合、http://www.sawada-naikaiin.com/09_syohyou/yyyymmddv.html の赤文字部分を、各々のHTMLファイル名に置き換えます。修正すべき箇所は1ファイルに付き3箇所あります。既に置換後ですが、上記置換先記述で見た場合は15,19,37行目です。

前回は、この部分の修正を、秀丸エディタで開き、1ファイル毎に「検索置換」機能で実行しました。面倒な上に、単純作業の繰り返しで、記述ミスをする可能性もありました。

(2)シェルスクリプトで文字列を検索・置換
今回は、シェルスクリプトを実行し、自動的に置き換え修正を行わせてみたいと思います。
・・・とは言え、Windowsのコマンドプロンプト(DOS窓)には、テキストファイル内の文字列置換コマンドが無いようなので、Linuxのコマンドシェルを利用しようと思います。

20131008fバーチャル環境の Ubuntu で出来ないかやってみました。



20131008gOracle VM VirtualBox で Ubuntu を選択し、上部ツールバーの「設定」をクリックします。左ペインの「共有フォルダ」をクリックしたら、ホストOS(Win7)の共有させたいフォルダを登録します。

Ubuntuを起動して、Guest Addition のインストールが必要と言われた場合は、指示通りに「デバイス」メニューの「Guest Addition のインストール」を実行。



ターミナルを起動し、マウント用のフォルダを作成し、マウントします。

$ sudo mkdir /mnt/_hp
$ sudo mkdir /mnt/temp

$ sudo mount -t vboxsf _hp /mnt/_hp
$ sudo mount -t vboxsf temp /mnt/temp

(_hpはホームページ用、tempは事前テスト用です。)


対象フォルダへ移動し、エディタでシェルスクリプトを作成します。

$ cd /mnt/_hp/sawada-naikaiin.com/09_syohyou
$ sudo nano chg.sh
#!/bin/bash
for file in *.html
do
 sed 's/yyyymmddv.html/'$file'/g' $file > $file.new
done
rename 's/.html/.bak/' *.html
rename 's/.html.new/.html/' *.html.new
exit 0

forループで読み込んだ*.htmlファイル(変数$file)に対して、sedコマンドを適用。sedコマンドでHTMLファイル内の「yyyymmddv.html」を検索し、ファイル名($file)に置き換えます。結果は「.new」を付加してファイルに出力。ループ処理が終わったら、renameコマンドで、*.htmlを*.bakに、*.html.newを*.htmlに、ファイル名変更。

chg.sh ファイルを保存したら、エディタを終了し、スクリプトを実行します。

$ sh chg.sh

これで「勝手な書評」(フォルダ 09_syohyou )の全ファイル(index.html 除く)に対して、「いいね!」ボタンの記述を修正( yyyymmddv.html を実際のHTMLファイル名に置き換え)することができました。

「医学に関する津軽弁」(フォルダ 07_tsugaruben )のファイルに関しても、置換元記述と置換先パス情報が多少異なるだけで、(1)秀丸エディタで「grepして置換」、(2)スクリプト「chg.sh」実行で、あっと言う間に追加・修正できました。

ブラウザで表示してもボタンが表示されない場合は、キャッシュが表示されているので、「F5」キーを押すなりしてページの再読み込みが必要でした。

複数ファイルを編集する場合は、秀丸エディタの「grepして置換」と、シェルスクリプトは便利です!(^o^)/