この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部の若槻です。
DevelopersIOではブログ記事を投稿する時に、筆者は記事のタイトルやコンテンツに加えて任意のパーマリンク(postname)を指定できます。
postnameは記事のURLの一部となるため、SEO(Search Engine Optimization)を考えると記事の内容に関連した文字列とした方が良いのでしょうが、それを毎回頭で考えるのは億劫です。
なので私は日々のブログ執筆の効率化の一環として、ブログのタイトルをもとにパーマリンク(postname)を生成するスクリプトをAmazon Translateを使って作り、利用しています。今回はそのスクリプトをご紹介します。
スクリプト
スクリプトは下記のようになります。
get_postname.sh
#!/bin/sh
set -eu
# 翻訳処理
get_translated() {
aws translate translate-text \
--text "$1" \
--source-language-code ja \
--target-language-code en | \
jq -r '.TranslatedText'
}
# 置換処理
replace_to_postname() {
echo "$1" | \
sed -e 's/ /-/g' | \
sed -e 's/[^a-zA-Z0-9-]//g' | \
tr '[:upper:]' '[:lower:]',,
}
echo ""
echo "Postname is ..."
translated=$(get_translated "$1")
postname=$(replace_to_postname "${translated}")
echo " " ${postname}
echo ""
翻訳処理
Amazon Translateを使用して日本語のタイトルを英語に翻訳する処理です。
翻訳処理
% get_translated(){
echo $(aws translate translate-text \
--text "$1" \
--source-language-code ja \
--target-language-code en) | \
jq -r '.TranslatedText'
}
実行すると下記のような処理結果が得られます。
% get_translated "ブログのタイトルをもとにパーマリンクを生成するスクリプトをAmazon Translateで作ってみた"
I created a script in Amazon Translate to generate permalinks based on the title of the blog
置換処理
翻訳結果に対して下記の置換を行う処理です。
sed -e 's/ /-/g'
:スペースをハイフン
-
に置換sed -e 's/[^a-zA-Z0-9-]//g'
:英数字とハイフン以外の文字列を削除tr '[:upper:]' '[:lower:]',,
:英字を大文字から小文字に置換
% replace_to_postname() {
echo "$1" | \
sed -e 's/ /-/g' | \
sed -e 's/[^a-zA-Z0-9-]//g' | \
tr '[:upper:]' '[:lower:]',,
}
実行すると下記のような処理結果が得られます。
% replace_to_postname "I created a script in Amazon Translate to generate permalinks based on the title of the blog"
i-created-a-script-in-amazon-translate-to-generate-permalinks-based-on-the-title-of-the-blog
スクリプトを使ってみる
ちゃんとブログのタイトルをもとにpostnameが生成できています。
% sh ./get_postname.sh 'ブログのタイトルをもとにパーマリンクを生成するスクリプトをAmazon Translateで作ってみた'
Postname is ...
i-created-a-script-in-amazon-translate-to-generate-permalinks-based-on-the-title-of-the-blog
記号などが含まれている場合も置換処理によりちゃんと削除されています。
% sh ./get_postname.sh 'ブログ(Developers_IO)のタイトルをもとにパーマリンクを生成するスクリプトを"Amazon Translate"で作ってみた'
Postname is ...
i-created-a-script-with-amazon-translate-to-generate-a-permalink-based-on-the-title-of-the-blog-developersio
スクリプトで作成したpostnameはそのまま使用しても良いですし、冗長だったり翻訳がおかしいと感じたらちょちょいと添削や順番を変えるなりして修正をかけても良いと思います。今回の記事だと生成結果を下記のように修正しました。
- (修正前):
i-created-a-script-in-amazon-translate-to-generate-permalinks-based-on-the-title-of-the-blog
- (修正後):
script-to-generate-permalinks-based-on-the-title-of-the-blog-using-amazon-translate
おわりに
ブログのタイトルをもとにパーマリンクを生成するスクリプトをAmazon Translateで作ってみたのでそのご紹介でした。
実際使用しているのは今回の10倍ぐらいのボリュームのあるもっとその他色々な効率化処理を行えるスクリプトになるのですが、今回はパーマリンク生成部分のみ紹介しました。他の部分に関しても追々紹介したいと思います。
参考
- sedの正規表現で「\w」「\d」「\s」を実現する方法: 小粋空間
- 関数の使用方法 | UNIX & Linux コマンド・シェルスクリプト リファレンス
- 【Linux】シェルスクリプトに実行権限を付与する | Keep it up!
以上