※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

open_url.ahk α8 はてなブックマークに登録

[2008-01-05] 保存ファイル名を変更可能に。
[2007-12-17] DLファイルリスト記録は保存先フォルダを2階層目まで可能に。
[2007-01-06] DLしたファイルをパスリストに記録するように。
[2006-12-30] url を追加するお気に入りリストファイルを選択・作成可能に。

open_url.ahk α8 (2007.12.17 版)
      juria(自分用メモ)

仕様
■クリップボード内の文字列が url の場合
  ▼拡張子によって実行するコマンドを振り分ける(対応したメニューのみ表示)
   拡張子と実行するコマンド・アプリは工夫次第で
  ▼ダウンロード
  ▼パスをお気に入りリストに追加する
   付加するコメントとタグをダイアログで入力
  ▼ttp://、tp:// の補完(completionURL.ahk 下記参照)
■url を含む文字列から url を取り出し整形、クリップボードに戻す
 ●書式に従って記述されたお気に入り(リンク)リストの場合
  ▼クリップボードに戻した url を設定したアプリで開く
  ▼ダウンロード
  ▼ハイパーリンク・タグの生成
  書式は、
   タグ, URL, コメント [, 備考など] (カンマ区切り、タブ区切り)
   各要素内の最初と最後のスペース、改行は取り除かれる。
   AHKリファレンス, http://www.autohotkey.com/docs/commands.htm , 名前順     (タグ, コメント, URL [, 備考など] の場合は、適宜変更のこと)
   %new_url1%→%new_url2%、%new_url2%→%new_url3%
 ●( オートアンカー でコピーした)ハイパーリンクの場合
  <a href="http://www.autohotkey.com/">AutoHotKey</a>
  ▼リストファイルを選択して追加書き込み(ページ上、リンク上)
  ▼リストファイルを新規作成する場合は、インプットボックスにファイル名を
   入力(拡張子も)
  ▼選択・作成するリストファイルは同一フォルダ内に置く(置かれる)。
  ▼書き込み文字列の確認 →「はい」→ リストファイル選択・作成 → 書き込み
   「いいえ」でタグを追加するダイアログ表示 →
   書き込み文字列の確認 →「はい」→ リストファイル選択・作成 → 書き込み
   「いいえ」でキャンセル
■クリップボード内の文字列に url が含まれない場合
  ▼Google、Youtube、英辞郎で検索

◎ダウンロードには、 esDL と curl.exe または wget.exe を使用。
  Principia さんの ShuffleDown.ahk を参考に(感謝)サブディレクトリも選択可に。
 ( esDL では cgi? や php? で飛ばされる url をうまく取得できない場合に利用)
◎ダウンロード完了後、ダウンロードしたファイルをパスリストに記録する。
 #Include DLarchiveList4.ahk
 要 axpathlist.spi(パスリストを書庫にみせかけて展開する Susie プラグイン)
◎設定されていない拡張子の場合は、何も起きない。
◎あふとサクラエディタはローカルのパス用なので、誤爆に注意。
 (正規表現で正しくローカルパスかどうか判定すべきだよな。きっと。)

#noTrayIcon
;#Include mbstring.ahk
#EscapeChar '  ; シングルクオートにエスケープ文字を変更'

app = D:\Application
LDir = E:\etc ;リストファイルを置くフォルダ指定

; クリップボードの文字列から url を取り出し、クリップボードに戻す
path = tp://

StringGetPos, pos_prev, Clipboard, %path%, 
  ; 欠落文字数分(ht,h,f)+ 1 以上
  ; url の前にあるタグ・コメントが区切り文字を入れて2文字以下は想定外
  if pos_prev > 2
    If Clipboard not contains '<a href  ; <は半角で
    {
      url = %Clipboard%
      ;StringSplit, OutputArray, InputVar [, Delimiters, OmitChars, FutureUse]
      ; Delimiters はスペース等を入れずに列挙
      StringSplit, new_url, url, ',%A_Tab%, %A_Space%   'n'r
      {
        Menu, linklist, Add, MyWiki, MyWiki
        Menu, linklist, Add, HTML, HTML
        Menu, linklist, Add, Open, Open
        Menu, linklist, Show
        return
      }
      MyWiki:
        Clipboard = [[%new_url1%:new|%new_url2%]]
        return
      HTML:
        Clipboard = <a href="%new_url2%">%new_url1%</a>  ; <>は半角で
        return
      Open:
        {
          Clipboard = %new_url2%
          ClipWait
          GoSub, OpenURL
          return
        }
    }
    ; HTMLハイパーリンクタグの場合
    If Clipboard contains '<a href  ; <は半角で
    {
      url = %Clipboard%
      StringSplit, new_url, url, ""<>,%A_Space%,
      list = %new_url5%, %new_url3%
      MsgBox, 4, , %list% 'n'nリストに追加してもいい?,
      IfMsgBox, YES
      {
         Gosub, Append
         Return
      }
      IfMsgBox, NO
      {
         InputBox, Tag, , タグ名を入力, , 110,124 
         If ErrorLevel <> 0
         Return
         list =  %new_url5%, %new_url3%, %Tag%
         MsgBox, 4, , %list% 'n'nリストに追加してもいい?,
         IfMsgBox, YES
         {
           Gosub, Append
           Return
         }
         IfMsgBox, No, Goto, NotAppend
      }
      
    }
; URL の前に、タグやコメントが無い場合
; (ht,h,f)が欠落している場合を想定
  If pos_prev <= 2
    {
      Gosub, OpenURL
      Return
    }
; URL を開く

OpenURL:
 ; クリップボード内の url の補完(ttp,tp -> http)
#Include completionURL.ahk

; クリップボード内の url を各要素に分解する
SplitPath,new_clip,file,dir,ext,name

;;; ポップアップで表示するメニューを作成
; 書式:Menu,分類,コマンド,表示名,ラベル

; 共通メニュー
  Menu, DL, Add, &esDL + curl, Menu6
  Menu, DL, Add, &Wget, Menu13,
  Menu, DL, Add, &NetTransport, Menu7
  Menu, Main, Add, ダウンロード(&D), :DL
  Menu, Main, Add, 関連付け実行, Menu8
  Menu, Main, Add,
  Menu, Main, Add, リストに追加, LinkList
  if new_clip not Contains %path%
  {
    Menu, Filer, Add, あふ右, AFX-R
    Menu, Filer, Add, あふ左, AFX-L
    Menu, Main, Add, あふ, :Filer
  }
  Menu, Main, Add,

; 検索メニュー
  Menu, Search, Add, Google, Menu10
  Menu, Search, Add, YouTube, Menu11
  Menu, Search, Add, 英辞郎, Menu14

; 拡張子フィルターメニュー
; url を実行するアプリのメニューを拡張子で振り分け
  if (ext="htm" or ext="html" or ext="xml" or ext="php" or ext="cgi")
    GoSub, htmlMenu
  if (ext="txt" or ext="ini")
    {
      Menu, Main, Add, &sakura, Menu3
      Menu, Main, Show
    }
  if (ext="gif" or ext="jpg" or ext="png" or ext="bmp")
    {
      Menu, Main, Add, &picture, Menu2
      Menu, Main, Add, Lynx+i_View, Menu1
      Menu, Main, Show
    }
  if (ext="mpg" or ext="avi" or ext="wmv")
    {
      Menu, Main, Add, video, Menu5
      Menu, Main, Show
    }
  if (ext="mp3" or ext="ogg" or ext="wma" or ext="ra" or ext="pls" or ext="mid")
    {
      Menu, Main, Add, xmplay, Menu4
      Menu, Main, Add, mplayer, Menu5
      Menu, Main, Add, streamrip, Menu12
      Menu, Main, Show
    }
  if (ext="zip" or ext="lzh" or ext="rar" or ext="exe" or ext="tar")
    {
      Menu, Main, Add, Wget, Menu6
      Menu, Main, Add, NetTransport, Menu7
      Menu, Main, Show
    }
  ; url が / や php?***,cgi?*** やアンカーで終わってるとき
  if new_clip not contains %name%
    GoSub, htmlMenu
  if new_clip contains http,ftp
    {
      StringRight, new_url, new_clip, 5
      IfNotInString, new_url, '.
      GoSub, htmlMenu
    }
  ; 検索
  if new_clip not contains %dir%
    {
      Menu, Search, Show
    }
;  else
;    {
;      Menu, Main, Show
;    }
  return

htmlMenu:
      Menu, Sub, Add, lynx, Menu1
      Menu, Sub, Add, luna, Menu2
      Menu, Sub, Add, xyzzy_www, Menu9
      Menu, Main, Add, Browser, :Sub
      Menu, Sub2, Add, sakura, Menu5
      Menu, Main, Add, Editor, :Sub2
      Menu, Main, Show,
      return

; ハイパーリンクをお気に入りリストに追加する
LinkList:
  InputBox, Comment, , コメントを入力, , 110,124 
  If ErrorLevel <> 0
  Return
  InputBox, Tag, , タグ名を入力, , 110,124 
  If ErrorLevel <> 0
  Return
  list = %Comment%, %new_clip%, %Tag%
  MsgBox, 4, , %list% 'n'nリストに追加してもいい?,
  IfMsgBox, YES
    {
      Gosub, Append
      Return
    }
  IfMsgBox, NO, Goto, NotAppend

NotAppend:
  MsgBox, リストに追加してません
  Return

