mattintosh note

どこかのエンジニアモドキの備忘録

🍎 Google Chrome で開いているタブの URL とタイトルからアンカーテキストを作成する

Google Chrome

Google Chrome から開いている(アクティブな)タブから URL とタイトルを取得し、<a rel="external" href="URL">TITLE</a> な HTML を生成してクリップボードへコピーします。


スクリプト全体

tell application "Google Chrome" to set L to {URL of active tab of window 1, title of active tab of window 1}
set item 2 of L to do shell script "LANG=ja_JP.UTF-8 /usr/bin/ruby -ne 'require \"cgi\"; puts CGI.escapeHTML($_)' <<<" & quoted form of item 2 of L
set the clipboard to "<a rel=\"external\" href=\"" & item 1 of L & "\" title=\"" & item 2 of L & "\">" & item 2 of L & "</a>"

1行目

普通に書くと下記のようなコードになるかと思いますが Google Chrome は1度しか呼ばないのでリストを使って1行で済ませています。Google Chrome.sdef を読むとタブの情報は tab {n} で拾えるような気がするんですが active tab じゃないと取得できないようで…。

tell application "Google Chrome"
    set theURL to URL of active tab of window 1
    set theTITLE to title of active tab of window 1
end tell

2行目

取得したタイトルからエスケープが必要になる文字を Ruby を使って変換しています。Ruby スクリプト部分に直接文字列を埋め込んでしまうと誤作動を起こす可能性があるため quoted form of 化したものをヒアストリングを使って標準入力から読み込ませます。AppleScriptdo shell script 環境ではシェルの初期環境変数がターミナル等とは異なるため LANG=ja_JP.UTF-8Ruby-Ku オプションを指定しないとエラーになることがあります。タイトルに改行コードが入っていることはまず無いと思うので -n オプションは要らないかもしれません。

LANG=ja_JP.UTF-8 /usr/bin/ruby -ne 'require "cgi"; puts CGI.escapeHTML($_)' <<<'TITLE OF ACTIVE TAB'

3行目

URL とタイトルから HTML を生成し、クリップボードへコピーしています。

生成例

Yahoo! JAPAN のページから以下のコードが生成されます。

<a rel="external" href="http://www.yahoo.co.jp/" title="Yahoo! JAPAN">Yahoo! JAPAN</a>