スポンサーサイト

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

Safariで閲覧中のページの被はてブ数を表示するAppleScript

SafariScriptingと、XML-RPCを使った『はてなブックマーク件数取得API』を組み合わせて、閲覧中のページの被はてブ数を表示するAppleScript。

ダイアログで結果を表示するだけでは味気無いので、user数をクリックするとブクマしたユーザが一覧出来るページに飛ぶようにHTMLを生成して、do javascriptでSafariに表示させるようにしてます。(AppleScript内でスタイルシート書くのも変な感じ)

最前面のウインドウの全タブのURLを処理して表示します。


はてなAPIでのやり取りはシンプルで、被ブクマ数を取得するメソッド『bookmark.getCount』を使って、
tell application "http://b.hatena.ne.jp/xmlrpc"
   call xmlrpc {method name:"bookmark.getCount", parameters:{"<ページのURL>"}}
end tell
みたいにしてやれば、URLをラベルにしたレコードでブクマ数が返ってきます。

Safariのタブの切り替えにはGUI Scriptingを使ってるんですが、Safari 1.xと2.xとではUIのグループ番号(アドレスバーやブックマークバーの列に番号が付いている)が変わってるみたいで、2.xだとブックマークバーを表示した状態でのタブバーのグループは3になる様です。(いや、ひょっとしたら調べ方が悪いかも知れない)

GUI Scriptingが使えるように、あらかじめユニバーサルアクセスの『補助装置にアクセスできるようにする』をチェックしておく必要があります。

あと、今回初めて気付いたんですが、OS X 10.4のスクリプトエディタって、エスケープ記号が『円マーク』では無く『バックスラッシュ』でないとコンパイル出来ないんですね。10.3のとは逆になってるのでSafariからコピペする場合円マークをバックスラッシュに置換してやる必要があります。

■動作確認
MacOS X 10.4.8
Safari 2.0.4
property hatebu_href : "<a href=\"http://b.hatena.ne.jp/entry/"
property styleTag1 : "<style type=\"text/css\">a:link,a:visited{color:#0000FF;font-size:90%}"
property styleTag2 : ".hatebu a:link,.hatebu a:visited{color:#FF0000;font-size:80%}</style>"

global cntTab, uiGroup
--set uiGroup to 1
set uiGroup to my check_UIgroup()
set cntTab to my get_countTab()
set theResults to {} as list

tell application "Safari"
   activate
   repeat with rep from 1 to cntTab
      my switch_currentTab(rep)
      if URL of document 1 exists then
         set theURL to URL of document 1
         set theTitle to name of document 1
         
         --はてブAPIを呼び出し、結果をリストに保存
         try
            tell application "http://b.hatena.ne.jp/xmlrpc"
               set cntHatebu to (call xmlrpc {method name:"bookmark.getCount", parameters:{theURL}}) as list
            end tell
         on error
            set cntHatebu to " 不明 "
         end try
         set theResults to theResults & ""
         set theRec to {|URL|:theURL, title:theTitle, hatebu:cntHatebu as text}
         set last item of theResults to theRec
      end if
   end repeat
   
   --リストから結果を取り出し、HTMLで書き出す
   set resultHTML to ""
   repeat with rep from 1 to (count of items of theResults)
      set _url to get |URL| of item rep of theResults
      set _title to get title of item rep of theResults
      set _hatebu to get hatebu of item rep of theResults
      if _hatebu > 1 then
         set _users to " users"
      else
         set _users to " user"
      end if
      set entry_title to "<a href=\"" & _url & "\" target=_blank>" & _title & "</a></div>"
      set resultHTML to resultHTML & entry_title & "<div class=\"hatebu\">" & hatebu_href & _url & "\" target=_blank>" & _hatebu & _users & "</a></div><br>"
   end repeat
   
   set resultHTML to styleTag1 & styleTag2 & resultHTML
   --display dialog resultHTML
   make new document
   do JavaScript "document.write (" & quoted form of resultHTML & ")" in document 1
end tell

--タブのUIグループを特定
on check_UIgroup()
   try
      tell application "System Events"
         tell process "Safari"
            set cntBtn to count of buttons of group 3 of window 1
         end tell
         set chkGroup to 3
         if cntBtn is 0 then set chkGroup to 2
         return chkGroup
      end tell
   on error
      display dialog "アドレスバーは表示されていますか?"
      error number -128
   end try
end check_UIgroup

--開いているタブの数を取得
on get_countTab()
   tell application "System Events"
      tell process "Safari"
         set cntTab to count of buttons of group uiGroup of window 1
      end tell
   end tell
end get_countTab

--num番のタブを開く
on switch_currentTab(num)
   tell application "System Events"
      tell process "Safari"
         click button num of group uiGroup of window 1
      end tell
   end tell
end switch_currentTab
関連記事
スポンサーサイト

コメント

非公開コメント

Profile
choco
Author : choco

印刷・製版の現場を経て、広告制作会社でPhotoshopを使ったビジュアル制作を担当。

→現在は車載機器開発ベンダにて、組み込み3Dデータ作成やUIデザインなどを行っています。

Categories
Favorites


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