;リストファイルを選択・新規作成して url を追加
Append:
{
  ;Loop, FilePattern [, IncludeFolders?, Recurse?] 
  Loop, %LDir%\*
  Menu, list, Add, &%A_LoopFileName%, ThisFile
  Menu, list, Add ;区切り線
  Menu, list, Add, &MakeFile, MakeFile
  Menu, list, Show
  Return

  MakeFile:
      InputBox, NewFile, 新ファイル名, , , 130, 100
      If ErrorLevel <> 0
        Return
  ;   Sleep, 500
      FileAppend, %list%'r'n, %LDir%\%NewFile%
      Return
  ThisFile:
      StringTrimLeft, cFile, A_ThisMenuItem, 1
      FileAppend, %list%'r'n, %LDir%\%cFile%
      Return
}

; 各メニューに対応する動作(起動するアプリの)設定
AFX-R:
  Run, %app%\Filer\afx0165\AFX.EXE -s -r"%new_clip%"
  Return
AFX-L:
  Run, %app%\Filer\afx0165\AFX.EXE -s -l"%new_clip%"
  Return
Menu1:
  EnvSet, HOME, %app%\Internet\Lynx
  EnvSet, Temp, %app%\Internet\Lynx
  Run, D:\bin\ckw.exe -e %app%\Internet\Lynx\lynx.exe -image_links %new_clip%
  return
Menu2:
  run, %app%\Internet\Lunascape3\Luna.exe %new_clip%,
  return
Menu3:
  Run, %app%\Text_Editor\sakura\sakura.exe %new_clip%,
  return
Menu4:
;  run, %app%\AudioPlayers\foobar2000_09\foobar2000.exe /play %new_clip%
  Run, %app%\AudioPlayers\xmplay\xmplay.exe %new_clip%
  return
Menu5:
;  Run, %app%\VideoPlayers\MPlayer-KK\mplayer.exe %new_clip%
  Run, %app%\VideoPlayers\mplayer-athlon-svn-18928\mplayer.exe %new_clip%,
  return
Menu6:
  Run, %app%\Launcher\esDL\esDL.exe /#e=curl %new_clip%
  Process, Wait, curl.exe
  If Errorlevel <> 0
  Process, WaitClose, %ErrorLevel%
  Run, %A_ScriptDir%\DLarchiveList4.ahk
  return
Menu7:
  Run, "%app%\Internet\NetTransport 2\NetTransport.exe" %new_clip%,
  return
Menu8:
  Run, %new_clip%
  Return
Menu9:
  Run, %app%\Text_Editor\xyzzy\xyzzycli.exe -f my-www-open-url %new_clip%
  Return
Menu10:
  Run, http://www.google.com/search?hl=ja&lr=lang_ja&num=20&q=%new_clip%
  Return
Menu11:
  Run, http://www.youtube.com/results?search_type=search_videos&search_sort=
       relevance&search_query=%new_clip% ; 表示の都合により改行、本当は一行
  Return
Menu12:
  ; 外部アプリの引数に % が必要な場合はエスケープする
  Run, %app%\streamripper-win32\streamripper.exe %new_clip% -a -d E:\Stream
  '%d -D '%d/'%1q-'%A-'%T -k 1  -A ; 表示の都合により改行、本当は一行
Menu13:
  Run, %A_ScriptDir%\DownLoad3.ahk
  Process, Wait, wget.exe
  If Errorlevel <> 0
  Process, WaitClose, %ErrorLevel%
  Run, %A_ScriptDir%\DLarchiveList4.ahk
  Return
Menu14:
  Run,  http://www2.alc.co.jp/ejr/index.php?word_in=%new_clip%&word_in2=
  '%u304B'%u304D'%u304F'%u3051'%u3053&word_in3=PVawEWi72JXCKoa0Je
    ; 表示の都合により改行、本当は一行
  Return

ExitApp

completionURL.ahk
; クリップボード内の url の補完(ttp,tp -> http)
new_clip = %Clipboard%
StringLeft, new_url, new_clip, 3
  IfInString, new_url, ttp
  {
      StringReplace, clipboad, clipboad, h%new_clip%
      new_clip = h%new_clip%
  }
  else IfInString, new_url, tp`:
  {
      StringReplace, clipboad, clipboad, ht%new_clip%
      new_clip = ht%new_clip%
  }
  else
  {
      new_clip = %new_clip%
  }

esDL のプログラム設定(@あれこれ-2006年11月参照)
esDL.ini
[exec]

;wgetでダウンロード
;ファイル名をダイアログで入力
;起動オプション /#e=wget
D:\bin\wget.exe
>-c --referer=%L -O "%P%$K" %L
;>-c --referer=%L -P %P %L

;curlでダウンロード
;ファイル名をダイアログで入力
;起動オプション  /#e=curl
D:\Application\Internet\curl\curl.exe
>-o "%P%$K" %L -v

%end

DLarchiveList4.ahk
/*
 DL・保存先のパスを取得するAHK
*/

; 保存先フォルダの親フォルダ
pDir = D:\archives
; リスト編集用エディタ
editor= path\to\sakura\sakura.exe

; クリップボード内の url の置換(ttp,tp -> http)
#Include completionURL.ahk

dURL = %new_clip%

; クリップボード内の url を各要素に分解する
SplitPath,dURL,file,dir,ext,name,drive

; 保存先フォルダのリストアップ
;{
   Loop, %pDir%\*, 2, 0
   {
       Dir = %A_LoopFileName%
       Menu, Main, Add, &%Dir%, ThisDir
   }
       Menu, Main, Add
       Menu, Main, Add, (&E)リストを編集, Edit
       Menu, Main, Show
       Return

ThisDir:
;保存先フォルダ名
;左から一文字(ショートカットキー名)カット
   StringTrimLeft, cDir, A_ThisMenuItem, 1
   Loop,  %pDir%\%cDir%\*, 2, 0
   if A_Index >= 1
       {
           sDir = %A_LoopFileName%
           Menu, Sub, Add, &%sDir%, SubDir
       }
           Menu, Sub, Add
           Menu, Sub, Add, p/&%cDir%, CurentDir
           Menu, Sub, Show
           Return
   if A_Index = 0
       Gosub, CurentDir
       Return
CurentDir:
   InputBox, filename, 保存ファイル名, , , 180,100,,,,,%file%
   If ErrorLevel <> 0
   ExitApp
  ;保存先フォルダ名
  ;左から三文字(p/ とショートカットキー名)カット
   StringTrimLeft, cDir, A_ThisMenuItem, 3
   FileAppend, %pDir%\%cDir%\%filename%`r`n, archiveList.sz7
   Return
SubDir:
   InputBox, filename, 保存ファイル名, , , 180,100,,,,,%file%
   If ErrorLevel <> 0
   ExitApp
   StringTrimLeft, sDir, A_ThisMenuItem, 1
   FileAppend, %pDir%\%cDir%\%sDir%\%filename%`r`n, archiveList.sz7
   Return
Edit:
   Run, %editor% E:\etc\archiveList.sz7
   Return

DownLoad3.ahk
;;; DownLoad3.ahk (2008-01-05)
; クリップボード内の url をダウンロード
; Principia さんの ShuffleDown.ahk を参考に、保存先 にサブディレクトリも
; 指定可能に改造(1階層のみ)、保存ファイル名を変更できるようにした。

; クリップボード内の url の置換(ttp,tp -> http)
#Include completionURL.ahk

pDir = D:\archives\ ;振り分けたいディレクトリ群がある親ディレクトリ
wget = wget.exe ;wgetの絶対パス

wget_opt = -c --referer=%new_clip%  ;wgetのオプション(-O 以外)

{
    Loop, %pDir%*, 2, 0
    {
        Menu, DownDir, Add, &%A_LoopFileName%, ThisDir
    }
    Menu, DownDir, Add
    Menu, DownDir, Add, &MakeDir, MakeDir_Down
    Menu, DownDir, Show
    return
    }

ThisDir:
    StringTrimLeft, cDir, A_ThisMenuItem, 1
        Loop,  %pDir%%cDir%\*, 2, 0
        if A_Index >= 1
        {
            sDir = %A_LoopFileName%
            Menu, Sub, Add, &%sDir%, SubDir
        }
            Menu, Sub, Add
            Menu, Sub, Add, p/&%cDir%, CurentDir
            Menu, Sub, Show
            Return
        if A_Index = 0
        Gosub, CurentDir
        Return
        
CurentDir:
    StringTrimLeft, cDir, A_ThisMenuItem, 3
    Ren()
    Run, %wget% %wget_opt% -O %pDir%%cDir%\%filename% %new_clip%
    Return
SubDir:
    StringTrimLeft, sDir, A_ThisMenuItem, 1
    Ren()
    Run, %wget% %wget_opt% -O %pDir%%cDir%\%sDir%\%filename% %new_clip%
    Return
MakeDir_Down:
    InputBox, NewDir, 新規ディレクトリ名, , , 180, 100
    If ErrorLevel <> 0
        Return
    FileCreateDir, %pDir%%NewDir%
    Ren()
    Run, %wget% %wget_opt% -O %pDir%%NewDir%\%filename% %new_clip%
    Return

Ren()
{
    global
    SplitPath, new_clip, Name, Dir, Ext, NameNoExt, Drive
    InputBox, filename, 保存ファイル名, , , 180,100,,,,,%Name%
    If ErrorLevel <> 0
    ExitApp
}


-
この日記のはてなブックマーク数