[AppHtml*] 一つの記事を対象にストアリソース(画像)の URL を修正するスクリプト

このエントリーをはてなブックマークに追加 Pocket

404
404 / sanbeiji

@toshiya240 です。

以前、AppHtml について以下の問題/課題について書きました。

問題/課題

追記: 他のエントリを読まなくてもわかるように、問題および課題を記載します。

AppHtml* が出力する HTML には App Store 上の画像へのリンクがあり、 この URL は外部に向けて公開されているものではないので変更される可能性がある。 App Store 上の画像の URL が変更された結果、過去に生成したアプリリンクでリンク切れが発生する。

AppHtml* についてはこちら

App Store 上の画像の URL が変更された際に、AppHtml* の出力する HTML を変更することで暫定的な対処はできるが、過去に生成したものは別途修正する必要がある。

暫定対処についてはこちら

via Happy-Go-Lucky: [AppHtml*] ストアリソース(画像)の URL 変更への対策中

上記の記事では過去のリンクの修正については未検討でした。

WordPress の場合はデータベースを修正することで一括置換できるようですが、 Blogger ではそうは行きません。

一括置換する方法を考えていましたが、以下が怖くてw


Bloggerで50記事くらい連続編集するとアカBanされて死ぬ | DevAchieve
ブログ記事にアイキャッチ画像があるとブログのウィジェットや Google+とFacebookのシェアで表示されて見やすいし一発で目を引くので 効果的だと思って新しい記事から画像追加しまくったら アカBanされて昨日死にかけた。機械的にスパム判定食らうみたい。 アクセスできなくなってヘルプへ誘導されるのでそこから手続きして復活させてもらった。 めっちゃ焦るので連続編集ダメ、絶対。 ...
コッ、コワ━━━━━(((( ;゚Д゚))))━━━━━━ッ!!!

記事のデータをエクスポートして、手元でテキスト処理をしてからインポートという方法も検討してみましたが、どうやらパーマリンクが変わってしまうようで…



修正単位と修正するタイミング

ということで、記事単位で修正せざるを得ないようです。

といっても連続編集は避けたほうがよいので、過去の記事を参照した際にリンクを修正するのがよいと思います。

あ。ちなみにアプリリンクを再生成するのではなく置換です。再生成すると当時の価格やバージョンといった情報が失われてしまうからです。

単純なシェルスクリプトで

以下のような単純なシェルスクリプトを書きました。URL は長いので省略しています。

star_before="http://r.mzstatic.com/htmlResources/63F7/..."
star_after="http://r.mzstatic.com/htmlResources/1043/..."

hstar_before="http://r.mzstatic.com/htmlResources/63F7/..."
hstar_after="http://r.mzstatic.com/htmlResources/1043/..."

gc_before="http://r.mzstatic.com/htmlResources/AEB5/..."
gc_before2="http://r.mzstatic.com/htmlResources/63F7/..."
gc_after="http://r.mzstatic.com/htmlResources/1043/..."

univ_before="http://r.mzstatic.com/htmlResources/AEB5/..."
univ_before2="http://r.mzstatic.com/htmlResources/63F7/..."
univ_after="http://r.mzstatic.com/htmlResources/1043/..."

st_before="http://r.mzstatic.com/htmlResources/2338/..."
st_after="http://r.mzstatic.com/htmlResources/1043/..."

pbpaste | \
    sed -e "s|$star_before|$star_after|g" \
    -e "s|$hstar_before|$hstar_after|g" \
    -e "s|$gc_before|$gc_after|g" \
    -e "s|$gc_before2|$gc_after|g" \
    -e "s|$univ_before|$univ_after|g" \
    -e "s|$univ_before2|$univ_after|g" \
    -e "s|$st_before|$st_after|g" \
    | pbcopy

工夫したのは置換対象をペーストボードから読み込んで処理結果をペーストボードに戻す点です。 これによって中間ファイルを不要にしました。

また、Alfred の拡張にすることで素早く実行できるようにもしました。 Alfred の拡張は有償の Powerpack がないと使えないのでシェルスクリプトへのリンクも以下に掲載します。

Alfred 1.2 (無料)App
カテゴリ: 仕事効率化, ユーティリティ
販売元: Running with Crayons Ltd - Running with Crayons Ltd(サイズ: 1.9 MB)
全てのバージョンの評価: (121件の評価)

使い方

Blogger の場合の手順の例です。

▼ 修正したいページを開きます。リンク切れが発生しています。
Bofore

▼ たいていのテンプレートで定義されていると思いますが、 Blogger にサインインしている状態だと記事を編集するリンクが表示されるので、 鉛筆のアイコンをクリックします。
edit

▼ 記事編集画面が表示されるので、本文をすべて選択してペーストボードにコピーします。
Edit entry

▼ Alfred からスクリプトを実行します。 PowerPack なしの場合はターミナルなどからスクリプトを実行してください。
FixAppStoreResourceURL

▼ ペーストボードの内容を貼り付けます。
Paste

▼ プレビューしてみましょう。リンク切れが修正されていることとを確認して問題なければ更新します。
Preview

さあこれで

これまでは手順が確立していなかったので、面倒くさがって手を付けていませんでしたが、 これからは過去の記事を参照して気付いたらすぐに修正できます。

Google Analytics などを見て、アクセスの多い記事から修正するのもよいと思います。

自分も含めてよく参照される記事を修正していけば次第にだいたいおーけーになっていくかと(^^)

関連記事

0 コメント: