//================================================
// VDLIrv.uws 2007/05/17
// Programed by tokix(http://www.tokix.net/)
//================================================
//================================================
// ユーザー設定
//================================================
CONST IrvinePath = "C:\Program Files\Irvine\"
//================================================
// 以下分かる方のみ必要に応じて変更して下さい
//================================================
//-----------------------------------------------------
// コピーされたアドレスから除外する文字列
//-----------------------------------------------------
// コピーされたURLが以下の文字から始まる場合は「http://」に置換
DIM URLToFixStr[]="http://ime.st/","http://ime.nu/","http://nun.nu/","ttp://","tp://"
//-----------------------------------------------------
// indexページと見なすURL末尾文字列
//-----------------------------------------------------
// コピーされたURLが以下の文字で終わる場合はindexページからのダウンロードと見なし
// 動画タイトルの末尾に「(○○年○○月○○日)」を付加する
DIM URLIndexStr[]="/","index.htm","index.html","home.pl"
//-----------------------------------------------------
// 動画タイトル抽出範囲を手動指定するサイトを指定
// 「●●」で始まるURLなら「●●」(●番目の)から「●●」(●番目の)
// という形式で指定していく
// 指定されていないURLの場合は
// 「
」(1番目の)から「 」(1番目の)
// を動画タイトルと見なして抽出する
//-----------------------------------------------------
DIM SpecificSiteURLforTitleRange[]="http://vids.myspace.com/","http://www.metacafe.com/","http://www.dailymotion.com/video/"
// それらのサイトにおける抽出開始箇所
DIM TitleRangeStartStr[]="vidsDetailTitle<#DBL>>","","nav with_uptitle<#DBL>>"
DIM TitleRangeStartFlag[]="1","1","1"
// それらのサイトにおける抽出終了箇所
DIM TitleRangeEndStr[]=" "," Video",""
DIM TitleRangeEndFlag[]="7","1","1"
// 上記は
// ●1
// 「http://vids.myspace.com/」で始まるURLなら
// 「」(1番目の)から
// (UWSCの仕様上、「"」は「<#DBL>」に)
// 「 」(7番目の)まで
// ●2
// 「http://www.metacafe.com/」で始まるURLなら
// 「」(1番目の)から
// 「 Video 」(1番目の)まで
// (以下略)
// という指定を行っている。
// 同じ要領で新たな設定を加えたり設定を変更したりすることができる
//-----------------------------------------------------
// 各動画サイトの動画タイトル内の不要文字列
//-----------------------------------------------------
// 抽出した範囲内に以下の文字列が入っていた場合は問答無用で削除する
// URLを条件としない問答無用の削除条件なので扱いに注意
DIM TitleUnnecessaryStr[]="YouTube - "," - Dailymotion Partagez Vos Videos"," - Dailymotion Share Your Videos"," - Google Video","DailySixer.com Video: ","sevenload | Video"," - BREAK.com"," :にゅーあきばどっとこむ"
//-----------------------------------------------------
// 各動画サイトのPermallink表示箇所
// 検索結果から個別動画ページを開いた場合のみ動画を落とせない
// といったケースで設定を行えば改善される可能性がある
//-----------------------------------------------------
// クリップボード内アドレスをVideoDownloaderに渡してエラーが出た時
// そのアドレスのソースを取得し、動画のPermallink取得を試みる
// 取得に成功した場合は、Permallinkアドレスを再度VideoDownloaderに渡す
DIM MoviePermalURLStartStr[]=" video_player_permalink_text<#DBL> class=<#DBL>text<#DBL> onclick=<#DBL>this.select()<#DBL> type=<#DBL>text<#DBL> value=<#DBL>"," video_link<#DBL> type=<#DBL>text<#DBL> value=<#DBL>"," text<#DBL> name=<#DBL>url<#DBL> id=<#DBL>url<#DBL> onclick=<#DBL>this.select()<#DBL> value=<#DBL>"
DIM MoviePermalURLStartFlag[]="1","1","1"
DIM MoviePermalURLEndStr[]="<#DBL> readonly=<#DBL>readonly<#DBL> />","<#DBL> class=<#DBL>vidURLField<#DBL> onClick=<#DBL>javascript:document.urlForm.video_link.focus();document.urlForm.video_link.select();<#DBL>","<#DBL> class=<#DBL>embed_text<#DBL>/>"
DIM MoviePermalURLEndFlag[]="1","1","1"
//-----------------------------------------------------
// VideoDownloaderの設定
// VideoDownloaderに仕様変更があった場合は設定変更が必要
//-----------------------------------------------------
// ダウンロードページURLの設定
CONST VideoDownloaderURLHeader="http://videodownloader.net/get/?url="
CONST VideoDownloaderURLFooter="&orig=ffp&ver=1.1"
// ダウンロードページ内における動画本体アドレスの抽出位置
// 動画本体のアドレスは
// 「 "http"
PUTERROR("動画ページのアドレスをコピーしてから起動してください")
ENDIF
//-----------------------------------------------------
// 開くべきVideoDownloaderのダウンロードページURLを生成
//-----------------------------------------------------
//記号系の置換
MoviePageURL=FIXURL(MoviePageURL)
//文字列を結合しURL生成
VideoDownloaderURL=VideoDownloaderURLHeader+MoviePageURL+VideoDownloaderURLFooter
//-----------------------------------------------------
// VideoDownloaderのダウンロードページソースを取得
//-----------------------------------------------------
VideoDownloaderSource = GETPAGESOURCE(VideoDownloaderURL)
//エラーだった場合
IFB POS("Error",VideoDownloaderSource)>0
//クリップボード内アドレスのソースを取得
MoviePageSource=GETPAGESOURCE(MoviePageURL)
Flag=0
//Permallink取得を試みる
FOR i=0 TO RESIZE(MoviePermalURLStartStr)
IFB POS(MoviePermalURLStartStr[i],MoviePageSource)>0 AND POS(MoviePermalURLEndStr[i],MoviePageSource)>0
//取得できた場合
MoviePageURL=EXTRACTION(MoviePageSource,MoviePermalURLStartStr[i],MoviePermalURLStartFlag[i],MoviePermalURLEndStr[i],MoviePermalURLEndFlag[i])
Flag=1
ENDIF
NEXT
IFB Flag=1
//Permallinkを取得できた場合
PUTFUKIDASI("Permallink取得成功")
//記号系の置換
MoviePageURL=FIXURL(MoviePageURL)
//文字列を結合しURL生成
VideoDownloaderURL=VideoDownloaderURLHeader+MoviePageURL+VideoDownloaderURLFooter
VideoDownloaderSource = GETPAGESOURCE(VideoDownloaderURL)
IFB POS("Error",VideoDownloaderSource)>0
//それでもVideoDownloaderがエラーを起こす場合
PUTERROR("クリップボード内URL・Permallink取得結果共に<#CR>VideoDownloaderが対応していないURLです")
ENDIF
ELSE
//Permallinkを取得できなかった場合
PUTERROR("VideoDownloaderが対応していないURLです")
ENDIF
ENDIF
//-----------------------------------------------------
// 動画ページURLから動画タイトルを生成
//-----------------------------------------------------
PUTFUKIDASI("動画本体アドレス取得中")
MoviePageSource=GETPAGESOURCE(MoviePageURL)
MovieTitle=""
//動画抽出範囲が指定されている場合はその部分から抽出
FOR i=0 TO RESIZE(SpecificSiteURLforTitleRange)
//コピーされたURLの先頭部分がDB内URLと一致するか
IFB COPY(MoviePageURL,1,LENGTH(SpecificSiteURLforTitleRange[i])) = SpecificSiteURLforTitleRange[i]
MovieTitle=EXTRACTION(MoviePageSource,TitleRangeStartStr[i],TitleRangeStartFlag[i],TitleRangeEndStr[i],TitleRangeEndFlag[i])
ENDIF
NEXT
// この時点でタイトルが空白=動画抽出範囲が指定されていないor正常動作していない
IFB MovieTitle=""
MovieTitle=EXTRACTION(MoviePageSource,"",1," ",1)
ENDIF
//タイトル内の不要文字列を除外
FOR i=0 TO RESIZE(TitleUnnecessaryStr)
MovieTitle=CHGMOJ(MovieTitle,TitleUnnecessaryStr[i],"")
NEXT
//indexページの場合は日付を末尾に付加
FOR i=0 TO RESIZE(URLIndexStr)
IFB COPY(MoviePageURL,LENGTH(MoviePageURL)-LENGTH(URLIndexStr[i])+1,LENGTH(URLIndexStr[i]))=URLIndexStr[i]
GETTIME(0)
MovieTitle=MovieTitle+"("+G_TIME_YY+"年"+G_TIME_MM+"月"+G_TIME_DD+"日)"
ENDIF
NEXT
//-----------------------------------------------------
// 取得したVideoDownloaderソースから動画本体アドレスを抽出
//-----------------------------------------------------
NumberOfMovies=0
WHILE TRUE
MovieFileURL[NumberOfMovies]=EXTRACTION(VideoDownloaderSource,VideoURLRangeStartStr,VideoURLRangeStartFlag+VideoURLRangeStartStep*NumberOfMovies,VideoURLRangeEndStr,VideoURLRangeEndFlag+VideoURLRangeEndStep*NumberOfMovies)
IFB MovieFileURL[NumberOfMovies]<>""
NumberOfMovies=NumberOfMovies+1
IFB NumberOfMovies=100
BREAK
ENDIF
ELSE
BREAK
ENDIF
WEND
//-----------------------------------------------------
// 取得したVideoDownloaderソースから動画本体の拡張子を抽出
//-----------------------------------------------------
FOR i=0 TO NumberOfMovies-1
MovieFileExtension[i]=EXTRACTION(VideoDownloaderSource,VideoExtensionRangeStartStr,VideoExtensionRangeStartFlag+VideoExtensionRangeStartStep*i,VideoExtensionRangeEndStr,VideoExtensionRangeEndFlag+VideoExtensionRangeEndStep*i)
//抽出範囲内から更に「.」を除外
MovieFileExtension[i]=CHGMOJ(MovieFileExtension[i],".","")
//VideoDownloaderが拡張子以外を表示する場合への対応
MovieFileExtension[i]=CHGMOJ(MovieFileExtension[i],"mms - wmv streaming file","wmv")
NEXT
//-----------------------------------------------------
// irvファイルを生成しIrvineにダウンロードを行わせる
//-----------------------------------------------------
PUTFUKIDASI("Irvineを呼び出し中")
// irvファイルを削除・終了を待機
DOSCMD("del <#DBL>" + IrvinePath + "VideoDownloader.irv<#DBL>", FALSE)
// irvファイルの生成
IrvineList=FOPEN(IrvinePath+"VideoDownloader.irv", F_WRITE)
IFB NumberOfMovies=1
FPUT(IrvineList, MovieFileURL[i-1] + "<#TAB><#TAB>" + MovieTitle + "." + MovieFileExtension[i-1] + "<#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB>VDLIrv.uwsによる追加アイテム<#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#CR>")
ELSE
FOR i=1 TO NumberOfMovies
FPUT(IrvineList, MovieFileURL[i-1] + "<#TAB><#TAB>" + MovieTitle + "(" + i + ")." + MovieFileExtension[i-1] + "<#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB>VDLIrv.uwsによる追加アイテム<#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#TAB><#CR>")
NEXT
ENDIF
FCLOSE(IrvineList)
// 生成されたリストをIrvineに渡して起動
EXEC("<#DBL>" + IrvinePath + "irvine.exe<#DBL> <#DBL>" + IrvinePath + "VideoDownloader.irv<#DBL>", FALSE)
FUKIDASI()
EXITEXIT
//================================================
// 関数
//================================================
//ウェブページのソース取得
FUNCTION GETPAGESOURCE(PageURL)
msXMLhttp = CREATEOLEOBJ("Microsoft.XMLhttp")
msXMLhttp.open("GET", PageURL, 0) //async=false(=0)
msXMLhttp.send()
RESULT=msXMLhttp.responseText
FEND
//●●の中で●●(●番目の)から●●(●番目の)までを抽出
FUNCTION EXTRACTION(Source,StartStr,StartFlag,EndStr,EndFlag)
PositionStart=POS(StartStr,Source,StartFlag)
PositionEnd=POS(EndStr,Source,EndFlag)
//文字数を考慮し抽出領域を確定
Str=COPY(Source,PositionStart+LENGTH(StartStr),PositionEnd-PositionStart-LENGTH(StartStr))
//抽出範囲内に改行コード/Tabがあったら除外
Str=CHGMOJ(Str,"<#CR>","")
Str=CHGMOJ(Str," ","")
RESULT=Str
FEND
// URL文字列で記号系を置換
FUNCTION FIXURL(URLStr)
URLStr=CHGMOJ(URLStr,"?","%3F")
URLStr=CHGMOJ(URLStr,"=","%3D")
URLStr=CHGMOJ(URLStr,"&","%26")
RESULT=URLStr
FEND
// 吹き出しを出力
FUNCTION PUTFUKIDASI(Message)
FUKIDASI(Message,G_MOUSE_X,G_MOUSE_Y,,,,$000000,$FFFFFF,128)
RESULT=""
FEND
// エラーメッセージを出力し終了
FUNCTION PUTERROR(Message)
FUKIDASI()
MSGBOX(Message)
EXITEXIT
RESULT=""
FEND