上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑

環境
Mac OS X 10.4.11 (PPC; 日本語優先)
Safari 3.0.4

Amazon の
http://www.amazon.co.jp/商品名/dp/ASINコード/ref=ずらずらずらずら...
などという URL を短くして
http://www.amazon.co.jp/dp/ASINコード
にするときに、今までは

javascript:location.href=('http://www.amazon.co.jp/dp'+document.URL.match(/\/[0-9a-zA-Z]{10}(?:\/*|$)/))

というブックマークレットを実行して ASIN を取得していたのですが、これは URL 文字列のうち「スラッシュ + 10 個の [:alnum:] + スラッシュまたは行末」という正規表現に最初にマッチしたものを見ているだけです。

ということはもし 10 個の [:alnum:] で表記された商品名があるとして、それが URL 中で ASIN より先に来ていたらアウトだなと気がつきました。
では dp/ASIN という文字列を探して後方参照すれば良いかというと、...gp/product/ASINコード... なんて URL もあったりして (というかこっちが正式?) 厄介です。

面倒臭くなったので別の方法はないかとググってみました。
すると getElementsBy なんとかかんとか、というメソッドが。
使えそう。

javascript:location.href=('http://' + document.domain + '/dp/' + document.getElementsByName('ASIN')[0].value + '/')

document.domain というのも覚えたので使ってみました。
最初のスクリプトと比べて「関連商品を見る」のページから短縮できなかったりするのが残念ですが、ASIN が Amazon の商品識別番号であることを考えると、商品個別のページなら確実に getElementsByName('ASIN') を取得できるのではないかという気がします。

ついでに、ファイル名が商品の名前で始まる Webloc をデスクトップに作成する AppleScript。
タイトルの先頭にある Amazon.co... という文字列を削ってファイル名にします。URL はもちろん短縮済み。

set bs to «data utxt005C» as Unicode text

tell application "Safari"
try
set the_url to (URL of document 1)
if the_url starts with "http://www.amazon" then
set the_title to (name of document 1)
set sh_url to (do JavaScript "'http://' + document.domain + '/dp/' + document.getElementsByName('ASIN')[0].value + '/'" in document 1)
get {the_title, sh_url}
else
return
end if
on error
return
end try
end tell

set rbscript to "print $_.sub(/^Amazon" & bs & ".[" & bs & "w.]+." & bs & "s+/, '').gsub(/(?:^" & bs & ".|:)/, '-')"
set webloc_name to (do shell script "echo " & quoted form of the_title & " | ruby -Ku -ne " & quoted form of rbscript)

tell application "Finder"
make new internet location file at (path to desktop folder) to sh_url with properties {name:webloc_name}
end tell

tell application "Safari"
if not the_url is sh_url then
do JavaScript "location.href = '" & sh_url & "'" in document 1
end if
end tell


スポンサーサイト
12/12|Macコメント(1)トラックバック(0)TOP↑

環境
Mac OS X 10.4.11 (PPC; 日本語優先)
BathyScaphe 1.6

BathyScaphe が 1.6 になって、3 ペインでも選択文字列を簡単に取得できるようになりました。

selected text of document 1

これだけで OK。
というわけで久しぶりに AppleScript を書いてみました。

BathyScaphe の選択文字列をテキストファイルに書き出す

set dq to (ASCII character 34) as Unicode text
set bs to «data utxt005C» as Unicode text
set orc to «data utxtFFFC» as Unicode text
set rgx to "/^" & bs & "d{1,4}" & bs & "s名前.+" & orc & "*.*(Mail)*.+投稿日.+/"
--またはこう書いた方が「レス番...名前...Mail...投稿日」の行を見つけやすいかも
--set rgx to "/^" & bs & "d{1,4}" & bs & "s名前:" & bs & "s.+" & orc & "*" & bs & "s(?:Mail)*:" & bs & "s.*" & bs & "s投稿日:.+/"

set rbscript to "if $stdin.lineno == 1; print $_.gsub(/" & orc & "/, ''); else; print $_.gsub(" & rgx & ") { | line |; " & dq & bs & "n" & dq & " + line; }.gsub(/" & orc & "/, ''); end"
--または本文をインデントしたい場合
--set rbscript to "if $stdin.lineno == 1; if " & rgx & " =~ $_; print $_.gsub(/" & orc & "/, ''); else; print ' ' + $_; end; else; if " & rgx & " =~ $_; print $_.gsub(" & rgx & ") { | line |; " & dq & bs & "n" & dq & " + line; }.gsub(/" & orc & "/, ''); else; print ' ' + $_; end; end"

tell application "BathyScaphe" to activate

tell application "System Events"
tell process "BathyScaphe"
click menu item "情報をコピー" of menu "スレッド" of menu bar 1
end tell
end tell

tell application "BathyScaphe"
activate
set the_text to selected text of document 1
set info to (the clipboard as Unicode text)
if not the_text is "" then
set file_path to (choose file name default location (path to desktop folder) default name "res.txt")
set file_path_posixpath to (POSIX path of file_path)
else
return
end if
end tell

set str to (do shell script "echo -n " & quoted form of the_text & " | tr '" & bs & "r' '" & bs & "n' | ruby -Ku -ne " & quoted form of rbscript)
set str to str & return & return & "------------------------------------------------------" & return & info

--'情報をコピー'で得た文字列は最後に改行が入っているので echo -n でちょうどよい.
--UTF-8
do shell script "echo -n " & quoted form of str & " | tr '" & bs & "r' '" & bs & "n' > " & quoted form of file_path_posixpath
--UTF-16
--do shell script "echo -n " & quoted form of str & " | tr '" & bs & "r' '" & bs & "n' | iconv -f UTF-8 -t UTF-16 > " & quoted form of file_path_posixpath

こんな感じで書き出せます。
res1.txt
res2.txt (インデントした場合)

また、これは iTunes でもたまにあることですが、このスクリプトは BathyScaphe 専用のスクリプトメニューからは実行できません。グローバルスクリプトメニュー (メニュー右の時計近くの) からなら動きます。
上記スクリプトの場合だと System Events の

click menu item ...

の行で引っかかっている模様。
ちなみにグローバルな方のメニューは '/Applications/AppleScript/AppleScript ユーティリティ' の設定で表示させることができます。


12/07|AppleScriptコメント(0)トラックバック(0)TOP↑
プロフィール

AquaBowler

  • Author:AquaBowler
  • 現在の Mac 環境:
    iBook Late2001
    Mac OS X 10.4.11
フリーエリア
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
del.icio.us
feed meter

RSS feed meter for http://kotoerisan.blog16.fc2.com/

FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。